From asqueaker at gmail.com Mon Aug 1 01:36:33 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Aug 1 01:37:14 2016 Subject: [squeak-dev] Re: [ANN] Widget Refactorings & UI Themes for Squeak In-Reply-To: <1469958949870-4908862.post@n4.nabble.com> References: <1469711671857-4908439.post@n4.nabble.com> <1469717356456-4908467.post@n4.nabble.com> <1469826724440-4908739.post@n4.nabble.com> <1469958949870-4908862.post@n4.nabble.com> Message-ID: I'm still using the Spur 3692 VM, and was able to update my trunk image with no problems. On Sun, Jul 31, 2016 at 4:55 AM, marcel.taeumel wrote: > marcel.taeumel wrote >> >> Chris Muller-3 wrote >>>>> One could experiment with removing that check for a while. >>> >>> Instead of removing it, couldn't we just override it in SystemWindow? >> Wouldn't work because it does not affect instances of SystemWindow but its >> submorphs. Anyway, I found a solution. >> >> Best, >> Marcel > > Hi, there. > > It's all in the Trunk now. It should work. :-) I do only have some troubles > with the VM when applying all the updates to Eliot's working image. I > suspect a bug in the VM. If you also experience VM crashes, open Monticello > and the trunk/update map manually. Now load one mcm after the other > (starting with mt.372.mcm). > > If you get debuggers, please report. There might still be some fine-tuning > left in the .mcm's package load order. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/ANN-Widget-Refactorings-UI-Themes-for-Squeak-tp4908439p4908862.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From commits at source.squeak.org Mon Aug 1 01:38:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 01:38:27 2016 Subject: [squeak-dev] The Trunk: Network-ul.180.mcz Message-ID: Levente Uzonyi uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-ul.180.mcz ==================== Summary ==================== Name: Network-ul.180 Author: ul Time: 25 July 2016, 8:40:01.001452 pm UUID: 2f23a55c-fec5-41ac-95bd-6a8c2458be95 Ancestors: Network-nice.179 Socket changes: - fixed the comment of #isOtherEndConnected and #isThisEndConnected - do not slice the data (TCP) in the image in #sendData:. Let the VM, the kernel, the hardware deal with that. - use #isOtherEndConnected when receiving data, and #isThisEndConnected when sending data instead of #isConnected - move away from #milliseconds:since:, since we have a clock that won't roll over =============== Diff against Network-nice.179 =============== Item was changed: ----- Method: Socket>>closeAndDestroy: (in category 'connection open/close') ----- closeAndDestroy: timeoutSeconds "First, try to close this connection gracefully. If the close attempt fails or times out, abort the connection. In either case, destroy the socket. Do nothing if the socket has already been destroyed (i.e., if its socketHandle is nil)." + socketHandle ifNil: [ ^self ]. + self isThisEndConnected ifTrue: [ + self close. "Close this end." ]. + (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ + "The other end has not closed the connect yet, so we will just abort it." + self primSocketAbortConnection: socketHandle ]. + self destroy! - socketHandle ifNotNil: [ - self isConnected ifTrue: [ - self close. "close this end" - (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ - "The other end didn't close so we just abort the connection" - self primSocketAbortConnection: socketHandle]]. - self destroy]. - ! Item was changed: ----- Method: Socket>>discardReceivedData (in category 'receiving') ----- discardReceivedData "Discard any data received up until now, and return the number of bytes discarded." | buf totalBytesDiscarded | buf := String new: 10000. totalBytesDiscarded := 0. + [self isOtherEndConnected and: [self dataAvailable]] whileTrue: [ - [self isConnected and: [self dataAvailable]] whileTrue: [ totalBytesDiscarded := totalBytesDiscarded + (self receiveDataInto: buf)]. ^ totalBytesDiscarded ! Item was changed: ----- Method: Socket>>isOtherEndConnected (in category 'queries') ----- isOtherEndConnected + "Return true if this socket is connected, or this end has closed the connection but not the other end, so we can still receive data." - "Return true if this socket is connected, or this end has closed the connection but not the other end, so we can still send data." | state | socketHandle ifNil: [ ^false ]. (state := self primSocketConnectionStatus: socketHandle) == Connected ifTrue: [ ^true ]. ^state == ThisEndClosed ! Item was changed: ----- Method: Socket>>isThisEndConnected (in category 'queries') ----- isThisEndConnected + "Return true if this socket is connected, other the other end has closed the connection but not this end, so we can still send data." - "Return true if this socket is connected, other the other end has closed the connection but not this end, so we can still receive data." | state | socketHandle ifNil: [ ^false ]. (state := self primSocketConnectionStatus: socketHandle) == Connected ifTrue: [ ^true ]. ^state == OtherEndClosed ! Item was changed: ----- Method: Socket>>sendData: (in category 'sending') ----- sendData: aStringOrByteArray "Send all of the data in the given array, even if it requires multiple calls to send it all. Return the number of bytes sent." "An experimental version use on slow lines: Longer timeout and smaller writes to try to avoid spurious timeouts." | bytesSent bytesToSend count | bytesToSend := aStringOrByteArray size. bytesSent := 0. [bytesSent < bytesToSend] whileTrue: [ (self waitForSendDoneFor: 60) ifFalse: [ConnectionTimedOut signal: 'send data timeout; data not sent']. count := self primSocket: socketHandle sendData: aStringOrByteArray startIndex: bytesSent + 1 + count: bytesToSend - bytesSent. - count: (bytesToSend - bytesSent min: DefaultSendBufferSize). bytesSent := bytesSent + count]. ^ bytesSent ! Item was changed: ----- Method: Socket>>waitForConnectionFor:ifTimedOut:ifRefused: (in category 'waiting') ----- waitForConnectionFor: timeout ifTimedOut: timeoutBlock ifRefused: refusedBlock "Wait up until the given deadline for a connection to be established. Return true if it is established by the deadline, false if not." + | deadline timeLeft status | + deadline := Time millisecondClockValue + (timeout * 1000) truncated. + (status := self primSocketConnectionStatus: socketHandle) == Connected ifTrue: [^true]. + [ (status == WaitingForConnection) and: [ (timeLeft := deadline - Time millisecondClockValue) > 0 ] ] - | startTime msecsDelta msecsEllapsed status | - startTime := Time millisecondClockValue. - msecsDelta := (timeout * 1000) truncated. - status := self primSocketConnectionStatus: socketHandle. - status = Connected ifTrue: [^true]. - [(status = WaitingForConnection) and: [(msecsEllapsed := Time millisecondsSince: startTime) < msecsDelta]] whileTrue: [ + semaphore waitTimeoutMSecs: timeLeft. + status := self primSocketConnectionStatus: socketHandle ]. + status == Connected ifTrue: [ ^true ]. + status == WaitingForConnection + ifTrue: [ timeoutBlock value ] + ifFalse: [ refusedBlock value ]. + ^false! - semaphore waitTimeoutMSecs: msecsDelta - msecsEllapsed. - status := self primSocketConnectionStatus: socketHandle]. - status = Connected - ifFalse: [ - status = WaitingForConnection - ifTrue: [timeoutBlock value] - ifFalse: [refusedBlock value]. - ^false]. - ^ true! Item was changed: ----- Method: Socket>>waitForConnectionUntil: (in category 'waiting') ----- waitForConnectionUntil: deadline "Wait up until the given deadline for a connection to be established. Return true if it is established by the deadline, false if not." + | status timeLeft | - | status waitTime | [ (status := self primSocketConnectionStatus: socketHandle) == Connected ifTrue: [ ^true ]. status == WaitingForConnection ifFalse: [ ^false ]. + (timeLeft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^false ]. + semaphore waitTimeoutMSecs: timeLeft ] repeat! - (waitTime := deadline - Time millisecondClockValue) > 0 ifFalse: [ ^false ]. - semaphore waitTimeoutMSecs: waitTime ] repeat! Item was changed: ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category 'waiting') ----- waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock "Wait for the given nr of seconds for data to arrive." + | deadline timeLeft | - | startTime msecsDelta | socketHandle ifNil: [ ^closedBlock value ]. + deadline := Time millisecondClockValue + (timeout * 1000) truncated. - startTime := Time millisecondClockValue. - msecsDelta := (timeout * 1000) truncated. [ (self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ]. + self isOtherEndConnected ifFalse: [ ^closedBlock value ]. + (timeLeft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^timedOutBlock value ]. - self isConnected ifFalse: [ ^closedBlock value ]. - (Time millisecondsSince: startTime) < msecsDelta ifFalse: [ ^timedOutBlock value ]. "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." readSemaphore waitTimeoutMSecs: + (timeLeft min: self class maximumReadSemaphoreWaitTimeout) ] repeat! - (msecsDelta - (Time millisecondsSince: startTime) min: self class maximumReadSemaphoreWaitTimeout) ] repeat! Item was changed: ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') ----- waitForDataIfClosed: closedBlock "Wait indefinitely for data to arrive. This method will block until data is available or the socket is closed." socketHandle ifNil: [ ^closedBlock value ]. [ (self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ]. + self isOtherEndConnected ifFalse: [ ^closedBlock value ]. - self isConnected ifFalse: [ ^closedBlock value ]. "ul 8/13/2014 21:16 Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Replace the ""waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout"" part with ""wait"" when the bug is fixed." readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout ] repeat! Item was changed: ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting') ----- waitForDisconnectionFor: timeout "Wait for the given nr of seconds for the connection to be broken. Return true if it is broken by the deadline, false if not. The client should know the connection is really going to be closed (e.g., because he has called 'close' to send a close request to the other end) before calling this method." + | deadline | + deadline := Time millisecondClockValue + (timeout * 1000) truncated. + [ self isOtherEndConnected and: [ deadline - Time millisecondClockValue > 0 ] ] + whileTrue: [ + self discardReceivedData. + "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." + readSemaphore waitTimeoutMSecs: + (deadline - Time millisecondClockValue min: self class maximumReadSemaphoreWaitTimeout) ]. + ^self isOtherEndConnected! - | startTime msecsDelta status | - startTime := Time millisecondClockValue. - msecsDelta := (timeout * 1000) truncated. - status := self primSocketConnectionStatus: socketHandle. - [((status == Connected) or: [(status == ThisEndClosed)]) and: - [(Time millisecondsSince: startTime) < msecsDelta]] whileTrue: [ - self discardReceivedData. - "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." - readSemaphore waitTimeoutMSecs: - (msecsDelta - (Time millisecondsSince: startTime) min: self class maximumReadSemaphoreWaitTimeout). - status := self primSocketConnectionStatus: socketHandle]. - ^ status ~= Connected! Item was changed: ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') ----- waitForSendDoneFor: timeout "Wait up until the given deadline for the current send operation to complete. Return true if it completes by the deadline, false if not." + | deadline timeleft | + deadline := Time millisecondClockValue + (timeout * 1000) truncated. - | startTime msecsDelta msecsEllapsed | - startTime := Time millisecondClockValue. - msecsDelta := (timeout * 1000) truncated. [ (self primSocketSendDone: socketHandle) ifTrue: [ ^true ]. + self isThisEndConnected ifFalse: [ ^false ]. + (timeleft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^false ]. + writeSemaphore waitTimeoutMSecs: timeleft ] repeat! - self isConnected ifFalse: [ ^false ]. - (msecsEllapsed := Time millisecondsSince: startTime) < msecsDelta ifFalse: [ ^false ]. - writeSemaphore waitTimeoutMSecs: msecsDelta - msecsEllapsed ] repeat! From leves at caesar.elte.hu Mon Aug 1 01:39:43 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Aug 1 01:39:47 2016 Subject: [squeak-dev] The Inbox: Network-ul.180.mcz In-Reply-To: References: Message-ID: Hi Chris, I decide to move this to the Trunk because the feature freeze is here. This should also help getting more feedback. :) Levente On Mon, 25 Jul 2016, Chris Muller wrote: > Hi Levente, Magma's test cases can't seem to get to the end with > this.. I haven't investigated yet.. > > On Mon, Jul 25, 2016 at 2:40 PM, Levente Uzonyi wrote: >> Hi All, >> >> This is something to test on all platforms before push. I've used it on >> 64-bit linux without problems so far. >> >> Levente >> >> >> On Mon, 25 Jul 2016, commits@source.squeak.org wrote: >> >>> Levente Uzonyi uploaded a new version of Network to project The Inbox: >>> http://source.squeak.org/inbox/Network-ul.180.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Network-ul.180 >>> Author: ul >>> Time: 25 July 2016, 8:40:01.001452 pm >>> UUID: 2f23a55c-fec5-41ac-95bd-6a8c2458be95 >>> Ancestors: Network-nice.179 >>> >>> Socket changes: >>> - fixed the comment of #isOtherEndConnected and #isThisEndConnected >>> - do not slice the data (TCP) in the image in #sendData:. Let the VM, the >>> kernel, the hardware deal with that. >>> - use #isOtherEndConnected when receiving data, and #isThisEndConnected >>> when sending data instead of #isConnected >>> - move away from #milliseconds:since:, since we have a clock that won't >>> roll over >>> >>> =============== Diff against Network-nice.179 =============== >>> >>> Item was changed: >>> ----- Method: Socket>>closeAndDestroy: (in category 'connection >>> open/close') ----- >>> closeAndDestroy: timeoutSeconds >>> "First, try to close this connection gracefully. If the close >>> attempt fails or times out, abort the connection. In either case, destroy >>> the socket. Do nothing if the socket has already been destroyed (i.e., if >>> its socketHandle is nil)." >>> >>> + socketHandle ifNil: [ ^self ]. >>> + self isThisEndConnected ifTrue: [ >>> + self close. "Close this end." ]. >>> + (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ >>> + "The other end has not closed the connect yet, so we will >>> just abort it." >>> + self primSocketAbortConnection: socketHandle ]. >>> + self destroy! >>> - socketHandle ifNotNil: [ >>> - self isConnected ifTrue: [ >>> - self close. "close this end" >>> - (self waitForDisconnectionFor: >>> timeoutSeconds) ifFalse: [ >>> - "The other end didn't >>> close so we just abort the connection" >>> - self >>> primSocketAbortConnection: socketHandle]]. >>> - self destroy]. >>> - ! >>> >>> Item was changed: >>> ----- Method: Socket>>discardReceivedData (in category 'receiving') ----- >>> discardReceivedData >>> "Discard any data received up until now, and return the number of >>> bytes discarded." >>> >>> | buf totalBytesDiscarded | >>> buf := String new: 10000. >>> totalBytesDiscarded := 0. >>> + [self isOtherEndConnected and: [self dataAvailable]] whileTrue: [ >>> - [self isConnected and: [self dataAvailable]] whileTrue: [ >>> totalBytesDiscarded := >>> totalBytesDiscarded + (self receiveDataInto: >>> buf)]. >>> ^ totalBytesDiscarded >>> ! >>> >>> Item was changed: >>> ----- Method: Socket>>isOtherEndConnected (in category 'queries') ----- >>> isOtherEndConnected >>> + "Return true if this socket is connected, or this end has closed >>> the connection but not the other end, so we can still receive data." >>> - "Return true if this socket is connected, or this end has closed >>> the connection but not the other end, so we can still send data." >>> >>> | state | >>> socketHandle ifNil: [ ^false ]. >>> (state := self primSocketConnectionStatus: socketHandle) == >>> Connected ifTrue: [ ^true ]. >>> ^state == ThisEndClosed >>> ! >>> >>> Item was changed: >>> ----- Method: Socket>>isThisEndConnected (in category 'queries') ----- >>> isThisEndConnected >>> + "Return true if this socket is connected, other the other end has >>> closed the connection but not this end, so we can still send data." >>> - "Return true if this socket is connected, other the other end has >>> closed the connection but not this end, so we can still receive data." >>> >>> | state | >>> socketHandle ifNil: [ ^false ]. >>> (state := self primSocketConnectionStatus: socketHandle) == >>> Connected ifTrue: [ ^true ]. >>> ^state == OtherEndClosed >>> ! >>> >>> Item was changed: >>> ----- Method: Socket>>sendData: (in category 'sending') ----- >>> sendData: aStringOrByteArray >>> "Send all of the data in the given array, even if it requires >>> multiple calls to send it all. Return the number of bytes sent." >>> >>> "An experimental version use on slow lines: Longer timeout and >>> smaller writes to try to avoid spurious timeouts." >>> >>> | bytesSent bytesToSend count | >>> bytesToSend := aStringOrByteArray size. >>> bytesSent := 0. >>> [bytesSent < bytesToSend] whileTrue: [ >>> (self waitForSendDoneFor: 60) >>> ifFalse: [ConnectionTimedOut signal: 'send data >>> timeout; data not sent']. >>> count := self primSocket: socketHandle >>> sendData: aStringOrByteArray >>> startIndex: bytesSent + 1 >>> + count: bytesToSend - bytesSent. >>> - count: (bytesToSend - bytesSent min: >>> DefaultSendBufferSize). >>> bytesSent := bytesSent + count]. >>> >>> ^ bytesSent >>> ! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForConnectionFor:ifTimedOut:ifRefused: (in >>> category 'waiting') ----- >>> waitForConnectionFor: timeout ifTimedOut: timeoutBlock ifRefused: >>> refusedBlock >>> "Wait up until the given deadline for a connection to be >>> established. Return true if it is established by the deadline, false if >>> not." >>> >>> + | deadline timeLeft status | >>> + deadline := Time millisecondClockValue + (timeout * 1000) >>> truncated. >>> + (status := self primSocketConnectionStatus: socketHandle) == >>> Connected ifTrue: [^true]. >>> + [ (status == WaitingForConnection) and: [ (timeLeft := deadline - >>> Time millisecondClockValue) > 0 ] ] >>> - | startTime msecsDelta msecsEllapsed status | >>> - startTime := Time millisecondClockValue. >>> - msecsDelta := (timeout * 1000) truncated. >>> - status := self primSocketConnectionStatus: socketHandle. >>> - status = Connected ifTrue: [^true]. >>> - [(status = WaitingForConnection) and: [(msecsEllapsed := Time >>> millisecondsSince: startTime) < msecsDelta]] >>> whileTrue: [ >>> + semaphore waitTimeoutMSecs: timeLeft. >>> + status := self primSocketConnectionStatus: >>> socketHandle ]. >>> + status == Connected ifTrue: [ ^true ]. >>> + status == WaitingForConnection >>> + ifTrue: [ timeoutBlock value ] >>> + ifFalse: [ refusedBlock value ]. >>> + ^false! >>> - semaphore waitTimeoutMSecs: msecsDelta - >>> msecsEllapsed. >>> - status := self primSocketConnectionStatus: >>> socketHandle]. >>> - status = Connected >>> - ifFalse: [ >>> - status = WaitingForConnection >>> - ifTrue: [timeoutBlock value] >>> - ifFalse: [refusedBlock value]. >>> - ^false]. >>> - ^ true! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForConnectionUntil: (in category 'waiting') >>> ----- >>> waitForConnectionUntil: deadline >>> "Wait up until the given deadline for a connection to be >>> established. Return true if it is established by the deadline, false if >>> not." >>> >>> + | status timeLeft | >>> - | status waitTime | >>> [ >>> (status := self primSocketConnectionStatus: socketHandle) >>> == Connected ifTrue: [ ^true ]. >>> status == WaitingForConnection ifFalse: [ ^false ]. >>> + (timeLeft := deadline - Time millisecondClockValue) <= 0 >>> ifTrue: [ ^false ]. >>> + semaphore waitTimeoutMSecs: timeLeft ] repeat! >>> - (waitTime := deadline - Time millisecondClockValue) > 0 >>> ifFalse: [ ^false ]. >>> - semaphore waitTimeoutMSecs: waitTime ] repeat! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category >>> 'waiting') ----- >>> waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock >>> "Wait for the given nr of seconds for data to arrive." >>> >>> + | deadline timeLeft | >>> - | startTime msecsDelta | >>> socketHandle ifNil: [ ^closedBlock value ]. >>> + deadline := Time millisecondClockValue + (timeout * 1000) >>> truncated. >>> - startTime := Time millisecondClockValue. >>> - msecsDelta := (timeout * 1000) truncated. >>> [ >>> (self primSocketReceiveDataAvailable: socketHandle) >>> ifTrue: [ ^self ]. >>> + self isOtherEndConnected ifFalse: [ ^closedBlock value ]. >>> + (timeLeft := deadline - Time millisecondClockValue) <= 0 >>> ifTrue: [ ^timedOutBlock value ]. >>> - self isConnected ifFalse: [ ^closedBlock value ]. >>> - (Time millisecondsSince: startTime) < msecsDelta ifFalse: >>> [ ^timedOutBlock value ]. >>> "Providing a maximum for the time for waiting is a >>> workaround for a VM bug which causes sockets waiting for data forever in >>> some rare cases, because the semaphore doesn't get signaled. Remove the >>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>> fixed." >>> readSemaphore waitTimeoutMSecs: >>> + (timeLeft min: self class >>> maximumReadSemaphoreWaitTimeout) ] repeat! >>> - (msecsDelta - (Time millisecondsSince: startTime) >>> min: self class maximumReadSemaphoreWaitTimeout) ] repeat! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') ----- >>> waitForDataIfClosed: closedBlock >>> "Wait indefinitely for data to arrive. This method will block >>> until >>> data is available or the socket is closed." >>> >>> socketHandle ifNil: [ ^closedBlock value ]. >>> [ >>> (self primSocketReceiveDataAvailable: socketHandle) >>> ifTrue: [ ^self ]. >>> + self isOtherEndConnected ifFalse: [ ^closedBlock value ]. >>> - self isConnected ifFalse: [ ^closedBlock value ]. >>> "ul 8/13/2014 21:16 >>> Providing a maximum for the time for waiting is a >>> workaround for a VM bug which >>> causes sockets waiting for data forever in some rare >>> cases, because the semaphore >>> doesn't get signaled. Replace the ""waitTimeoutMSecs: >>> self class maximumReadSemaphoreWaitTimeout"" >>> part with ""wait"" when the bug is fixed." >>> readSemaphore waitTimeoutMSecs: self class >>> maximumReadSemaphoreWaitTimeout ] repeat! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting') >>> ----- >>> waitForDisconnectionFor: timeout >>> "Wait for the given nr of seconds for the connection to be broken. >>> Return true if it is broken by the deadline, false if not. >>> The client should know the connection is really going to be closed >>> (e.g., because he has called 'close' to send a close request to >>> the other end) >>> before calling this method." >>> >>> + | deadline | >>> + deadline := Time millisecondClockValue + (timeout * 1000) >>> truncated. >>> + [ self isOtherEndConnected and: [ deadline - Time >>> millisecondClockValue > 0 ] ] >>> + whileTrue: [ >>> + self discardReceivedData. >>> + "Providing a maximum for the time for waiting is a >>> workaround for a VM bug which causes sockets waiting for data forever in >>> some rare cases, because the semaphore doesn't get signaled. Remove the >>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>> fixed." >>> + readSemaphore waitTimeoutMSecs: >>> + (deadline - Time millisecondClockValue >>> min: self class maximumReadSemaphoreWaitTimeout) ]. >>> + ^self isOtherEndConnected! >>> - | startTime msecsDelta status | >>> - startTime := Time millisecondClockValue. >>> - msecsDelta := (timeout * 1000) truncated. >>> - status := self primSocketConnectionStatus: socketHandle. >>> - [((status == Connected) or: [(status == ThisEndClosed)]) and: >>> - [(Time millisecondsSince: startTime) < msecsDelta]] whileTrue: [ >>> - self discardReceivedData. >>> - "Providing a maximum for the time for waiting is a >>> workaround for a VM bug which causes sockets waiting for data forever in >>> some rare cases, because the semaphore doesn't get signaled. Remove the >>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>> fixed." >>> - readSemaphore waitTimeoutMSecs: >>> - (msecsDelta - (Time millisecondsSince: startTime) >>> min: self class maximumReadSemaphoreWaitTimeout). >>> - status := self primSocketConnectionStatus: socketHandle]. >>> - ^ status ~= Connected! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') ----- >>> waitForSendDoneFor: timeout >>> "Wait up until the given deadline for the current send operation >>> to complete. Return true if it completes by the deadline, false if not." >>> >>> + | deadline timeleft | >>> + deadline := Time millisecondClockValue + (timeout * 1000) >>> truncated. >>> - | startTime msecsDelta msecsEllapsed | >>> - startTime := Time millisecondClockValue. >>> - msecsDelta := (timeout * 1000) truncated. >>> [ >>> (self primSocketSendDone: socketHandle) ifTrue: [ ^true ]. >>> + self isThisEndConnected ifFalse: [ ^false ]. >>> + (timeleft := deadline - Time millisecondClockValue) <= 0 >>> ifTrue: [ ^false ]. >>> + writeSemaphore waitTimeoutMSecs: timeleft ] repeat! >>> - self isConnected ifFalse: [ ^false ]. >>> - (msecsEllapsed := Time millisecondsSince: startTime) < >>> msecsDelta ifFalse: [ ^false ]. >>> - writeSemaphore waitTimeoutMSecs: msecsDelta - >>> msecsEllapsed ] repeat! >>> >>> >>> >> > > From commits at source.squeak.org Mon Aug 1 12:43:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 12:43:24 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1218.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1218.mcz ==================== Summary ==================== Name: Morphic-mt.1218 Author: mt Time: 1 August 2016, 2:42:37.666063 pm UUID: c5757b59-e3d1-5841-a689-f52f1a38c28e Ancestors: Morphic-mt.1217 Add the possibility to filter button-only dialogs via keyboard expressions as known from menus. =============== Diff against Morphic-mt.1217 =============== Item was changed: Morph subclass: #DialogWindow + instanceVariableNames: 'titleMorph messageMorph paneMorph buttonRow result selectedButton cancelButton timeout preferredPosition keyMap exclusive filter filterEnabled filterMorph' - instanceVariableNames: 'titleMorph messageMorph paneMorph buttonRow result selectedButton cancelButton timeout preferredPosition keyMap exclusive' classVariableNames: 'GradientDialog RoundedDialogCorners UseWiggleAnimation' poolDictionaries: '' category: 'Morphic-Windows'! !DialogWindow commentStamp: '' prior: 0! A DialogBoxMorph is Morph used in simple yes/no/confirm dialogs. Strongly modal.! Item was changed: ----- Method: DialogWindow>>createBody (in category 'initialization') ----- createBody | body | body := Morph new changeTableLayout; hResizing: #shrinkWrap; vResizing: #shrinkWrap; listDirection: #topToBottom; cellPositioning: #leftCenter; layoutInset: (10@5 corner: 10@10); cellInset: 5; color: Color transparent; yourself. + body addAllMorphs: {self createMessage: ''. self createPane. self createButtonRow. self createFilter}. - body addAllMorphs: {self createMessage: ''. self createPane. self createButtonRow}. self addMorphBack: body.! Item was added: + ----- Method: DialogWindow>>createFilter (in category 'initialization') ----- + createFilter + + filterMorph := '' asText asMorph lock. + filterMorph + visible: false; + disableTableLayout: true. + ^ filterMorph! Item was changed: ----- Method: DialogWindow>>drawOverlayOn: (in category 'drawing') ----- drawOverlayOn: aCanvas | title inset | super drawOverlayOn: aCanvas. title := self submorphs first. self wantsRoundedCorners ifTrue: [ inset := (self class roundedDialogCorners and: [self class gradientDialog]) "This check compensates a bug in balloon." ifTrue: [0@0 corner: 0@ -1] ifFalse: [self borderWidth @ 0]. "Overdraw lower part of title bar to hide bottom corners." aCanvas fillRectangle:( (title bottomLeft - (0 @ self submorphs first cornerRadius) corner: title bottomRight) insetBy: inset) color: self color]. "Draw a line between the title and the contents." self borderWidth > 0 ifTrue: [ "Redraw the border all around. Needed because rounded borders do not align very well." self wantsRoundedCorners ifTrue: [ aCanvas frameRoundRect: self bounds radius: self cornerRadius width: self borderStyle width color: self borderStyle color] ifFalse: [aCanvas frameRectangle: self bounds width: self borderStyle width color: self borderStyle color]].! Item was changed: ----- Method: DialogWindow>>ensureSelectedButton (in category 'selection') ----- ensureSelectedButton + self buttons ifEmpty: [^ self]. + self selectedButton ifNil: [self selectButton: self buttons first]. + self selectedButton enabled ifFalse: [self selectNextButton].! - self selectedButton ifNil: [self selectButton: self buttons first].! Item was added: + ----- Method: DialogWindow>>filter (in category 'accessing') ----- + filter + ^ filter ifNil: ['']! Item was added: + ----- Method: DialogWindow>>filter: (in category 'accessing') ----- + filter: aString + filter := aString. + self updateFilter.! Item was added: + ----- Method: DialogWindow>>filterEnabled (in category 'accessing') ----- + filterEnabled + ^ filterEnabled ifNil: [false]! Item was added: + ----- Method: DialogWindow>>filterEnabled: (in category 'accessing') ----- + filterEnabled: aBoolean + + filterEnabled := aBoolean. + self updateFilter.! Item was changed: ----- Method: DialogWindow>>keyStroke: (in category 'events') ----- keyStroke: evt | char | self stopAutoTrigger. char := evt keyCharacter. char = Character escape ifTrue: [ ^ self cancelDialog ]. (char = Character cr or: [char = Character enter]) ifTrue: [ ^ self closeDialog ]. ((char = Character arrowLeft or: [char = Character arrowUp]) or: [ evt shiftPressed and: [ char = Character tab ] ]) ifTrue: [ ^ self selectPreviousButton ]. ((char = Character arrowRight or: [char = Character arrowDown]) or: [ char = Character tab ]) ifTrue: [ ^ self selectNextButton ]. + + self filterEnabled ifTrue: [ + char = Character backspace ifTrue: [self filter: (self filter ifEmpty: [''] ifNotEmpty: [:f | f allButLast])]. + (char isAlphaNumeric or: [char = Character space]) + ifTrue: [self filter: self filter, char asString]]. + - keyMap at: char asLowercase ifPresent: [ : foundButton | foundButton performAction ] ifAbsent: [ "do nothing" ].! Item was changed: ----- Method: DialogWindow>>selectNextButton (in category 'selection') ----- selectNextButton self selectedButton ifNil: [^ self]. + (self buttons anySatisfy: [:ea | ea enabled]) ifFalse: [^ self]. + + self selectedButtonIndex: self selectedButtonIndex \\ self buttons size + 1. + self selectedButton enabled ifFalse: [self selectNextButton].! - self selectedButtonIndex: self selectedButtonIndex \\ self buttons size + 1.! Item was changed: ----- Method: DialogWindow>>selectPreviousButton (in category 'selection') ----- selectPreviousButton self selectedButton ifNil: [^ self]. + (self buttons anySatisfy: [:ea | ea enabled]) ifFalse: [^ self]. + + self selectedButtonIndex: self selectedButtonIndex - 2 \\ self buttons size + 1. + self selectedButton enabled ifFalse: [self selectPreviousButton].! - self selectedButtonIndex: self selectedButtonIndex - 2 \\ self buttons size + 1.! Item was changed: ----- Method: DialogWindow>>setMessageParameters (in category 'initialization') ----- setMessageParameters messageMorph ifNotNil: [ | fontToUse colorToUse | fontToUse := self userInterfaceTheme font ifNil: [TextStyle defaultFont]. colorToUse := self userInterfaceTheme textColor ifNil: [Color black]. messageMorph contents addAttribute: (TextFontReference toFont: fontToUse); addAttribute: (TextColor color: colorToUse). + messageMorph textColor: colorToUse. messageMorph releaseParagraph; changed].! Item was added: + ----- Method: DialogWindow>>updateFilter (in category 'updating') ----- + updateFilter + + self buttons do: [:ea | + ea enabled: (self filter isEmpty or: [ea label asString includesSubstring: self filter caseSensitive: false])]. + + filterMorph + visible: self filter notEmpty; + disableTableLayout: self filter isEmpty; + contents: '<', self filter, '>'; + textColor: self messageMorph textColor. + + self ensureSelectedButton.! From commits at source.squeak.org Mon Aug 1 12:44:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 12:44:48 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.176.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.176.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.176 Author: mt Time: 1 August 2016, 2:44:38.851063 pm UUID: 90acc5bd-1f6a-4f48-b1ac-d36a798437d4 Ancestors: ToolBuilder-Morphic-mt.175 For lists smaller than or equal to 7, use button-only dialog but still support keyboard filtering. Note that people tend to choose between #(yes no) and hence we do need such a button-only version of a list chooser. Still, better than using menus in terms of input modality and visual consistency. =============== Diff against ToolBuilder-Morphic-mt.175 =============== Item was changed: ----- Method: MorphicUIManager>>chooseFrom:lines:title: (in category 'ui requests') ----- chooseFrom: aList lines: linesArray title: aString "Choose an item from the given list. Answer the index of the selected item." aList size <= 7 ifTrue: [ | dialog | dialog := DialogWindow new title: 'Please Choose'; message: aString; + filterEnabled: true; yourself. aList doWithIndex: [:ea :index | dialog createButton: ea value: index]. dialog selectedButtonIndex: 1. ^ dialog getUserResponseAtHand ifNil: [0]]. ^ ListChooser chooseFrom: aList title: aString! From Marcel.Taeumel at hpi.de Mon Aug 1 12:07:14 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Aug 1 12:52:04 2016 Subject: [squeak-dev] Re: The Trunk: ToolBuilder-Morphic-mt.176.mcz In-Reply-To: References: Message-ID: <1470053234799-4908989.post@n4.nabble.com> Here is some explanation: You can filter all these dialogs by just typing something and then pressing or or double-clicking some element in the list. UIManager default chooseFrom: (Smalltalk classNames first: 7). UIManager default chooseFrom: (Smalltalk classNames first: 8). UIManager default chooseFrom: (Smalltalk classNames). We need this button-only dialog because there is much code doing this: UIManager default chooseFrom: #(yes no cancel). Instead of asking for a confirmation dialog. I hope this works for everybody. I terms of modality and visual consistency, I am strongly against (mis)using pop-up menus for this choosing task in the future. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-176-mcz-tp4908988p4908989.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Mon Aug 1 13:12:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 13:12:40 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.641.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.641.mcz ==================== Summary ==================== Name: Monticello-mt.641 Author: mt Time: 1 August 2016, 3:12:22.642063 pm UUID: 6e5db234-d1b0-1544-b633-dfd20aead82a Ancestors: Monticello-mt.640 If we are in feature-freeze or code-freeze, inform the developer when committing to the trunk repository. =============== Diff against Monticello-mt.640 =============== Item was changed: ----- Method: MCWorkingCopyBrowser>>saveVersion (in category 'actions') ----- saveVersion | repo | self canSave ifFalse: [^self]. self checkForNewerVersions ifFalse: [^self]. repo := self repository. + (repo == MCRepository trunk and: [SystemVersion current isFeatureFreeze]) + ifTrue: [self inform: 'FEATURE FREEZE. A new release is being prepared.\Please do only do bugfixes, but no new features.' translated withCRs]. + (repo == MCRepository trunk and: [SystemVersion current isCodeFreeze]) + ifTrue: [self inform: 'CODE FREEZE. The new release is almost ready.\Please do only do URGENT fixes, if any.' translated withCRs]. + (self withRepository: repo do: [workingCopy newVersion]) ifNotNil: [:v | (MCVersionInspector new version: v) show. Cursor wait showWhile: [repo storeVersion: v]. MCCacheRepository default cacheAllFileNamesDuring: [repo cacheAllFileNamesDuring: [v allAvailableDependenciesDo: [:dep | (repo includesVersionNamed: dep info name) ifFalse: [repo storeVersion: dep]]]]]! From commits at source.squeak.org Mon Aug 1 13:13:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 13:13:21 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.140.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.140.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.140 Author: mt Time: 1 August 2016, 3:13:12.180063 pm UUID: 908dfe7e-fd75-5f44-a62e-3a141a625134 Ancestors: ReleaseBuilder-mt.139 Feature-freeze the Trunk. =============== Diff against ReleaseBuilder-mt.139 =============== Item was changed: ----- Method: ReleaseBuilder class>>initialize (in category 'class initialization') ----- initialize Smalltalk addToStartUpList: self. + SystemVersion newVersion: 'Squeak5.1beta'.! - SystemVersion newVersion: 'Squeak5.1alpha'.! From commits at source.squeak.org Mon Aug 1 13:17:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 13:17:40 2016 Subject: [squeak-dev] The Trunk: System-mt.856.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.856.mcz ==================== Summary ==================== Name: System-mt.856 Author: mt Time: 1 August 2016, 3:17:05.483063 pm UUID: e9f7d2ad-81a0-1d4f-b553-31510a255316 Ancestors: System-mt.855 Revise the system version descriptions. Be not so talky in release versions. =============== Diff against System-mt.855 =============== Item was changed: ----- Method: SystemVersion>>description (in category 'printing') ----- description + self isAlpha ifTrue: [^ 'ALPHA. New features which are not stable yet may come in\with each update. Also, existing features might not work reliably\due to updates and related changes.' translated withCRs]. - self isAlpha ifTrue: [^ 'This is an ALPHA version. It means that new features might be\introduced with each update or that very basic functions might\be quite buggy at the moment.\\Please refrain from using this version for important projects.' translated withCRs]. + self isFeatureFreeze ifTrue: [^ 'FEATURE FREEZE. A new release is being prepared.\There will be only bugfixes, but no new features.' translated withCRs]. - self isFeatureFreeze ifTrue: [^ 'This is a FEATURE FREEZE version. We are in the middle of preparing\a new release. It means that there will be no new features but only bugfixes.\\Please do not contribute new features at the moment. ;-)' translated withCRs]. + self isCodeFreeze ifTrue: [^ 'RELEASE CANDIDATE. The new release is almost ready.\There will be only bugfixes, if any.' translated withCRs]. - self isCodeFreeze ifTrue: [^ 'This is a RELEASE CANDIDATE version. It means that we are almost\done preparing the new release.\\Please do ONLY contribute URGENT fixes. Thank you. :-)' translated withCRs]. + self isRelease ifTrue: [^ ''].! - self isRelease ifTrue: [^ self inform: 'This is a release version. It means that there will be only\bugfixes but no new features.\\Have fun. :-)' translated withCRs].! From Marcel.Taeumel at hpi.de Mon Aug 1 12:55:39 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Aug 1 13:40:28 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates Message-ID: <1470056139149-4909004.post@n4.nabble.com> Hi, there! It's "feature freeze" time. :-) Please do not try out new features in the Trunk for now. If you forgot something, please ask first. We'll find a way. @Chris: What is needed in the image for the MC History function? There was at least one fix for the ServiceEntry left in your inbox, right? We will now work on correcting some in-image texts, release information, etc. We will also work on the release automation scripts using TravisCI, smalltalkCI, and GitHub. The next dates are: * Code Freeze on August 14, 23:59 AOE * Release between August 15 and 19 Let's hope that this will work out as expected. :-) Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Mon Aug 1 15:13:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 15:13:40 2016 Subject: [squeak-dev] The Trunk: System-mt.857.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.857.mcz ==================== Summary ==================== Name: System-mt.857 Author: mt Time: 1 August 2016, 5:13:08.765106 pm UUID: 0297521f-ec7e-7e4e-88c1-725a49f25bd2 Ancestors: System-mt.856 Theme the three-phase button, too. =============== Diff against System-mt.856 =============== Item was changed: ----- Method: SqueakTheme class>>addButtons: (in category 'instance creation') ----- addButtons: theme theme set: #borderColor for: #PluggableButtonMorph to: Color gray; set: #borderWidth for: #PluggableButtonMorph to: 1; set: #borderStyle for: #PluggableButtonMorph to: BorderStyle default; set: #color for: #PluggableButtonMorph to: [Color gray: 0.91]; set: #font for: #PluggableButtonMorph to: [Preferences standardButtonFont]; set: #textColor for: #PluggableButtonMorph to: Color black; set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.2] ]; set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. "And the plus-version." theme set: #disabledColor for: #PluggableButtonMorphPlus to: Color transparent; set: #disabledTextColor for: #PluggableButtonMorphPlus to: (Color gray: 0.6). + + "And the three-phase button." + theme + derive: #color for: #ThreePhaseButtonMorph from: #PluggableButtonMorph at: #textColor; + derive: #font for: #ThreePhaseButtonMorph from: #PluggableButtonMorph; + derive: #textColor for: #ThreePhaseButtonMorph from: #PluggableButtonMorph.! - ! From commits at source.squeak.org Mon Aug 1 15:15:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 15:15:45 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1219.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1219.mcz ==================== Summary ==================== Name: Morphic-mt.1219 Author: mt Time: 1 August 2016, 5:14:54.536106 pm UUID: d7730709-869a-b847-adaa-ee09107f7cdd Ancestors: Morphic-mt.1218 Fixes a bug in the pluggable button label drawing code. Theme the three-phase button, too. =============== Diff against Morphic-mt.1218 =============== Item was changed: ----- Method: ImageMorph>>extent: (in category 'geometry') ----- extent: aPoint + + super extent: self preferredExtent.! - "Do nothing; my extent is determined by my image Form." - ! Item was changed: ----- Method: ImageMorph>>image: (in category 'accessing') ----- image: anImage self changed. image := anImage depth = 1 ifTrue: [ColorForm mappingWhiteToTransparentFrom: anImage] ifFalse: [anImage]. + super extent: self preferredExtent! - super extent: image extent! Item was added: + ----- Method: ImageMorph>>preferredExtent (in category 'accessing') ----- + preferredExtent + ^ image ifNil: [0@0] ifNotNil: [image extent]! Item was changed: ----- Method: PluggableButtonMorph>>drawLabelOn: (in category 'drawing') ----- drawLabelOn: aCanvas | fontToUse labelToUse colorToUse labelWidth layoutBounds drawBlock | self label ifNil: [^ self]. layoutBounds := self layoutBounds. labelToUse := self label asString. fontToUse := self font. colorToUse := self textColorToUse. "Support very narrow buttons. Shrink text to monogram then." + ((layoutBounds width < self labelShrinkThreshold + and: [self hResizing ~~ #shrinkWrap]) + and: [labelToUse size > 3]) ifTrue: [ + labelToUse := labelToUse first asString. "Show first character only." + fontToUse := fontToUse emphasized: (TextEmphasis bold) emphasisCode]. - (layoutBounds width < self labelShrinkThreshold and: [labelToUse size > 3]) ifTrue: [ - labelToUse := labelToUse first asString. "Show first character only." - fontToUse := fontToUse emphasized: (TextEmphasis bold) emphasisCode]. labelWidth := fontToUse widthOfString: labelToUse. drawBlock := [:c | c drawString: labelToUse at: (layoutBounds center x - (labelWidth // 2) max: (layoutBounds left)) @ (layoutBounds center y - (fontToUse height // 2)) font: fontToUse color: colorToUse]. self clipSubmorphs ifTrue: [aCanvas clipBy: layoutBounds during: drawBlock] ifFalse: [drawBlock value: aCanvas]! Item was changed: ImageMorph subclass: #ThreePhaseButtonMorph + instanceVariableNames: 'offImage pressedImage state target actionSelector arguments actWhen label font textColor' - instanceVariableNames: 'offImage pressedImage state target actionSelector arguments actWhen' classVariableNames: 'AuthorModeOwner' poolDictionaries: '' category: 'Morphic-Widgets'! !ThreePhaseButtonMorph commentStamp: '' prior: 0! A button morph with separate images for on, off, and pressed with the mouse. When the event actWhen occurs, send actionSelector with 'arguments' to target. For other events, default to my eventHandler. The current event is not supplied in the arguments to the actionSelector. image (a.k.a. onImage) may not be nil. offImage and pressedImage may be nil. nil there means be transparent and show the underlying object. Tools for debugging: Display the images momentarily under program control (for positioning) (self is an instance). self state: #on. self state: #off. self state: #pressed. self state: #off. Display a rectangle where the button is. Display fillWithColor: bounds + (self world viewBox origin). self invalidRect: bounds.! Item was changed: ----- Method: ThreePhaseButtonMorph class>>checkBox (in category 'instance creation') ----- checkBox "Answer a button pre-initialized with checkbox images." | f | ^self new onImage: (f := ScriptingSystem formAtKey: 'CheckBoxOn'); pressedImage: (ScriptingSystem formAtKey: 'CheckBoxPressed'); offImage: (ScriptingSystem formAtKey: 'CheckBoxOff'); extent: f extent + (2@0); + setDefaultParameters; yourself ! Item was changed: ----- Method: ThreePhaseButtonMorph class>>radioButton (in category 'instance creation') ----- radioButton "Answer a button pre-initialized with radiobutton images." | f | ^self new onImage: (f := ScriptingSystem formAtKey: 'RadioButtonOn'); pressedImage: (ScriptingSystem formAtKey: 'RadioButtonPressed'); offImage: (ScriptingSystem formAtKey: 'RadioButtonOff'); extent: f extent + (2@0); + setDefaultParameters; yourself ! Item was added: + ----- Method: ThreePhaseButtonMorph class>>themeProperties (in category 'preferences') ----- + themeProperties + + ^ super themeProperties, { + { #color. 'Colors'. 'Color of the button.' }. + { #font. 'Fonts'. 'Font for button title.' }. + { #textColor. 'Colors'. 'Color for the button title label.' }. + }! Item was added: + ----- Method: ThreePhaseButtonMorph>>applyUserInterfaceTheme (in category 'updating') ----- + applyUserInterfaceTheme + + super applyUserInterfaceTheme. + self setDefaultParameters.! Item was added: + ----- Method: ThreePhaseButtonMorph>>color: (in category 'accessing') ----- + color: c + + self onImage ifNotNil: [:form | + self onImage: ((form asFormOfDepth: 32) collectColors: [:col | c alpha: col alpha])]. + self offImage ifNotNil: [:form | + self offImage: ((form asFormOfDepth: 32) collectColors: [:col | c alpha: col alpha])]. + self pressedImage ifNotNil: [:form | + self pressedImage: ((form asFormOfDepth: 32) collectColors: [:col | c alpha: col alpha])]. + + ^ super color: c! Item was added: + ----- Method: ThreePhaseButtonMorph>>currentImage (in category 'accessing') ----- + currentImage + + state == #off ifTrue: [^ offImage]. + state == #pressed ifTrue: [^ pressedImage]. + state == #on ifTrue: [^ image]. + ^ image! Item was changed: ----- Method: ThreePhaseButtonMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas + | imageToUse | + + imageToUse := self currentImage. + + imageToUse ifNotNil: [aCanvas translucentImage: imageToUse at: bounds origin]. + + self label ifNotNil: [:lbl | + aCanvas + drawString: lbl + at: bounds origin + (imageToUse ifNil: [0@0] ifNotNil: [:form | (form width @ 0) + (3@0)]) + font: self font + color: self textColor].! - state == #off ifTrue: [ - offImage ifNotNil: [aCanvas translucentImage: offImage at: bounds origin]]. - state == #pressed ifTrue: [ - pressedImage ifNotNil: [aCanvas translucentImage: pressedImage at: bounds origin]]. - state == #on ifTrue: [ - image ifNotNil: [aCanvas translucentImage: image at: bounds origin]].! Item was added: + ----- Method: ThreePhaseButtonMorph>>font (in category 'accessing') ----- + font + ^ font ifNil: [TextStyle defaultFont]! Item was added: + ----- Method: ThreePhaseButtonMorph>>font: (in category 'accessing') ----- + font: aFont + font := aFont. + super extent: self preferredExtent.! Item was added: + ----- Method: ThreePhaseButtonMorph>>label (in category 'accessing') ----- + label + ^ label! Item was added: + ----- Method: ThreePhaseButtonMorph>>label: (in category 'accessing') ----- + label: aString + label := aString. + super extent: self preferredExtent.! Item was added: + ----- Method: ThreePhaseButtonMorph>>preferredExtent (in category 'accessing') ----- + preferredExtent + + | iw ih lw lh | + iw := self currentImage width. + ih := self currentImage height. + lw := self font widthOfString: (self label ifNil: ['']). + lh := self font height. + ^ (iw + 3 + lw) @ (ih max: lh)! Item was added: + ----- Method: ThreePhaseButtonMorph>>setDefaultParameters (in category 'initialization') ----- + setDefaultParameters + + self + color: (self userInterfaceTheme color ifNil: [Color black]); + font: (self userInterfaceTheme font ifNil: [TextStyle defaultFont]); + textColor: (self userInterfaceTheme textColor ifNil: [Color black]).! Item was added: + ----- Method: ThreePhaseButtonMorph>>textColor (in category 'accessing') ----- + textColor + ^ textColor ifNil: [Color black]! Item was added: + ----- Method: ThreePhaseButtonMorph>>textColor: (in category 'accessing') ----- + textColor: aColor + textColor := aColor.! From commits at source.squeak.org Mon Aug 1 15:18:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 15:18:18 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.63.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.63.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.63 Author: mt Time: 1 August 2016, 5:18:07.719106 pm UUID: b534f79f-adbf-164f-80c0-4eb1c4740b8d Ancestors: PreferenceBrowser-mt.62 Fixes the appearance of the preference browser considering themes. There are still some UI glitches, but at least a freshly opened preference browser looks now like the current UI theme suggests it. Yeah, we borrow UI properties from the PluggableListMorph because the whole preference browser is subject to refactoring in the future. (Sorry for this small hack. Kids, do not use UserInterfaceTheme like that! Look away! Hurry! What's that? Ice cream? Ice cream!) =============== Diff against PreferenceBrowser-mt.62 =============== Item was changed: ----- Method: PBBooleanPreferenceView>>enabledButton (in category 'user interface') ----- enabledButton + | aButton | - | aButton aLabel | aButton := UpdatingThreePhaseButtonMorph checkBox target: self preference; actionSelector: #togglePreferenceValue; getSelector: #preferenceValue; + label: 'enabled' translated; yourself. - aLabel := (StringMorph contents: 'enabled' translated - font: (StrikeFont familyName: TextStyle defaultFont familyName - pointSize: TextStyle defaultFont pointSize - 1)). ^self horizontalPanel addMorphBack: aButton; - addMorphBack: aLabel; yourself.! Item was changed: ----- Method: PBBooleanPreferenceView>>localToProjectButton (in category 'user interface') ----- localToProjectButton + | aButton | - | aButton aLabel | aButton := UpdatingThreePhaseButtonMorph checkBox target: self preference; actionSelector: #toggleProjectLocalness; getSelector: #localToProject; + label: 'local' translated; yourself. - aLabel := (StringMorph contents: 'local' translated - font: (StrikeFont familyName: TextStyle defaultFont familyName - pointSize: TextStyle defaultFont pointSize - 1)). ^self horizontalPanel addMorphBack: aButton; - addMorphBack: aLabel; yourself.! Item was changed: ----- Method: PBBooleanPreferenceView>>representativeButtonWithColor:inPanel: (in category 'user interface') ----- representativeButtonWithColor: aColor inPanel: aPreferencesPanel ^self horizontalPanel layoutInset: 2; cellInset: 7; color: aColor; + addMorphBack: self morphForName; - addMorphBack: (StringMorph contents: self preference name); addMorphBack: self horizontalFiller; addMorphBack: self enabledButton; addMorphBack: self localToProjectButton; yourself.! Item was changed: ----- Method: PBColorPreferenceView>>representativeButtonWithColor:inPanel: (in category 'user interface') ----- representativeButtonWithColor: aColor inPanel: aPreferenceBrowser ^self horizontalPanel layoutInset: 2; color: aColor; cellInset: 20; cellPositioning: #center; + addMorphBack: self morphForName; - addMorphBack: (StringMorph contents: self preference name); addMorphBack: self horizontalFiller; addMorphBack: self colorMenuButton; yourself! Item was changed: ----- Method: PBHaloThemePreferenceView>>representativeButtonWithColor:inPanel: (in category 'user interface') ----- representativeButtonWithColor: aColor inPanel: aPreferencesPanel | innerPanel | innerPanel := self horizontalPanel addMorphBack: (self blankSpaceOf: 10@0); addMorphBack: self haloThemeRadioButtons; yourself. ^self verticalPanel color: aColor; layoutInset: 2; + addMorphBack: self morphForName; - addMorphBack: (StringMorph contents: self preference name); addMorphBack: innerPanel.! Item was changed: ----- Method: PBNumericPreferenceView>>representativeButtonWithColor:inPanel: (in category 'user interface') ----- representativeButtonWithColor: aColor inPanel: aPreferenceBrowser ^self horizontalPanel layoutInset: 2; color: aColor; cellInset: 20; cellPositioning: #center; + addMorphBack: self morphForName; - addMorphBack: (StringMorph contents: self preference name); addMorphBack: self horizontalFiller; addMorphBack: self textField; yourself.! Item was changed: ----- Method: PBNumericPreferenceView>>textField (in category 'user interface') ----- textField ^(PluggableTextMorph on: self text: #preferenceValue accept: #preferenceValue:) hideScrollBarsIndefinitely; - borderColor: #inset; acceptOnCR: true; - color: Color gray veryMuchLighter; vResizing: #rigid; hResizing: #spaceFill; height: TextStyle defaultFont height + 6; yourself.! Item was changed: ----- Method: PBPreferenceButtonMorph>>highlightOff (in category 'highlighting') ----- highlightOff self beTransparent. + self label + color: ((UserInterfaceTheme current get: #textColor for: PluggableListMorph) ifNil: [Color black]); + font: ((UserInterfaceTheme current get: #font for: PluggableListMorph) ifNil: [TextStyle defaultFont]). - self label color: Color black. self removeExtraControls.! Item was changed: ----- Method: PBPreferenceButtonMorph>>highlightOn (in category 'highlighting') ----- highlightOn + self color: ((UserInterfaceTheme current get: #selectionColor for: PluggableListMorph) ifNil: [Color gray alpha: 0.1]). + + self label + color: ((UserInterfaceTheme current get: #selectionTextColor for: PluggableListMorph) ifNil: [Color black]); + font: ((UserInterfaceTheme current get: #font for: PluggableListMorph) ifNil: [TextStyle defaultFont]). + - self color: (Color gray alpha: 0.1). - self addExtraControls.! Item was changed: ----- Method: PBPreferenceButtonMorph>>preferenceHelpText (in category 'preference accessing') ----- preferenceHelpText ^self preferenceHelp asText addAttribute: TextEmphasis italic; + addAttribute: (TextColor color: ((UserInterfaceTheme current get: #textColor for: PluggableListMorph) ifNil: [Color black])); yourself.! Item was changed: ----- Method: PBTextPreferenceView>>representativeButtonWithColor:inPanel: (in category 'user interface') ----- representativeButtonWithColor: aColor inPanel: aPreferenceBrowser ^self horizontalPanel layoutInset: 2; color: aColor; cellInset: 20; cellPositioning: #center; + addMorphBack: self morphForName; - addMorphBack: (StringMorph contents: self preference name); addMorphBack: self textField; yourself.! Item was changed: ----- Method: PreferenceBrowserMorph>>basicButton (in category 'submorphs - buttons') ----- basicButton + + ^ PluggableButtonMorph new + model: self model; + offColor: self paneColor; + hResizing: #shrinkWrap; + layoutInset: (15@5 corner: 15@5); + yourself! - | button | - button := SimpleButtonMorph new. - button - borderWidth: 2; - borderColor: #raised; - on: #mouseEnter send: #value to: [button borderColor: self paneColor]; - on: #mouseLeave send: #value to: [button borderColor: #raised]; - vResizing: #spaceFill; - useRoundedCorners; - clipSubmorphs: true; - color: self paneColor muchLighter; - target: self model. - ^button! Item was changed: ----- Method: PreferenceBrowserMorph>>defaultButton (in category 'submorphs - buttons') ----- defaultButton ^defaultButton ifNil: [defaultButton := self basicButton label: 'default' translated; + action: #defaultSelected; - actionSelector: #defaultSelected; setBalloonText: 'Click here to reset all the preferences to their standard ', 'default values.' translated]! Item was changed: ----- Method: PreferenceBrowserMorph>>helpButton (in category 'submorphs - buttons') ----- helpButton ^helpButton ifNil: [helpButton := self basicButton label: 'help' translated; setBalloonText: 'Click here to get some hints on use of this Preferences ', 'Panel' translated; + action: #helpSelected]! - actionSelector: #helpSelected]! Item was changed: ----- Method: PreferenceBrowserMorph>>loadButton (in category 'submorphs - buttons') ----- loadButton ^loadButton ifNil: [loadButton := self basicButton label: 'load' translated; + action: #loadSelected; - actionSelector: #loadSelected; setBalloonText: 'Click here to reset all the preferences to their values ', 'in your Personal Preferences.' translated]! Item was changed: ----- Method: PreferenceBrowserMorph>>loadFromDiskButton (in category 'submorphs - buttons') ----- loadFromDiskButton ^loadFromDiskButton ifNil: [loadFromDiskButton := self basicButton label: 'load from disk' translated; + action: #loadFromDiskSelected; - actionSelector: #loadFromDiskSelected; setBalloonText: 'Click here to load all the preferences from ', 'their saved values on disk.' translated]! Item was changed: ----- Method: PreferenceBrowserMorph>>newCategoryList (in category 'submorphs - category list') ----- newCategoryList ^(PluggableListMorph on: self model list: #categoryList selected: #selectedCategoryIndex changeSelected: #selectedCategoryIndex:) - color: Color white; - borderInset; hResizing: #spaceFill; vResizing: #spaceFill; layoutFrame: (LayoutFrame fractions: (0@0 corner: 0.25@1)); yourself.! Item was changed: ----- Method: PreferenceBrowserMorph>>newSearchTextField (in category 'submorphs - search panel') ----- newSearchTextField | ptm | ptm := PluggableTextMorphPlus on: self model text: #searchPatternNeverTriggered accept: #searchPattern:. ptm minimumHeight: 0; balloonText: 'Search preferences ...'; hideScrollBarsIndefinitely; layoutFrame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0@ (TextStyle default lineGrid * 2))); borderInset; - color: Color white; vResizing: #spaceFill; hResizing: #spaceFill; acceptOnCR: true; onKeyStrokeSend: #value to: [ ptm hasUnacceptedEdits ifTrue: [ ptm accept ] ]. ^ptm.! Item was changed: ----- Method: PreferenceBrowserMorph>>preferenceList (in category 'submorphs - preference list') ----- preferenceList ^preferenceList ifNil: [preferenceList := ScrollPane new - color: Color white; - borderInset; vResizing: #spaceFill; hResizing: #spaceFill; + layoutFrame: (LayoutFrame fractions: (0.25@0 corner: 1@1) offsets: (4@0 corner: 0@0)). - layoutFrame: (LayoutFrame fractions: (0.25@0 corner: 1@1)). preferenceList scroller - on: #mouseEnter send: #value: - to: [:event | event hand newKeyboardFocus: preferenceList scroller]; on: #keyStroke send: #keyPressed: to: self. preferenceList.]! Item was changed: ----- Method: PreferenceBrowserMorph>>saveButton (in category 'submorphs - buttons') ----- saveButton ^saveButton ifNil: [saveButton := self basicButton label: 'save' translated; + action: #saveSelected; - actionSelector: #saveSelected; setBalloonText: 'Click here to save the current constellation of Preferences ', 'settings as your personal defaults; you can get them all ', 'reinstalled with a single gesture by clicking the "Restore ', 'my Personal Preferences".' translated]! Item was changed: ----- Method: PreferenceBrowserMorph>>saveToDiskButton (in category 'submorphs - buttons') ----- saveToDiskButton ^saveToDiskButton ifNil: [saveToDiskButton := self basicButton label: 'save to disk' translated; + action: #saveToDiskSelected; - actionSelector: #saveToDiskSelected; setBalloonText: 'Click here to save the current constellation of Preferences ', 'settings to a file; you can get them all reinstalled with a ', 'single gesture by clicking "Restore Settings From Disk".' translated]! Item was changed: ----- Method: PreferenceBrowserMorph>>themeButton (in category 'submorphs - buttons') ----- themeButton ^themeButton ifNil: [themeButton := self basicButton label: 'theme...' translated; + action: #themeSelected; - actionSelector: #themeSelected; setBalloonText: 'Numerous "Preferences" govern many things about the ', 'way Squeak looks and behaves. Set individual preferences ', 'using a "Preferences" panel. Set an entire "theme" of many ', 'Preferences all at the same time by pressing this "change ', 'theme" button and choosing a theme to install. Look in ', 'category "themes" in Preferences class to see what each ', 'theme does; add your own methods to the "themes" ', 'category and they will show up in the list of theme ', 'choices.' translated].! Item was added: + ----- Method: PreferenceView>>morphForName (in category 'user interface') ----- + morphForName + + ^ ((StringMorph contents: self preference name) + color: ((UserInterfaceTheme current get: #textColor for: PluggableListMorph) ifNil: [Color black]); + font: ((UserInterfaceTheme current get: #font for: PluggableListMorph) ifNil: [TextStyle defaultFont]); + yourself)! Item was changed: ----- Method: PreferenceView>>tearOffButton (in category 'user interface') ----- tearOffButton "Hand the user a button the can control this" | aButton | + aButton := self representativeButtonWithColor: ((UserInterfaceTheme current get: #uniformWindowColor for: Model) ifNil: [Color white]) inPanel: nil. - aButton := self representativeButtonWithColor: Color white inPanel: nil. aButton borderWidth: 1; borderColor: Color black; useRoundedCorners. aButton openInHand! From commits at source.squeak.org Mon Aug 1 15:21:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 15:21:29 2016 Subject: [squeak-dev] The Trunk: System-mt.858.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.858.mcz ==================== Summary ==================== Name: System-mt.858 Author: mt Time: 1 August 2016, 5:20:59.661106 pm UUID: a27d5973-1724-5a4e-a013-45aa8c9bd421 Ancestors: System-mt.857 Re-create all basic themes due to the latest updates in three-phase button morph. =============== Diff against System-mt.857 =============== Item was changed: + (PackageInfo named: 'System') postscript: '"Re-create all themes." + SqueakTheme create apply. - (PackageInfo named: 'System') postscript: 'SqueakTheme create apply. SqueakTheme createClassic; createDuller. SolarizedTheme createDark; createLight. MonokaiTheme createDark. CommunityTheme createDark.'! From karlramberg at gmail.com Mon Aug 1 19:20:45 2016 From: karlramberg at gmail.com (karl ramberg) Date: Mon Aug 1 19:20:49 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1470056139149-4909004.post@n4.nabble.com> References: <1470056139149-4909004.post@n4.nabble.com> Message-ID: I suggest a mention dedication of the late Seymour Papert in this release. So much of what has founded and driven Smalltalk and Squeak development is related to his ideas on teaching and education. Best, Karl On Mon, Aug 1, 2016 at 2:55 PM, marcel.taeumel wrote: > Hi, there! > > It's "feature freeze" time. :-) Please do not try out new features in the > Trunk for now. If you forgot something, please ask first. We'll find a way. > > @Chris: What is needed in the image for the MC History function? There was > at least one fix for the ServiceEntry left in your inbox, right? > > We will now work on correcting some in-image texts, release information, > etc. We will also work on the release automation scripts using TravisCI, > smalltalkCI, and GitHub. > > The next dates are: > * Code Freeze on August 14, 23:59 AOE > * Release between August 15 and 19 > > Let's hope that this will work out as expected. :-) > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160801/665ab9b9/attachment.htm From commits at source.squeak.org Mon Aug 1 19:27:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 19:27:13 2016 Subject: [squeak-dev] The Trunk: Services-Base-cmm.59.mcz Message-ID: Chris Muller uploaded a new version of Services-Base to project The Trunk: http://source.squeak.org/trunk/Services-Base-cmm.59.mcz ==================== Summary ==================== Name: Services-Base-cmm.59 Author: cmm Time: 1 August 2016, 2:27:04.61688 pm UUID: 47d86ec3-8926-4a76-a51b-20c21cd0aae2 Ancestors: Services-Base-mt.58 Fix for selection of ServiceEntry items on menus activated from background windows. =============== Diff against Services-Base-mt.58 =============== Item was added: + ----- Method: PasteUpMorph>>focusedRequestor (in category '*services-base') ----- + focusedRequestor + "returns the focused window's requestor" + ^self submorphs + detect: [:ea | ea isSystemWindow and: [ea isLookingFocused]] + ifFound: [:ea | ea requestor] + ifNone: [Requestor default]! Item was removed: - ----- Method: PasteUpMorph>>topRequestor (in category '*services-base') ----- - topRequestor - "returns the focused window's requestor" - ^ SystemWindow topWindow requestor! Item was changed: ----- Method: ServiceAction>>execute (in category 'executing') ----- execute + ^ action clone valueWithRequestor: World focusedRequestor! - ^ action clone valueWithRequestor: World topRequestor! Item was changed: ----- Method: ServiceAction>>executeCondition (in category 'executing') ----- executeCondition + ^ [condition clone valueWithRequestor: World focusedRequestor] - ^ [condition clone valueWithRequestor: World topRequestor] on: Error do: [false]! From Yoshiki.Ohshima at acm.org Mon Aug 1 20:09:15 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Mon Aug 1 20:09:19 2016 Subject: [squeak-dev] International text input on X11 In-Reply-To: <86F00595-E5BD-4560-8D82-67074F1AE5A0@rowledge.org> References: <20160514030535.GB15271@shell.msen.com> <70720C82-CCB2-4D9D-83E1-35E2E8A58740@gmail.com> <20160515045834.GA18254@shell.msen.com> <7956D0A9-4B3D-43B2-B5F9-4C304F8D7641@rowledge.org> <1625F308-347F-4BAE-9320-C537D6A2926F@rowledge.org> <87D463B2-0B43-4459-86F8-9D443E7E3672@rowledge.org> <1BB917F1-B774-48BC-B46C-B4DD61A65F94@rowledge.org> <6688F519-D4EC-4C39-AFE2-3BDC967C48E2@rowledge.org> <86F00595-E5BD-4560-8D82-67074F1AE5A0@rowledge.org> Message-ID: With those scripts (and with my modification send in a separate email) and the VM I compiled from the github source, it handles -compositioninput properly and I can get the Japanese text into Scratch where the proper environment variables are set. (The composition window's position is not there yet as the image I have is "02052015".) It probably is nice if I test everything as people would see them. I am now trying to run the matchbox-keyboard and see how it interacts with Scratch. On Thu, Jul 14, 2016 at 10:42 AM, tim Rowledge wrote: > >> On 13-07-2016, at 8:30 PM, Yoshiki Ohshima wrote: >> >> >> >> On Wed, Jul 13, 2016 at 4:14 PM, tim Rowledge wrote: >> > {snip} >> >>> A script to do the install is simple enough and I suspect someone can offer up the incantation to automate adding the relevant lines to .bashrc or create it if needed. >>> >>> yes, and there are bunch of those floating on websites for Japanese. Many educators make their own disk image, etc. so while it'd be good to provide such to the world, it may not be the job for the Squeak community. Some people have different font preferences even, and they make pages or images that has modified .po file (that contains font spec). So I think the Squeak community's job is to provide a good foundation for internationalized Scratch. > > > OK, fair point. Perhaps you could provide a pointer to a good place for people to look? We (as in the Pi foundation) ought to provide at least that much I think, so that anyone new to the scene has a decent starting place. > > >> >> I dropped the ball about the shell script, but where does it stand? > > The scratch script handles choosing the image, handling some options (like ?sudo for users of xrdp) and finding out if the camera, senseHAT or pigpio need setting up before calling the squeak script. That in turn finds the latest VM (now that we will be able to rely on a single vm version designator), sorts out the clib gunk, checks XMODIFIERS etc and finally starts up the vm with all the set parameters. > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Computing Dictionary: Recursive: (see Recursive) > > > -- -- Yoshiki From Yoshiki.Ohshima at acm.org Mon Aug 1 20:43:50 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Mon Aug 1 20:43:56 2016 Subject: [squeak-dev] International text input on X11 In-Reply-To: References: <20160514030535.GB15271@shell.msen.com> <70720C82-CCB2-4D9D-83E1-35E2E8A58740@gmail.com> <20160515045834.GA18254@shell.msen.com> <7956D0A9-4B3D-43B2-B5F9-4C304F8D7641@rowledge.org> <1625F308-347F-4BAE-9320-C537D6A2926F@rowledge.org> <87D463B2-0B43-4459-86F8-9D443E7E3672@rowledge.org> <1BB917F1-B774-48BC-B46C-B4DD61A65F94@rowledge.org> <6688F519-D4EC-4C39-AFE2-3BDC967C48E2@rowledge.org> <86F00595-E5BD-4560-8D82-67074F1AE5A0@rowledge.org> Message-ID: On Thu, Jul 14, 2016 at 11:08 AM, Yoshiki Ohshima wrote: > > > On Thu, Jul 14, 2016 at 10:42 AM, tim Rowledge wrote: >> >> >> > On 13-07-2016, at 8:30 PM, Yoshiki Ohshima >> > wrote: >> > >> > >> > >> > On Wed, Jul 13, 2016 at 4:14 PM, tim Rowledge wrote: >> > >> {snip} >> > >> >> A script to do the install is simple enough and I suspect someone can >> >> offer up the incantation to automate adding the relevant lines to .bashrc or >> >> create it if needed. >> >> >> >> yes, and there are bunch of those floating on websites for Japanese. >> >> Many educators make their own disk image, etc. so while it'd be good to >> >> provide such to the world, it may not be the job for the Squeak community. >> >> Some people have different font preferences even, and they make pages or >> >> images that has modified .po file (that contains font spec). So I think the >> >> Squeak community's job is to provide a good foundation for internationalized >> >> Scratch. >> >> >> OK, fair point. Perhaps you could provide a pointer to a good place for >> people to look? We (as in the Pi foundation) ought to provide at least that >> much I think, so that anyone new to the scene has a decent starting place. > > > Right. I asked Abe-san and Sugiura-san about this. There is a page like this: http://neuralassembly.blogspot.com/2016/06/noobs-192raspbian-jessie-scratch.html which is pretty good but written just before the effort to make the -compositioninput handling streamlined. So the reader has to know about it. There is also a problem in the .po files for Japanese. And many people actually replace the .po files locally. Perhaps the standard distribution should have them. -- -- Yoshiki -------------- next part -------------- A non-text attachment was scrubbed... Name: ja_po_20160801.zip Type: application/zip Size: 21079 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160801/db9797eb/ja_po_20160801-0001.zip From Yoshiki.Ohshima at acm.org Mon Aug 1 20:45:15 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Mon Aug 1 20:45:19 2016 Subject: [squeak-dev] International text input on X11 In-Reply-To: References: <20160514030535.GB15271@shell.msen.com> <70720C82-CCB2-4D9D-83E1-35E2E8A58740@gmail.com> <20160515045834.GA18254@shell.msen.com> <7956D0A9-4B3D-43B2-B5F9-4C304F8D7641@rowledge.org> <1625F308-347F-4BAE-9320-C537D6A2926F@rowledge.org> <87D463B2-0B43-4459-86F8-9D443E7E3672@rowledge.org> <1BB917F1-B774-48BC-B46C-B4DD61A65F94@rowledge.org> <6688F519-D4EC-4C39-AFE2-3BDC967C48E2@rowledge.org> <86F00595-E5BD-4560-8D82-67074F1AE5A0@rowledge.org> Message-ID: On Mon, Aug 1, 2016 at 1:09 PM, Yoshiki Ohshima wrote: > > I am now trying to run the matchbox-keyboard and see how it interacts > with Scratch. As for matchbox-keyboard and Scratch running in the English environment, it works okay. -- -- Yoshiki From commits at source.squeak.org Mon Aug 1 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 1 21:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160801215502.15632.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068385.html Name: Network-ul.180 Ancestors: Network-nice.179 Socket changes: - fixed the comment of #isOtherEndConnected and #isThisEndConnected - do not slice the data (TCP) in the image in #sendData:. Let the VM, the kernel, the hardware deal with that. - use #isOtherEndConnected when receiving data, and #isThisEndConnected when sending data instead of #isConnected - move away from #milliseconds:since:, since we have a clock that won't roll over ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068386.html Name: Morphic-mt.1218 Ancestors: Morphic-mt.1217 Add the possibility to filter button-only dialogs via keyboard expressions as known from menus. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068387.html Name: ToolBuilder-Morphic-mt.176 Ancestors: ToolBuilder-Morphic-mt.175 For lists smaller than or equal to 7, use button-only dialog but still support keyboard filtering. Note that people tend to choose between #(yes no) and hence we do need such a button-only version of a list chooser. Still, better than using menus in terms of input modality and visual consistency. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068388.html Name: Monticello-mt.641 Ancestors: Monticello-mt.640 If we are in feature-freeze or code-freeze, inform the developer when committing to the trunk repository. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068389.html Name: ReleaseBuilder-mt.140 Ancestors: ReleaseBuilder-mt.139 Feature-freeze the Trunk. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068390.html Name: System-mt.856 Ancestors: System-mt.855 Revise the system version descriptions. Be not so talky in release versions. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068391.html Name: System-mt.857 Ancestors: System-mt.856 Theme the three-phase button, too. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068392.html Name: Morphic-mt.1219 Ancestors: Morphic-mt.1218 Fixes a bug in the pluggable button label drawing code. Theme the three-phase button, too. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068393.html Name: PreferenceBrowser-mt.63 Ancestors: PreferenceBrowser-mt.62 Fixes the appearance of the preference browser considering themes. There are still some UI glitches, but at least a freshly opened preference browser looks now like the current UI theme suggests it. Yeah, we borrow UI properties from the PluggableListMorph because the whole preference browser is subject to refactoring in the future. (Sorry for this small hack. Kids, do not use UserInterfaceTheme like that! Look away! Hurry! What's that? Ice cream? Ice cream!) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068394.html Name: System-mt.858 Ancestors: System-mt.857 Re-create all basic themes due to the latest updates in three-phase button morph. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068395.html Name: Services-Base-cmm.59 Ancestors: Services-Base-mt.58 Fix for selection of ServiceEntry items on menus activated from background windows. ============================================= From tim at rowledge.org Mon Aug 1 21:56:25 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Aug 1 21:56:30 2016 Subject: [squeak-dev] International text input on X11 In-Reply-To: References: <20160514030535.GB15271@shell.msen.com> <70720C82-CCB2-4D9D-83E1-35E2E8A58740@gmail.com> <20160515045834.GA18254@shell.msen.com> <7956D0A9-4B3D-43B2-B5F9-4C304F8D7641@rowledge.org> <1625F308-347F-4BAE-9320-C537D6A2926F@rowledge.org> <87D463B2-0B43-4459-86F8-9D443E7E3672@rowledge.org> <1! BB917F1-B774-48BC-B46C-B4DD61A65F94@rowledge.org> <6688F519-D4EC-4C39-AFE2-3BDC967C48E2@rowledge.org> <86F00595-E5BD-4560-8D82-67074F1AE5A0@rowledge.org> Message-ID: > On 01-08-2016, at 1:09 PM, Yoshiki Ohshima wrote: > > With those scripts (and with my modification send in a separate email) > and the VM I compiled from the github source, it handles > -compositioninput properly and I can get the Japanese text into > Scratch where the proper environment variables are set. (The > composition window's position is not there yet as the image I have is > "02052015".) It probably is nice if I test everything as people would > see them. The release candidate for the august Raspbian is at https://github.com/raspberrypi/scratch/commit/3b6cdcb03104964ac4de3472277ce828645a8de8 It?s a simple zipped-tar of the files for the entire release, so untar it in / as in cd / sudo tar xczf {path-to-.tgz} and it ought to put everything where it needs to go. If it doesn?t? a) swear loudly b) re-install a fresh Raspbian c) set it up as your previous version d) eat chocolate e) try again I?m working on release notes and new demo scripts for the new features. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Totum dependeat. = Let it all hang out. From Yoshiki.Ohshima at acm.org Mon Aug 1 23:12:05 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Mon Aug 1 23:12:08 2016 Subject: [squeak-dev] International text input on X11 In-Reply-To: References: <20160514030535.GB15271@shell.msen.com> <70720C82-CCB2-4D9D-83E1-35E2E8A58740@gmail.com> <20160515045834.GA18254@shell.msen.com> <7956D0A9-4B3D-43B2-B5F9-4C304F8D7641@rowledge.org> <1625F308-347F-4BAE-9320-C537D6A2926F@rowledge.org> <87D463B2-0B43-4459-86F8-9D443E7E3672@rowledge.org> <6688F519-D4EC-4C39-AFE2-3BDC967C48E2@rowledge.org> <86F00595-E5BD-4560-8D82-67074F1AE5A0@rowledge.org> Message-ID: On Mon, Aug 1, 2016 at 2:56 PM, tim Rowledge wrote: > >> On 01-08-2016, at 1:09 PM, Yoshiki Ohshima wrote: >> >> With those scripts (and with my modification send in a separate email) >> and the VM I compiled from the github source, it handles >> -compositioninput properly and I can get the Japanese text into >> Scratch where the proper environment variables are set. (The >> composition window's position is not there yet as the image I have is >> "02052015".) It probably is nice if I test everything as people would >> see them. > > The release candidate for the august Raspbian is at https://github.com/raspberrypi/scratch/commit/3b6cdcb03104964ac4de3472277ce828645a8de8 > > It?s a simple zipped-tar of the files for the entire release, so untar it in / as in > cd / > sudo tar xczf {path-to-.tgz} Great. I just did above onto the Japanese environment and it seems to work, including the composition window location. > and it ought to put everything where it needs to go. If it doesn?t? > a) swear loudly > b) re-install a fresh Raspbian > c) set it up as your previous version > d) eat chocolate > e) try again I did not have to do any of those, including d). > I?m working on release notes and new demo scripts for the new features. Great! -- -- Yoshiki From commits at source.squeak.org Tue Aug 2 07:23:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 07:23:51 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1220.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1220.mcz ==================== Summary ==================== Name: Morphic-mt.1220 Author: mt Time: 2 August 2016, 9:23:14.170882 am UUID: f900f8ec-e0be-0a43-8828-b5ecc0624b15 Ancestors: Morphic-mt.1219 I forgot to restore the keyboard shortcut functionality for confirmation dialogs. It has been there before my refactorings. =============== Diff against Morphic-mt.1219 =============== Item was changed: ----- Method: DialogWindow>>registerKeyboardShortcutFor: (in category 'constructing') ----- registerKeyboardShortcutFor: button "Take the first alpha-numeric character that is not already used as a shortcut, and use it as a shortcut." (button valueOfProperty: #normalLabel) asString in: [:normalLabel | normalLabel do: [:char | char isAlphaNumeric ifTrue: [ keyMap at: char asLowercase ifPresent: [] + ifAbsent: [ + button setProperty: #normalLabel toValue: ('{1} ({2})' format: {normalLabel. char asLowercase}). + button label: (button valueOfProperty: #normalLabel). - ifAbsent: [ - button label: ('{1} ({2})' format: {normalLabel. char}). ^ keyMap at: char asLowercase put: button ] ] ] ]! Item was changed: ----- Method: DialogWindow>>step (in category 'stepping and presenter') ----- step timeout ifNil: [^self]. timeout = 0 ifTrue: [ self stopStepping. selectedButton performAction] ifFalse: [ + selectedButton label: ('{1} [{2}]' format: { - selectedButton label: ('{1} ({2})' format: { selectedButton valueOfProperty: #normalLabel. timeout}). timeout := timeout - 1]! Item was changed: ----- Method: UserDialogBoxMorph class>>confirm:orCancel:title:at: (in category 'utilities') ----- confirm: aString orCancel: cancelBlock title: titleString at: aPointOrNil (self new title: titleString; message: aString; createButton: 'Yes' translated value: true; createButton: 'No' translated value: false; createButton: 'Cancel' translated value: nil; selectedButtonIndex: 1; "YES" + registerKeyboardShortcuts; yourself) in: [:dialog | ^ (aPointOrNil ifNil: [dialog getUserResponseAtHand] ifNotNil: [ dialog moveTo: aPointOrNil. dialog getUserResponse]) ifNil: [ cancelBlock value ]]! Item was changed: ----- Method: UserDialogBoxMorph class>>confirm:title:at: (in category 'utilities') ----- confirm: aString title: titleString at: aPointOrNil "UserDialogBoxMorph confirm: 'Make your choice carefully' withCRs title: 'Do you like chocolate?'" ^self new title: titleString; message: aString; createButton: 'Yes' translated value: true; createCancelButton: 'No' translated value: false; selectedButtonIndex: 1; "YES" + registerKeyboardShortcuts; getUserResponseAtHand! Item was changed: ----- Method: UserDialogBoxMorph class>>confirm:title:trueChoice:falseChoice:at: (in category 'utilities') ----- confirm: aString title: titleString trueChoice: trueChoice falseChoice: falseChoice at: aPointOrNil "UserDialogBoxMorph confirm: 'Make your choice carefully' withCRs title: 'Do you like chocolate?' trueChoice: 'Oh yessir!!' falseChoice: 'Not so much...'" ^self new title: titleString; message: aString; createButton: trueChoice translated value: true; createCancelButton: falseChoice translated value: false; selectedButtonIndex: 1; + registerKeyboardShortcuts; moveTo: (aPointOrNil ifNil: [ActiveWorld center]); getUserResponse! Item was changed: ----- Method: UserDialogBoxMorph class>>confirm:title:trueChoice:falseChoice:default:triggerAfter:at: (in category 'utilities') ----- confirm: aString title: titleString trueChoice: trueChoice falseChoice: falseChoice default: default triggerAfter: seconds at: aPointOrNil "UserDialogBoxMorph confirm: 'I like hot java' title: 'What do you say?' trueChoice: 'You bet!!' falseChoice: 'Nope' default: false triggerAfter: 12 at: 121@212" ^self new title: titleString; message: aString; createButton: trueChoice translated value: true; createCancelButton: falseChoice translated value: false; selectedButtonIndex: (default ifTrue: [1] ifFalse: [2]); + registerKeyboardShortcuts; moveTo: (aPointOrNil ifNil: [ActiveWorld center]); getUserResponseAfter: seconds! From commits at source.squeak.org Tue Aug 2 08:05:57 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 08:05:59 2016 Subject: [squeak-dev] The Trunk: Collections-mt.703.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.703.mcz ==================== Summary ==================== Name: Collections-mt.703 Author: mt Time: 2 August 2016, 10:05:41.089882 am UUID: 32b3f850-392c-9a4d-b0cb-7e1ed37c9bc6 Ancestors: Collections-mt.702 Small fix for SWiki HTML parsing. Recognize also non-hash color names. Our Color class is fine with it, too. =============== Diff against Collections-mt.702 =============== Item was changed: ----- Method: HtmlReadWriter>>mapFontTag: (in category 'mapping') ----- mapFontTag: aTag | result colorStartIndex colorStopIndex attribute | result := OrderedCollection new. + " or " - "" attribute := 'color'. colorStartIndex := aTag findString: attribute. colorStartIndex > 0 ifTrue: [ + colorStartIndex := aTag findString: '"' startingAt: colorStartIndex+attribute size. - colorStartIndex := aTag findString: '#' startingAt: colorStartIndex+attribute size. colorStopIndex := aTag findString: '"' startingAt: colorStartIndex+1. result add: (TextColor color: + (Color fromString: (aTag copyFrom: colorStartIndex+1 to: colorStopIndex-1)))]. + - (Color fromString: (aTag copyFrom: colorStartIndex to: colorStopIndex-1)))]. - ^ result! From commits at source.squeak.org Tue Aug 2 08:07:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 08:07:39 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.87.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.87.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.87 Author: mt Time: 2 August 2016, 10:07:29.753882 am UUID: ba6bc8ef-a866-df4f-802f-992894c957c7 Ancestors: HelpSystem-Core-nice.86 Fixes parsing of broken HTML a-href links as found in SWiki. Fixes scroll-to-top when selecting new help topics. =============== Diff against HelpSystem-Core-nice.86 =============== Item was changed: ----- Method: HelpBrowser>>currentTopic: (in category 'accessing') ----- currentTopic: aHelpTopic self okToChange ifFalse: [^ self]. self currentTopic == aHelpTopic ifTrue: [^ self]. currentTopic := aHelpTopic. topicPath := nil. self changed: #currentTopic. + self changed: #topicContents. + self changed: #showContents.! - self changed: #topicContents.! Item was changed: ----- Method: HtmlHelpTopic>>subtopicUrls (in category 'accessing') ----- subtopicUrls ^ subtopicUrls ifNil: [ + | start end endGuard | - | start end | subtopicUrls := OrderedCollection new. start := self document findString: ' 0] whileTrue: [ start := self document findString: '"' startingAt: start. end := self document findString: '"' startingAt: start+1. + endGuard := self document findString: '>' startingAt: start+1. + (end > 0 and: [end < endGuard]) + ifTrue: [subtopicUrls addIfNotPresent: (self document copyFrom: start+1 to: end-1)]. - subtopicUrls addIfNotPresent: (self document copyFrom: start+1 to: end-1). start := self document findString: ' 0 ifTrue: [start := self document findString: 'href' startingAt: start]]. subtopicUrls := subtopicUrls select: self selectBlock thenCollect: self convertBlock. subtopicUrls]! From commits at source.squeak.org Tue Aug 2 08:10:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 08:10:02 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1221.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1221.mcz ==================== Summary ==================== Name: Morphic-mt.1221 Author: mt Time: 2 August 2016, 10:09:26.611882 am UUID: 49b92f76-cbe0-b442-8c78-770e30243990 Ancestors: Morphic-mt.1220 Let models such as HelpBrowser signal content changes that require a fresh start at the top. (Differentiate from appended content updates where a scroll-to-top would annoy the user who is scrolling down and in the process of reading). =============== Diff against Morphic-mt.1220 =============== Item was changed: ----- Method: PluggableTextMorph>>update: (in category 'updating') ----- update: aSymbol aSymbol ifNil: [^self]. aSymbol == #flash ifTrue: [^self flash]. aSymbol == getTextSelector ifTrue: [ self setText: self getText. getSelectionSelector ifNotNil: [self setSelection: self getSelection]. ^ self]. aSymbol == getSelectionSelector ifTrue: [^self setSelection: self getSelection]. aSymbol == #acceptChanges ifTrue: [^ self accept]. aSymbol == #revertChanges ifTrue: [^ self cancel]. (aSymbol == #autoSelect and: [getSelectionSelector notNil]) ifTrue: [self handleEdit: [(textMorph editor) abandonChangeText; "no replacement!!" setSearch: model autoSelectString; findAgain]]. aSymbol == #clearUserEdits ifTrue: [^self hasUnacceptedEdits: false]. aSymbol == #wantToChange ifTrue: [self canDiscardEdits ifFalse: [^self promptForCancel]. ^self]. aSymbol == #appendEntry ifTrue: [self handleEdit: [self appendEntry]. ^self refreshWorld]. aSymbol == #appendEntryLater ifTrue: [self handleEdit: [self appendEntry]]. aSymbol == #clearText ifTrue: [self handleEdit: [self changeText: Text new]. ^self refreshWorld]. aSymbol == #bs ifTrue: [self handleEdit: [self bsText]. ^self refreshWorld]. aSymbol == #codeChangedElsewhere ifTrue: [self hasEditingConflicts: true. ^self changed]. aSymbol == #saveContents ifTrue: [^self saveContentsInFile]. + aSymbol == #showContents + ifTrue: + [^ self scrollToTop]. ! From commits at source.squeak.org Tue Aug 2 12:13:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 12:13:42 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.177.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.177.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.177 Author: mt Time: 2 August 2016, 2:13:33.624941 pm UUID: b6ea5aa5-8401-d647-8d21-be0397a0088e Ancestors: ToolBuilder-Morphic-mt.176 Fixes a bug where the parent of the current selection in a tree was not updated in the model when the model updated its current selection. =============== Diff against ToolBuilder-Morphic-mt.176 =============== Item was added: + ----- Method: PluggableTreeMorph>>selectedMorph: (in category 'selection') ----- + selectedMorph: aMorph + + super selectedMorph: aMorph. + + "If the update came from the model, make my state consistent again." + selectedWrapper := aMorph complexContents. + self setSelectedParentMorph: aMorph.! Item was changed: ----- Method: PluggableTreeMorph>>setSelectedMorph: (in category 'selection') ----- setSelectedMorph: aMorph selectedWrapper := aMorph complexContents. "Let the model now about the selected object, not wrapper." setSelectionSelector ifNotNil: [:symbol | model perform: symbol with: (selectedWrapper ifNotNil: [:w | w item])]. + + self setSelectedParentMorph: aMorph.! - - "The model may not have access to the parent object in terms of this tree structure." - setSelectedParentSelector ifNotNil: [:symbol | - model - perform: symbol - with: (selectedWrapper ifNotNil: [:w | w parent ifNotNil: [:pw | pw item]])].! Item was added: + ----- Method: PluggableTreeMorph>>setSelectedParentMorph: (in category 'selection') ----- + setSelectedParentMorph: aMorph + + "The model may not have access to the parent object in terms of this tree structure." + setSelectedParentSelector ifNotNil: [:symbol | + model + perform: symbol + with: (selectedWrapper ifNotNil: [:w | w parent ifNotNil: [:pw | pw item]])].! From commits at source.squeak.org Tue Aug 2 12:16:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 12:16:13 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1222.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1222.mcz ==================== Summary ==================== Name: Morphic-mt.1222 Author: mt Time: 2 August 2016, 2:15:22.215941 pm UUID: 217156d7-7610-cc46-87a9-c78a24aadec0 Ancestors: Morphic-mt.1221 Clean-up structure of help texts. Remove duplicates. Favor our help system instead of spreading elaborate help texts throughout the system. =============== Diff against Morphic-mt.1221 =============== Item was removed: - ----- Method: TextStyle class>>fontSizeSummary (in category '*Morphic-user interface') ----- - fontSizeSummary - "Open a text window with a simple summary of the available sizes in each of the fonts in the system." - - "TextStyle fontSizeSummary" - | aString aList | - aList := self knownTextStyles. - aString := String streamContents: - [:aStream | - aList do: [:aStyleName | - aStream nextPutAll: - aStyleName, ' ', - (self fontPointSizesFor: aStyleName) asArray storeString. - aStream cr]]. - (StringHolder new contents: aString) - openLabel: 'Font styles and sizes' translated! Item was changed: ----- Method: TheWorldMainDockingBar>>aboutSqueak (in category 'menu actions') ----- aboutSqueak + + | m | + m := SystemReporter open. + m label: 'About Squeak' translated.! - false - ifTrue: - [UserDialogBoxMorph - inform: Smalltalk systemInformationString withCRs - title: 'About Squeak...' translated - at: World center] - ifFalse: - [| m | - m := SystemReporter open. - m label: 'About Squeak...' translated. - m setConstrainedPosition: World center - (m bounds extent / 2) - hangOut: false]! Item was added: + ----- Method: TheWorldMainDockingBar>>commandKeyHelp (in category 'submenu - help') ----- + commandKeyHelp + "Open a window giving command key help." + + self + openHelp: #SqueakTutorialsCommandKey + topic: nil + styled: false! Item was changed: ----- Method: TheWorldMainDockingBar>>extendingTheSystem (in category 'submenu - help') ----- extendingTheSystem + + self + openHelp: #SqueakProjectHelp + topic: #extendingTheSystem + styled: false.! - ^'SqueakMap is an integrated catalog of external applications for Squeak. It is accessible from the "Apps" menu. This catalog does not host the projects, it merely documents the load scripts required to correctly bring them into the image. - - Many SqueakMap packages use Installer, which defines several packages in its package-definitions protocol. Any of these can be loaded with an expression like the following: - - Installer new merge: #openGL - - Change #openGL to the selector name of the package you want to load. The latest version of that package and all of its prerequisites will be merged into the image. Merging a package is no different from loading it unless the package is already loaded, in which case it is upgraded to the latest version in a way that preserves any local changes you may already have made. - - --------------- - This remainder of this workspace documents load-scripts for packages that are not documented in either SqueakMap or Installer. - - OCompletion - "Provides source code completion as you type" - (Installer ss project: ''OCompletion'') install: ''Ocompletion''. - (Smalltalk at: #ECToolSet) register. - (Smalltalk at: #ToolSet) default: (Smalltalk at: #ECToolSet). - - Omnibrowser - "Including Refactoring engine" - (Installer ss project: ''MetacelloRepository'') install: ''ConfigurationOfOmniBrowser''. - ((Smalltalk at: #ConfigurationOfOmniBrowser) project perform: #lastVersion) load: #( Dev ). - - Pier CMS - "Pier CMS: http://www.piercms.com" - (Installer ss project: ''MetacelloRepository'') install: ''ConfigurationOfPier2''. - (Smalltalk at: #ConfigurationOfPier2) load. - - (Installer lukas project: ''pier2'') install: ''Pier-Blog''. - (Installer lukas project: ''pier2'') install: ''Pier-Book''. - (Installer lukas project: ''pier2addons'') install: ''Pier-Setup''. - (Smalltalk at: #PRDistribution) new register. - - Open Cobalt - "http://opencobalt.org (Best to run this from an image in an open cobalt directory)" - Installer ss project: ''TweakCore''; install: ''update''. - [Installer ss project: ''TweakExtras''; install: ''update''] - on: (Smalltalk at: #CUnsynchronizedModification) do: [:ex | ex resume]. - Installer cobalt project: ''Tweak''; - answer: ''Would you like to conserve memory at all costs?'' with: true; - answer: ''Password for interactive VNC connections?'' with: ''cobalt''; - answer: ''Would you like to add the RFBServer to the World open menu?'' with: true; - install: ''update'' - !! - ]style[(9 309 19 252 6 126 8 237 11 209 11 210 8 386 11 547)dSMLoaderPlus open;;,,d| newBrowser | - newBrowser := Browser new selectSystemCategory: ''Installer-Core''; selectClass: Installer; metaClassIndicated: false; selectMessageCategoryNamed: ''package-definitions''; selectMessageNamed: #openGL. - Browser openBrowserView: (newBrowser openMessageCatEditString: nil) label: ''External Package Definitions'';;,,i,,u,,bu,,bu,,bu,,bu,!!' readStream nextChunkText! Item was added: + ----- Method: TheWorldMainDockingBar>>fontSizeSummary (in category 'submenu - help') ----- + fontSizeSummary + + self + openHelp: #SqueakToolsHelp + topic: #fontSizeSummary + styled: false.! Item was changed: ----- Method: TheWorldMainDockingBar>>helpMenuOn: (in category 'submenu - help') ----- helpMenuOn: aDockingBar aDockingBar addItem: [ :it | it contents: 'Help' translated; + addSubMenu: [ :menu | + menu addItem: [:item | + item + contents: 'Squeak Help' translated; + help: 'Integrated Help System' translated; + target: self; + selector: #squeakHelp]. + + menu addLine. + - addSubMenu: [ :menu | 'Todo'. menu addItem:[:item| item contents: 'Online Resources' translated; help: 'Online resources for Squeak' translated; target: self; icon: MenuIcons smallHelpIcon; + selector: #squeakOnlineResources]. - selector: #showWelcomeText:label:in:; - arguments: { - #squeakOnlineResources. - 'Squeak Online Resources'. - (140@140 extent: 560@360) - }]. menu addItem:[:item| item contents: 'Keyboard Shortcuts' translated; help: 'Keyboard bindings used in Squeak' translated; + target: self; + selector: #commandKeyHelp ]. - target: Utilities; - selector: #openCommandKeyHelp ]. menu addItem:[:item| item contents: 'Font Size Summary' translated; + help: 'Font size summary.' translated; + target: self; - help: 'Font size summary from the old Squeak 3.10.2 help menu.' translated; - target: TextStyle; selector: #fontSizeSummary ]. menu addItem:[:item| item contents: 'Useful Expressions' translated; + help: 'Useful expressions' translated; + target: self; + selector: #usefulExpressions ]. - help: 'Useful expressions from the old Squeak 3.10.2 help menu.' translated; - target: Utilities; - selector: #openStandardWorkspace ]. - (Smalltalk classNamed: #SystemReporter) ifNotNil: [:classSystemReporter | - menu addItem: [:item | - item - contents: 'About this System' translated; - help: 'SystemReporter status of the image and runtime environment' translated; - target: classSystemReporter; - selector: #open]]. menu addLine. menu addItem:[:item| item contents: 'Extending the system' translated; help: 'Includes code snippets to evaluate for extending the system' translated; target: self; icon: MenuIcons smallHelpIcon; + selector: #extendingTheSystem]. - selector: #showWelcomeText:label:in:; - arguments: { - #extendingTheSystem. - 'How to extend the system'. - (140@140 extent: 560@360) - }]. menu addLine. + + menu addItem:[:item| + item + contents: 'Release Notes' translated; + help: 'Changes in this release' translated ; + target: self; + selector: #releaseNotes]. + menu addItem:[:item| + item + contents: 'Working With Squeak' translated; + help: 'Information for new users' ; + target: self; + selector: #workingWithSqueak]. + menu addItem:[:item| + item + contents: 'The Squeak User Interface' translated; + help: 'Descriptions of some of the more-unusual UI elements in Squeak' ; + target: self; + selector: #squeakUserInterface]. + menu addItem:[:item| + item + contents: 'License Information' translated; + help: String empty ; + target: self; + selector: #licenseInformation]. + + + menu addLine. + menu addItem: [:item | + item + contents: 'About Squeak' translated; + help: 'SystemReporter status of the image and runtime environment' translated; + target: self; + selector: #aboutSqueak]. + ]]! - menu addItem:[:item| - item - contents: 'Welcome Workspaces' translated; - help: 'The Welcome Workspaces' translated; - addSubMenu:[:submenu| self welcomeWorkspacesOn: submenu]]. - (Smalltalk classNamed: #HelpBrowser) ifNotNil: [:classHelpBrowser | - (Smalltalk classNamed: #TerseGuideHelp) ifNotNil: [:classTerseGuideHelp | - menu addLine. - menu addItem: [:item | - item - contents: 'Terse Guide to Squeak' translated; - help: 'Concise information about language and environment' translated; - target: classHelpBrowser; - selector: #openForCodeOn:; - arguments: { classTerseGuideHelp }]]. - menu addLine. - menu addItem: [:item | - item - contents: 'Help Browser' translated; - help: 'Integrated Help System' translated; - target: classHelpBrowser; - selector: #open]]]]! Item was changed: ----- Method: TheWorldMainDockingBar>>licenseInformation (in category 'submenu - help') ----- licenseInformation + + self + openHelp: #SqueakLicenseHelp + topic: #officialLicense + styled: false.! - "Should NOT be edited interactively" - ^Smalltalk license asText! Item was added: + ----- Method: TheWorldMainDockingBar>>openHelp:topic:styled: (in category 'submenu - help') ----- + openHelp: bookSymbol topic: topicSymbol styled: boolean + + | openSelector | + openSelector := boolean ifTrue: [#openCodeOn:] ifFalse: [#openOn:]. + + (Smalltalk classNamed: 'HelpBrowser') + ifNil: [self inform: 'Sorry, there is no help system installed.' translated] + ifNotNil: [:helpClass | + (Smalltalk classNamed: bookSymbol) + ifNil: [self inform: 'Sorry, the help book you requested does not exist.'] + ifNotNil: [:book | + topicSymbol + ifNil: [(helpClass perform: openSelector with: book) model showFirstTopic] + ifNotNil: [helpClass perform: openSelector with: (book perform: topicSymbol)]]]! Item was changed: ----- Method: TheWorldMainDockingBar>>releaseNotes (in category 'submenu - help') ----- releaseNotes + + self + openHelp: #SqueakReleaseNotes + topic: nil + styled: false.! - ^'Squeak 5.0 - Release Notes - - A New Memory Model and Virtual Machine - - Fast Become - Squeak 5 introduces a new object model and VM known as "Spur". Presented [1] by Eliot Miranda and Clément Béra at the International Symposium on Memory Management in year 2015, this new VM retains the direct-pointer representation of objects in previous Squeak versions but now without requiring a full scan of the heap for become. This is done by introducing hidden forwarding objects which allow references to be updated lazily as they are encountered. Spur''s innovation is in avoiding explicit read barriers in all common cases. - - Additional Immediate Types - The new Spur memory model supports immediate Characters, so that Characters with unicode greater than 255 can be tested via #==, and wide string access is much faster. The 64-bit version, still under development, also provides immediate floats, occupying the middle 8th of the double precision exponent range. - - Simplified and Ready for 64-bit - Internally Spur uses a 64-bit object header, a representation shared between the 32-bit and 64-bit versions, and one that is significantly simpler than the three different header sizes used in the previous version. This simplicity means that the JIT now generates code to implement more primitives, in particular new and new:, resulting in significantly higher performance, at the cost of a 15% increase in image size. - - Enhanced Memory Management - Spur has a segmented heap, allowing the heap to grow and shrink a segment at a time. It provides per-object pinning to ensure specific objects will not be moved by the garbage collector, hence simplifying the FFI. Spur provides Ephemerons which allow for per-object finalization and the prevention of uncollectable cycles, for example in global property lists like DependentsFields (although this support has yet to be applied to the system). - - - Squeak now runs on ARM - - As a natural output of the Scratch application on Rasberry Pi project, the Spur VM can now run on the Rasberry Pi. - - - The Future of Spur - - Work is underway on an innovative adaptive optimizer/speculative inliner, and a 64-bit JIT for x64, and a global incremental mark-sweep collector is planned. See [2]. - - [1] -- http://conf.researchr.org/event/ismm-2015/ismm-2015-papers-a-partial-read-barrier-for-efficient-support-of-live-object-oriented-programming - [2] -- http://www.mirandabanda.org/cogblog/cog-projects/ - !! - ]style[(10 1 13 40 2 11 537 26 313 31 422 26 448 22 119 19 374)a2bFBitstreamVeraSerif#32.0,FBitstreamVeraSans#20.0a2,a2FBitstreamVeraSerif#24.0-,FBitstreamVeraSans#20.0,,b,,b,,b,,b,,FBitstreamVeraSans#20.0,,FBitstreamVeraSans#20.0,!!' readStream nextChunkText! Item was removed: - ----- Method: TheWorldMainDockingBar>>showSqueakResources (in category 'submenu - help') ----- - showSqueakResources - ^(StringHolder new contents: - 'Squeak web sites: - http://www.squeak.org - The main Squeak site. - http://news.squeak.org - The Weekly Squeak - http://board.squeak.org - The Squeak Oversight Board - http://ftp.squeak.org - Downloads for many Squeak versions. - http://squeakvm.org - Development of the Squeak virtual machine - - Squeak-dev - The main Squeak mailing list. - http://lists.squeakfoundation.org/mailman/listinfo/squeak-dev - http://dir.gmane.org/gmane.comp.lang.smalltalk.squeak.general - http://n4.nabble.com/Squeak-Dev-f45488.html - - Squeak-Beginners - The place to ask even the most basic questions. - http://lists.squeakfoundation.org/mailman/listinfo/beginners - http://dir.gmane.org/gmane.comp.lang.smalltalk.squeak.beginners - http://n4.nabble.com/Squeak-Beginners-f107673.html - - Squeak By Example: - http://www.squeakbyexample.org/ - - Squeak, Open Personal Computing and Multimedia (The NuBlue Book - Draft): - http://coweb.cc.gatech.edu/squeakbook/ - http://stephane.ducasse.free.fr/FreeBooks/CollectiveNBlueBook/ - - Squeak, Open Personal Computing for Multimedia (The White Book - Draft): - http://www.cc.gatech.edu/~mark.guzdial/drafts/ - http://stephane.ducasse.free.fr/FreeBooks/GuzdialBookDrafts/ - - More Books about Squeak and Smalltalk: - http://stephane.ducasse.free.fr/FreeBooks.html - - ') openLabel: 'Squeak Online Resources'! Item was removed: - ----- Method: TheWorldMainDockingBar>>showWelcomeText:label:in: (in category 'submenu - help') ----- - showWelcomeText: aSelector label: labelString in: bounds - "Show a welcome text. Linked in here so that the text can be edited - by changing the acceptBlock below." - | acceptBlock window | - "Change the following to allow editing the text" - true ifTrue:[ - acceptBlock := [:text| - self class - compile: aSelector,' - ^', (String streamContents:[:s| s nextChunkPutWithStyle: text]) storeString, ' readStream nextChunkText' - classified: (self class organization categoryOfElement: aSelector). - ]. - ]. - - window := UIManager default - edit: (self perform: aSelector) - label: labelString - accept: acceptBlock. - window bounds: bounds. - ! Item was added: + ----- Method: TheWorldMainDockingBar>>squeakHelp (in category 'submenu - help') ----- + squeakHelp + + (Smalltalk classNamed: 'HelpBrowser') + ifNil: [self inform: 'Sorry, there is no help system installed.' translated] + ifNotNil: [:helpClass | helpClass open].! Item was changed: ----- Method: TheWorldMainDockingBar>>squeakOnlineResources (in category 'submenu - help') ----- squeakOnlineResources - ^'Squeak web sites - Main Squeak site http://www.squeak.org - Weekly Squeak http://news.squeak.org - Oversight Board http://board.squeak.org - Downloads for many versions http://ftp.squeak.org - Development of the virtual machine http://squeakvm.org - Google+ Page - https://plus.google.com/u/0/b/115950529692424242526/ + self + openHelp: #SqueakProjectHelp + topic: #squeakResourcesOnline + styled: false.! - Squeak-dev - The main Squeak mailing list - http://lists.squeakfoundation.org/mailman/listinfo/squeak-dev - http://dir.gmane.org/gmane.comp.lang.smalltalk.squeak.general - http://n4.nabble.com/Squeak-Dev-f45488.html - - Squeak-Beginners - The place to ask even the most basic questions - http://lists.squeakfoundation.org/mailman/listinfo/beginners - http://dir.gmane.org/gmane.comp.lang.smalltalk.squeak.beginners - http://n4.nabble.com/Squeak-Beginners-f107673.html - - Squeak By Example - http://www.squeakbyexample.org/ - - Squeak, Open Personal Computing and Multimedia - http://coweb.cc.gatech.edu/squeakbook/ - http://stephane.ducasse.free.fr/FreeBooks/CollectiveNBlueBook/ - - Squeak, Open Personal Computing for Multimedia - http://www.cc.gatech.edu/~mark.guzdial/drafts/ - http://stephane.ducasse.free.fr/FreeBooks/GuzdialBookDrafts/ - - More Books about Squeak and Smalltalk - http://stephane.ducasse.free.fr/FreeBooks.html - !! - ]style[(16 316 41 173 65 181 17 35 46 106 46 112 37 49)bu,,bu,,bu,,bu,,bu,,bu,,bu,!!' readStream nextChunkText! Item was changed: ----- Method: TheWorldMainDockingBar>>squeakUserInterface (in category 'submenu - help') ----- squeakUserInterface + + self + openHelp: #SqueakProjectHelp + topic: #squeakUserInterface + styled: false.! - ^'The Squeak UI has some unusual elements that you may not have seen before. Here is a brief introduction to those elements: - - Projects - A project is an entire Squeak desktop full of windows. Projects can be used to change quickly from one task to another. An inactive project is represented by a project window, which shows a thumbnail of its state. Project windows are actually more like doors than windows, since you can enter the project just by clicking on them. You can create a new project by choosing ''open...project'' from the screen menu. To exit a project (and return to its parent project), choose ''previous project'' from the screen menu. Each project maintains its own set of windows and other information. - - Morphic Halos - In a morphic project, pressing cmd-click (Mac) or alt-click (Windows) on a graphical object (e.g. a window) will surround it with a constellation of colored circles. These are called "halo handles." Additional clicks will cycle through the halos for the other graphical objects in the nesting structure. If you hold down the Shift key while cmd/alt-clicking, the nested morphs will be traversed from innermost outward. Clicking without the cmd/alt key will dismiss the halo. While the halo is up, letting the cursor linger over one of the halo handles for a few seconds will cause a balloon to pop up with the name of that handle. Three useful handles are the top-left "X" handle (delete), the bottom-right yellow handle (resize), and the brown handle (slide the object within its containing object). Halos allow complex graphical objects to be explored - or even disassembled (using the black halo handle). Usually no harm results from taking apart an object; you can just discard the pieces and create a new one. - - Flaps - To enable Flaps, click on the desktop to show the world menu, choose the "Flaps..." menu and "show shared tags". Tabs labeled "Squeak", "Tools", "Supplies", etc., will appear along the edges of the Squeak desktop. Click on any tab to open the corresponding flap. Drag a tab to resize the flap and to relocate the tab. Bring up the halo on any tab and click on its menu handle to be presented with many options relating to the flap. Use the "Flaps..." menu, reached via the desktop menu, to control which flaps are visible and for other flap-related options and assistance. - - Parts Bins - You can obtain new objects in many ways. The "Objects Catalog" (choose "objects'' from the world menu or open the objects flap) and several of the standard flaps (e.g. "Tools" and "Supplies") serve as "Parts Bins" the for new objects. Drag any icon you see in a Parts Bin and a fresh copy of the kind of object it represents will appear "in your hand"; click to deposit the new object anywhere you wish. You can also add your own objects to any of the flaps - just drag your object over the tab, wait for the flap to pop open, then drop the object at the desired position in the flap. - !!' readStream nextChunkText! Item was added: + ----- Method: TheWorldMainDockingBar>>terseGuideToSqueak (in category 'submenu - help') ----- + terseGuideToSqueak + + self + openHelp: #TerseGuideHelp + topic: nil + styled: false.! Item was added: + ----- Method: TheWorldMainDockingBar>>usefulExpressions (in category 'submenu - help') ----- + usefulExpressions + + self + openHelp: #SqueakTutorials + topic: #usefulExpressions + styled: false.! Item was removed: - ----- Method: TheWorldMainDockingBar>>welcomeWorkspacesOn: (in category 'submenu - help') ----- - welcomeWorkspacesOn: menu - | versionString | versionString := SystemVersion current version last: 3. - menu addItem:[:item| - item - contents: (versionString, ' Release Notes') translated; - help: 'Improvements in this release' translated ; - target: self; - selector: #showWelcomeText:label:in:; - arguments: { - #releaseNotes. - (versionString, ' Release Notes') translated. - (200@200 extent: 500@300) - }]. - menu addItem:[:item| - item - contents: 'Working With Squeak' translated; - help: 'Information for new users' ; - target: self; - selector: #showWelcomeText:label:in:; - arguments: { - #workingWithSqueak. - 'Working With Squeak'. - (180@180 extent: 500@300) - }]. - menu addItem:[:item| - item - contents: 'The Squeak User Interface' translated; - help: 'Descriptions of some of the more-unusual UI elements in Squeak' ; - target: self; - selector: #showWelcomeText:label:in:; - arguments: { - #squeakUserInterface. - 'The Squeak User Interface'. - (160@160 extent: 500@300) - }]. - menu addItem:[:item| - item - contents: 'License Information' translated; - help: String empty ; - target: self; - selector: #showWelcomeText:label:in:; - arguments: { - #licenseInformation. - 'License Information'. - (200@200 extent: 500@300) - }].! Item was changed: ----- Method: TheWorldMainDockingBar>>workingWithSqueak (in category 'submenu - help') ----- workingWithSqueak + + self + openHelp: #SqueakProjectHelp + topic: #workingWithSqueak + styled: false.! - ^'Starting and Quitting - Like most Smalltalks, the machine-executable portion is a relatively small program known as the "virtual machine" (VM). The VM''s job is to provide services from the physical machine to real Smalltalk objects. Services like input and output. The Smalltalk system, including all data and code, is a system of objects, built from the ground up, and interpreted by this virtual computer. This affords Smalltalk system platform portability. - - Smalltalk cannot run without the VM. The VM can''t do anything useful except process Smalltalk systems. - - To start the system, drag the ".image" data file to the VM executable "squeak". There are myriad command-line options for starting the system via the command-line (see squeak --help). By default, the system will open on the screen in a single OS window. - - To quit a Squeak session, choose ''quit'' from the menu bar. If you save, the image file will be overwritten and resume from that place the next time it''s launched. - - The Image File - Squeak is an environment built in its own objects from the ground up, including one or more end-user applications. All of the objects in the system -- Classes, Dictionaries, Windows, Customers and other objects that make up the Squeak environment are stored in a binary ".image" file. This is the "object-data file" loaded by the VM when Squeak is launched. - - When an image is started, every object resumes exactly from where it was last saved. - - The Sources File - Smalltalk is traditionally includes the source code in the running system. However, keeping multiple copies of the same source code in all images files is wasteful. Therefore, the source code itself is kept in a read-only .sources file and accessed by all images. The image files merely have pointers into this file, which is read on-the-fly to present original source code. - - The code of the base system is stored in the file "SqueakV46.sources". This file does not change except between releases of Squeak. Normally this file should be placed in the folder containing the VM executable. - - The Changes File - The purpose of Squeak is to develop new programs and systems. Code changes to the running system are effective immediately. But since multiple images can be running, they cannot all update the .sources file safely. Therefore, each image file is accompanied by a ".changes" file which contains source code changes for that and only that Smalltalk system.. - - The changes file is important for project work. It keeps a sequential log of development activity for the purpose of recovering work performed since the last image-save. Any of several events could lead to the need to recover work, including a power-outage or making an erroneous change to code required to keep the system running. - - The changes file does not consume memory space, so Squeak is able to keep a complete history of all program changes. This makes it easy to examine or even reinstate older versions of methods (see ''versions'' option in browser selector pane). This encourages experimentation, since you can easily revert to the original versions of any set of methods. - - In extreme cases where sources and/or changes files are not available, the system can still run, and will automatically decompile the bytecode methods in image memory, if necessary, into readable and editable versions of the original source code (only comments and temporary variable names are lost). - - Transferring Code-Snippets Between Images - In addition to the ''save'' command that saves the entire state of the system, the code of individual methods, categories or classes may be ''filed out'' and then filed-in to another image. - - Packages - The code of an entire project is encapsulated by a Package. This allows users to share their code with other users. Code of packages are delineated by the categories of their classes, and methods. The Monticello browser is then used to wrap that code into a Package object which can be saved to a Monticello repository at http://ss3.gemtalksystems.com/ss. - - Some projects end up using the resources provided by several packages, resulting in a hierarchy of packages that make up a system. Installer can be used to install such systems.!! - ]style[(21 970 14 448 16 396 11 188 16 321 4 1025 41 188 8 52 10 55 2 420)bu,,bu,,bu,,u,,bu,,u,,bu,,bu,,i,,i,!!' readStream nextChunkText! Item was changed: ----- Method: TheWorldMenu>>helpMenu (in category 'construction') ----- helpMenu "Build the help menu for the world." | menu | menu := self menu: 'help...'. self fillIn: menu from: { {'about this system...'. {Smalltalk. #aboutThisSystem}. 'current version information.'}. {'update code from server'. {MCMcmUpdater. #updateFromServer}. 'load latest code updates via the internet'}. {'preferences...'. {self. #openPreferencesBrowser}. 'view and change various options.'}. {'set language...' . {Project. #chooseNaturalLanguage}. 'choose the language in which tiles should be displayed.'} . nil. + {'command-key help'. { TheWorldMainDockingBar instance . #commandKeyHelp}. 'summary of keyboard shortcuts.'} - {'command-key help'. { Utilities . #openCommandKeyHelp}. 'summary of keyboard shortcuts.'} }. self addGestureHelpItemsTo: menu. self fillIn: menu from: { {'world menu help'. { self . #worldMenuHelp}. 'helps find menu items buried in submenus.'}. "{'info about flaps' . { Utilities . #explainFlaps}. 'describes how to enable and use flaps.'}." {'font size summary' . { TextStyle . #fontSizeSummary}. 'summary of names and sizes of available fonts.'}. {'useful expressions' . { Utilities . #openStandardWorkspace}. 'a window full of useful expressions.'}. {'annotation setup...' . { Preferences . #editAnnotations}. 'Click here to get a little window that will allow you to specify which types of annotations, in which order, you wish to see in the annotation panes of browsers and other tools'}. nil. {'graphical imports' . { Imports default . #viewImages}. 'view the global repository called ImageImports; you can easily import external graphics into ImageImports via the FileList'}. {'standard graphics library' . { ScriptingSystem . #inspectFormDictionary}. 'lets you view and change the system''s standard library of graphics.'}. nil. {'telemorphic...' . {self. #remoteDo}. 'commands for doing multi-machine "telemorphic" experiments'}. {#soundEnablingString . { SoundService . #toggleSoundEnabled}. 'turning sound off will completely disable Squeak''s use of sound.'}. nil. {'set author initials...' . { Utilities . #setAuthorInitials }. 'supply initials to be used to identify the author of code and other content.'}. {'vm statistics' . { self . #vmStatistics}. 'obtain some intriguing data about the vm.'}. nil. {'purge undo records' . { CommandHistory . #resetAllHistory }. 'save space by removing all the undo information remembered in all projects.'}. {'space left' . { self . #garbageCollect}. 'perform a full garbage-collection and report how many bytes of space remain in the image.'}. }. ^menu ! Item was changed: + (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances. "..."'! - (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances.'! From commits at source.squeak.org Tue Aug 2 12:17:39 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 12:17:41 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.357.mcz Message-ID: Marcel Taeumel uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-mt.357.mcz ==================== Summary ==================== Name: Graphics-mt.357 Author: mt Time: 2 August 2016, 2:17:01.661941 pm UUID: e1701760-a1c3-284e-982c-16f89ca08e75 Ancestors: Graphics-tfel.356 Move generic font size summary from Morphic into Graphics package. =============== Diff against Graphics-tfel.356 =============== Item was added: + ----- Method: TextStyle class>>fontSizeSummary (in category 'utilities') ----- + fontSizeSummary + "Open a text window with a simple summary of the available sizes in each of the fonts in the system." + + "TextStyle fontSizeSummary" + + (StringHolder new contents: self fontSizeSummaryContents) + openLabel: 'Font styles and sizes' translated! Item was added: + ----- Method: TextStyle class>>fontSizeSummaryContents (in category 'utilities') ----- + fontSizeSummaryContents + + ^ String streamContents: + [:aStream | + self knownTextStyles do: [:aStyleName | + aStream nextPutAll: + aStyleName, ' ', + (self fontPointSizesFor: aStyleName) asArray storeString. + aStream cr]].! From commits at source.squeak.org Tue Aug 2 12:20:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 12:20:57 2016 Subject: [squeak-dev] The Trunk: ST80-mt.214.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.214.mcz ==================== Summary ==================== Name: ST80-mt.214 Author: mt Time: 2 August 2016, 2:20:44.841941 pm UUID: 982f94ae-277a-1044-b771-10b0360fbfff Ancestors: ST80-mt.213 HelpBrowser does not work in MVC because there is no tree view. Use StringHolder in a window instead. =============== Diff against ST80-mt.213 =============== Item was changed: ----- Method: ScreenController>>openCommandKeyHelp (in category 'menu messages') ----- openCommandKeyHelp "1/18/96 sw Open a window that explains command-keys" + (Smalltalk classNamed: 'SqueakTutorialsCommandKey') ifNotNil: [:cls | + StringHolder new + contents: cls commandKeyMappings contents; + openLabel: 'Command Key Mappings' translated].! - Utilities openCommandKeyHelp! From commits at source.squeak.org Tue Aug 2 12:22:05 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 12:22:06 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.36.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.36.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.36 Author: mt Time: 2 August 2016, 2:21:57.156941 pm UUID: 822a1e69-3650-3347-ac6e-fb685e2463ab Ancestors: Help-Squeak-Project-tpr.35 Include more help texts from throughout the system. Add a book for release notes. =============== Diff against Help-Squeak-Project-tpr.35 =============== Item was changed: ----- Method: SqueakHelp class>>introduction (in category 'as yet unclassified') ----- introduction "This method was automatically generated. Edit it using:" "a HelpBrowser edit: #introduction" ^HelpTopic title: 'Welcome' contents: + 'WELCOME - 'WELCOME Squeak is a modern, open source, full-featured implementation of the powerful Smalltalk programming language and environment. Squeak is highly-portable - even its virtual machine is written entirely in Smalltalk making it easy to debug, analyze, and change. Squeak is the vehicle for a wide range of projects from multimedia applications, educational platforms to commercial web application development.!! + ]style[(7 2 6 72 9 41 6 70 9 49 6 139)bcblack;a0FBitmap DejaVu Sans#19,cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14!!' readStream nextChunkText! - ]style[(7 2 6 72 9 41 6 70 9 49 6 139)bc000000000a0FBitstreamVeraSerif#20.0,c000000000,FBitstreamVeraSerif#16.0ba0c000000000,FBitstreamVeraSerif#16.0a0c000000000,FBitstreamVeraSerif#16.0ba0c000000000,FBitstreamVeraSerif#16.0a0c000000000,FBitstreamVeraSerif#16.0ba0c000000000,FBitstreamVeraSerif#16.0a0c000000000,FBitstreamVeraSerif#16.0ba0c000000000,FBitstreamVeraSerif#16.0a0c000000000,FBitstreamVeraSerif#16.0ba0c000000000,FBitstreamVeraSerif#16.0a0c000000000!!' readStream nextChunkText! Item was changed: ----- Method: SqueakLicenseHelp class>>officialLicense (in category 'pages') ----- officialLicense + - "This method was automatically generated. Edit it using:" - "a HelpBrowser edit: #officialLicense" ^HelpTopic title: 'Official License' + contents: Smalltalk license readStream nextChunkText! - contents: - 'Copyright (c) The individual, corporate, and institutional contributors who have collectively contributed elements to this software ("The Squeak Community"), 1996-2015 All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - Portions of Squeak are covered by the following license - - - Copyright (c) Xerox Corp. 1981, 1982 All rights reserved. - Copyright (c) Apple Computer, Inc. 1985-1996 All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.!!' readStream nextChunkText! Item was changed: ----- Method: SqueakProjectHelp class>>extendingTheSystem (in category 'pages') ----- extendingTheSystem ^HelpTopic title: 'Extending The System' icon: (HelpIcons iconNamed: #squeakIcon) + contents: 'SqueakMap is an integrated catalog of external applications for Squeak. It is accessible from the "Apps" menu. This catalog does not host the projects, it merely documents the load scripts required to correctly bring them into the image. + + Many SqueakMap packages use Installer, which defines several packages in its package-definitions protocol. Any of these can be loaded with an expression like the following: + + Installer new merge: #openGL + + Change #openGL to the selector name of the package you want to load. The latest version of that package and all of its prerequisites will be merged into the image. Merging a package is no different from loading it unless the package is already loaded, in which case it is upgraded to the latest version in a way that preserves any local changes you may already have made. + + --------------- + This remainder of this workspace documents load-scripts for packages that are not documented in either SqueakMap or Installer. + + OCompletion + "Provides source code completion as you type" + (Installer ss project: ''OCompletion'') install: ''Ocompletion''. + (Smalltalk at: #ECToolSet) register. + (Smalltalk at: #ToolSet) default: (Smalltalk at: #ECToolSet). + + Omnibrowser + "Including Refactoring engine" + (Installer ss project: ''MetacelloRepository'') install: ''ConfigurationOfOmniBrowser''. + ((Smalltalk at: #ConfigurationOfOmniBrowser) project perform: #lastVersion) load: #( Dev ). + + Pier CMS + "Pier CMS: http://www.piercms.com" + (Installer ss project: ''MetacelloRepository'') install: ''ConfigurationOfPier2''. + (Smalltalk at: #ConfigurationOfPier2) load. + + (Installer lukas project: ''pier2'') install: ''Pier-Blog''. + (Installer lukas project: ''pier2'') install: ''Pier-Book''. + (Installer lukas project: ''pier2addons'') install: ''Pier-Setup''. + (Smalltalk at: #PRDistribution) new register. + + Open Cobalt + "http://opencobalt.org (Best to run this from an image in an open cobalt directory)" + Installer ss project: ''TweakCore''; install: ''update''. + [Installer ss project: ''TweakExtras''; install: ''update''] + on: (Smalltalk at: #CUnsynchronizedModification) do: [:ex | ex resume]. + Installer cobalt project: ''Tweak''; + answer: ''Would you like to conserve memory at all costs?'' with: true; + answer: ''Password for interactive VNC connections?'' with: ''cobalt''; + answer: ''Would you like to add the RFBServer to the World open menu?'' with: true; + install: ''update'' + !! + ]style[(9 309 19 252 6 126 8 237 11 209 11 210 8 386 11 547)dSMLoaderPlus open;;,,d| newBrowser | + newBrowser := Browser new selectSystemCategory: ''Installer-Core''; selectClass: Installer; metaClassIndicated: false; selectMessageCategoryNamed: ''package-definitions''; selectMessageNamed: #openGL. + Browser openBrowserView: (newBrowser openMessageCatEditString: nil) label: ''External Package Definitions'';;,,i,,u,,bu,,bu,,bu,,bu,!!' readStream nextChunkText! - contents: - TheWorldMainDockingBar new extendingTheSystem ! Item was changed: ----- Method: SqueakProjectHelp class>>pages (in category 'accessing') ----- pages + ^#(extendingTheSystem squeakResourcesOnline squeakUserInterface workingWithSqueak)! - ^#(releaseNotes extendingTheSystem squeakResourcesOnline squeakUserInterface workingWithSqueak)! Item was removed: - ----- Method: SqueakProjectHelp class>>releaseNotes (in category 'pages') ----- - releaseNotes - "This method was automatically generated. Edit it using:" - "a HelpBrowser edit: #releaseNotes" - ^HelpTopic - title: 'Release Notes' - contents: TheWorldMainDockingBar new releaseNotes "<--- ugh, we will fix this later, for now may we not have TWO copies of the 8K release notes string in memory?"! Item was changed: ----- Method: SqueakProjectHelp class>>squeakResourcesOnline (in category 'pages') ----- squeakResourcesOnline ^HelpTopic title: 'Squeak Resources Online' icon: (HelpIcons iconNamed: #squeakIcon) + contents: 'Squeak web sites + Main Squeak site http://www.squeak.org + Weekly Squeak http://news.squeak.org + Oversight Board http://board.squeak.org + Downloads for many versions http://ftp.squeak.org + Development of the virtual machine http://squeakvm.org + Google+ Page + https://plus.google.com/u/0/b/115950529692424242526/ + + Squeak-dev - The main Squeak mailing list + http://lists.squeakfoundation.org/mailman/listinfo/squeak-dev + http://dir.gmane.org/gmane.comp.lang.smalltalk.squeak.general + http://n4.nabble.com/Squeak-Dev-f45488.html - contents: + Squeak-Beginners - The place to ask even the most basic questions + http://lists.squeakfoundation.org/mailman/listinfo/beginners + http://dir.gmane.org/gmane.comp.lang.smalltalk.squeak.beginners + http://n4.nabble.com/Squeak-Beginners-f107673.html + + Squeak By Example + http://www.squeakbyexample.org/ + + Squeak, Open Personal Computing and Multimedia + http://coweb.cc.gatech.edu/squeakbook/ + http://stephane.ducasse.free.fr/FreeBooks/CollectiveNBlueBook/ + + Squeak, Open Personal Computing for Multimedia + http://www.cc.gatech.edu/~mark.guzdial/drafts/ + http://stephane.ducasse.free.fr/FreeBooks/GuzdialBookDrafts/ + + More Books about Squeak and Smalltalk + http://stephane.ducasse.free.fr/FreeBooks.html + !! + ]style[(16 316 41 173 65 181 17 35 46 106 46 112 37 49)bu,,bu,,bu,,bu,,bu,,bu,,bu,!!' readStream nextChunkText! - TheWorldMainDockingBar new squeakOnlineResources! Item was changed: ----- Method: SqueakProjectHelp class>>squeakUserInterface (in category 'pages') ----- squeakUserInterface ^HelpTopic title: 'Squeak User Interface' icon: (HelpIcons iconNamed: #squeakIcon) + contents: 'The Squeak UI has some unusual elements that you may not have seen before. Here is a brief introduction to those elements: - contents: + Projects + A project is an entire Squeak desktop full of windows. Projects can be used to change quickly from one task to another. An inactive project is represented by a project window, which shows a thumbnail of its state. Project windows are actually more like doors than windows, since you can enter the project just by clicking on them. You can create a new project by choosing ''open...project'' from the screen menu. To exit a project (and return to its parent project), choose ''previous project'' from the screen menu. Each project maintains its own set of windows and other information. + + Morphic Halos + In a morphic project, pressing cmd-click (Mac) or alt-click (Windows) on a graphical object (e.g. a window) will surround it with a constellation of colored circles. These are called "halo handles." Additional clicks will cycle through the halos for the other graphical objects in the nesting structure. If you hold down the Shift key while cmd/alt-clicking, the nested morphs will be traversed from innermost outward. Clicking without the cmd/alt key will dismiss the halo. While the halo is up, letting the cursor linger over one of the halo handles for a few seconds will cause a balloon to pop up with the name of that handle. Three useful handles are the top-left "X" handle (delete), the bottom-right yellow handle (resize), and the brown handle (slide the object within its containing object). Halos allow complex graphical objects to be explored - or even disassembled (using the black halo handle). Usually no harm results from taking apart an object; you can just discard the pieces and create a new one. + + Flaps + To enable Flaps, click on the desktop to show the world menu, choose the "Flaps..." menu and "show shared tags". Tabs labeled "Squeak", "Tools", "Supplies", etc., will appear along the edges of the Squeak desktop. Click on any tab to open the corresponding flap. Drag a tab to resize the flap and to relocate the tab. Bring up the halo on any tab and click on its menu handle to be presented with many options relating to the flap. Use the "Flaps..." menu, reached via the desktop menu, to control which flaps are visible and for other flap-related options and assistance. + + Parts Bins + You can obtain new objects in many ways. The "Objects Catalog" (choose "objects'' from the world menu or open the objects flap) and several of the standard flaps (e.g. "Tools" and "Supplies") serve as "Parts Bins" the for new objects. Drag any icon you see in a Parts Bin and a fresh copy of the kind of object it represents will appear "in your hand"; click to deposit the new object anywhere you wish. You can also add your own objects to any of the flaps - just drag your object over the tab, wait for the flap to pop open, then drop the object at the desired position in the flap. + !!' readStream nextChunkText! - TheWorldMainDockingBar new squeakUserInterface! Item was changed: ----- Method: SqueakProjectHelp class>>workingWithSqueak (in category 'pages') ----- workingWithSqueak ^HelpTopic title: 'Working with Squeak' icon: (HelpIcons iconNamed: #squeakIcon) + contents: 'Starting and Quitting + Like most Smalltalks, the machine-executable portion is a relatively small program known as the "virtual machine" (VM). The VM''s job is to provide services from the physical machine to real Smalltalk objects. Services like input and output. The Smalltalk system, including all data and code, is a system of objects, built from the ground up, and interpreted by this virtual computer. This affords Smalltalk system platform portability. + + Smalltalk cannot run without the VM. The VM can''t do anything useful except process Smalltalk systems. + + To start the system, drag the ".image" data file to the VM executable "squeak". There are myriad command-line options for starting the system via the command-line (see squeak --help). By default, the system will open on the screen in a single OS window. + + To quit a Squeak session, choose ''quit'' from the menu bar. If you save, the image file will be overwritten and resume from that place the next time it''s launched. + + The Image File + Squeak is an environment built in its own objects from the ground up, including one or more end-user applications. All of the objects in the system -- Classes, Dictionaries, Windows, Customers and other objects that make up the Squeak environment are stored in a binary ".image" file. This is the "object-data file" loaded by the VM when Squeak is launched. + + When an image is started, every object resumes exactly from where it was last saved. + + The Sources File + Smalltalk is traditionally includes the source code in the running system. However, keeping multiple copies of the same source code in all images files is wasteful. Therefore, the source code itself is kept in a read-only .sources file and accessed by all images. The image files merely have pointers into this file, which is read on-the-fly to present original source code. + + The code of the base system is stored in the file "SqueakV46.sources". This file does not change except between releases of Squeak. Normally this file should be placed in the folder containing the VM executable. + + The Changes File + The purpose of Squeak is to develop new programs and systems. Code changes to the running system are effective immediately. But since multiple images can be running, they cannot all update the .sources file safely. Therefore, each image file is accompanied by a ".changes" file which contains source code changes for that and only that Smalltalk system.. + + The changes file is important for project work. It keeps a sequential log of development activity for the purpose of recovering work performed since the last image-save. Any of several events could lead to the need to recover work, including a power-outage or making an erroneous change to code required to keep the system running. + + The changes file does not consume memory space, so Squeak is able to keep a complete history of all program changes. This makes it easy to examine or even reinstate older versions of methods (see ''versions'' option in browser selector pane). This encourages experimentation, since you can easily revert to the original versions of any set of methods. + + In extreme cases where sources and/or changes files are not available, the system can still run, and will automatically decompile the bytecode methods in image memory, if necessary, into readable and editable versions of the original source code (only comments and temporary variable names are lost). + + Transferring Code-Snippets Between Images + In addition to the ''save'' command that saves the entire state of the system, the code of individual methods, categories or classes may be ''filed out'' and then filed-in to another image. + + Packages + The code of an entire project is encapsulated by a Package. This allows users to share their code with other users. Code of packages are delineated by the categories of their classes, and methods. The Monticello browser is then used to wrap that code into a Package object which can be saved to a Monticello repository at http://ss3.gemtalksystems.com/ss. + + Some projects end up using the resources provided by several packages, resulting in a hierarchy of packages that make up a system. Installer can be used to install such systems.!! + ]style[(21 970 14 448 16 396 11 188 16 321 4 1025 41 188 8 52 10 55 2 420)bu,,bu,,bu,,u,,bu,,u,,bu,,bu,,i,,i,!!' readStream nextChunkText! - contents: - TheWorldMainDockingBar new workingWithSqueak "avoid duplicate of big string until we fix this"! Item was added: + SqueakProjectHelp subclass: #SqueakReleaseNotes + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Help-Squeak-Project'! Item was added: + ----- Method: SqueakReleaseNotes class>>bookName (in category 'accessing') ----- + bookName + ^'Release Notes'! Item was added: + ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- + pages + ^#(releaseNotes51 releaseNotes50)! Item was added: + ----- Method: SqueakReleaseNotes class>>releaseNotes50 (in category 'pages') ----- + releaseNotes50 + + ^HelpTopic + title: '5.0 / 4.6' + contents: 'Squeak 5.0 + Release Notes + + A New Memory Model and Virtual Machine + + Fast Become + Squeak 5 introduces a new object model and VM known as "Spur". Presented [1] by Eliot Miranda and Clément Béra at the International Symposium on Memory Management in year 2015, this new VM retains the direct-pointer representation of objects in previous Squeak versions but now without requiring a full scan of the heap for become. This is done by introducing hidden forwarding objects which allow references to be updated lazily as they are encountered. Spur''s innovation is in avoiding explicit read barriers in all common cases. + + Additional Immediate Types + The new Spur memory model supports immediate Characters, so that Characters with unicode greater than 255 can be tested via #==, and wide string access is much faster. The 64-bit version, still under development, also provides immediate floats, occupying the middle 8th of the double precision exponent range. + + Simplified and Ready for 64-bit + Internally Spur uses a 64-bit object header, a representation shared between the 32-bit and 64-bit versions, and one that is significantly simpler than the three different header sizes used in the previous version. This simplicity means that the JIT now generates code to implement more primitives, in particular new and new:, resulting in significantly higher performance, at the cost of a 15% increase in image size. + + Enhanced Memory Management + Spur has a segmented heap, allowing the heap to grow and shrink a segment at a time. It provides per-object pinning to ensure specific objects will not be moved by the garbage collector, hence simplifying the FFI. Spur provides Ephemerons which allow for per-object finalization and the prevention of uncollectable cycles, for example in global property lists like DependentsFields (although this support has yet to be applied to the system). + + + Squeak now runs on ARM + + As a natural output of the Scratch application on Rasberry Pi project, the Spur VM can now run on the Rasberry Pi. + + + The Future of Spur + + Work is underway on an innovative adaptive optimizer/speculative inliner, and a 64-bit JIT for x64, and a global incremental mark-sweep collector is planned. See [2]. + + [1] -- http://conf.researchr.org/event/ismm-2015/ismm-2015-papers-a-partial-read-barrier-for-efficient-support-of-live-object-oriented-programming + [2] -- http://www.mirandabanda.org/cogblog/cog-projects/ + !! + ]style[(10 1 13 40 2 11 537 26 313 31 422 26 448 22 119 19 374)a2bFBitstreamVeraSerif#32.0,FBitstreamVeraSans#20.0a2,a2FBitstreamVeraSerif#24.0-,FBitstreamVeraSans#20.0,,b,,b,,b,,b,,FBitstreamVeraSans#20.0,,FBitstreamVeraSans#20.0,!!' readStream nextChunkText! Item was added: + ----- Method: SqueakReleaseNotes class>>releaseNotes51 (in category 'pages') ----- + releaseNotes51 + + ^HelpTopic + title: '5.1' + contents: 'TBD.'! Item was added: + ----- Method: SqueakToolsHelp class>>fontSizeSummary (in category 'pages') ----- + fontSizeSummary + ^HelpTopic + title: 'Font Size Summary' + contents: TextStyle fontSizeSummaryContents! Item was changed: ----- Method: SqueakToolsHelp class>>pages (in category 'accessing') ----- pages + ^#(basicDevelopmentTools fontSizeSummary)! - ^#(basicDevelopmentTools)! Item was changed: ----- Method: SqueakTutorials class>>pages (in category 'accessing') ----- pages + ^#(introduction usefulExpressions)! - ^#(introduction)! Item was added: + ----- Method: SqueakTutorials class>>usefulExpressions (in category 'pages') ----- + usefulExpressions + + ^ HelpTopic + title: 'Useful Expressions' + contents: Utilities standardWorkspaceContents! From commits at source.squeak.org Tue Aug 2 12:29:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 12:29:15 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1223.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1223.mcz ==================== Summary ==================== Name: Morphic-mt.1223 Author: mt Time: 2 August 2016, 2:28:33.382941 pm UUID: 5c873fc3-9395-c04d-9b4c-4036dfe8cd8c Ancestors: Morphic-mt.1222 Sorry, the terse guide should not have vanished from the help menu. =============== Diff against Morphic-mt.1222 =============== Item was changed: ----- Method: TheWorldMainDockingBar>>helpMenuOn: (in category 'submenu - help') ----- helpMenuOn: aDockingBar aDockingBar addItem: [ :it | it contents: 'Help' translated; addSubMenu: [ :menu | menu addItem: [:item | item contents: 'Squeak Help' translated; help: 'Integrated Help System' translated; target: self; selector: #squeakHelp]. menu addLine. menu addItem:[:item| item contents: 'Online Resources' translated; help: 'Online resources for Squeak' translated; target: self; icon: MenuIcons smallHelpIcon; selector: #squeakOnlineResources]. menu addItem:[:item| item contents: 'Keyboard Shortcuts' translated; help: 'Keyboard bindings used in Squeak' translated; target: self; selector: #commandKeyHelp ]. menu addItem:[:item| item contents: 'Font Size Summary' translated; help: 'Font size summary.' translated; target: self; selector: #fontSizeSummary ]. menu addItem:[:item| item contents: 'Useful Expressions' translated; help: 'Useful expressions' translated; target: self; selector: #usefulExpressions ]. menu addLine. menu addItem:[:item| item + contents: 'Terse Guide to Squeak' translated; + help: 'Concise information about language and environment' translated; + target: self; + selector: #terseGuideToSqueak]. + menu addItem:[:item| + item contents: 'Extending the system' translated; help: 'Includes code snippets to evaluate for extending the system' translated; target: self; icon: MenuIcons smallHelpIcon; selector: #extendingTheSystem]. menu addLine. menu addItem:[:item| item contents: 'Release Notes' translated; help: 'Changes in this release' translated ; target: self; selector: #releaseNotes]. menu addItem:[:item| item contents: 'Working With Squeak' translated; help: 'Information for new users' ; target: self; selector: #workingWithSqueak]. menu addItem:[:item| item contents: 'The Squeak User Interface' translated; help: 'Descriptions of some of the more-unusual UI elements in Squeak' ; target: self; selector: #squeakUserInterface]. menu addItem:[:item| item contents: 'License Information' translated; help: String empty ; target: self; selector: #licenseInformation]. menu addLine. menu addItem: [:item | item contents: 'About Squeak' translated; help: 'SystemReporter status of the image and runtime environment' translated; target: self; selector: #aboutSqueak]. ]]! Item was changed: ----- Method: TheWorldMainDockingBar>>openHelp:topic:styled: (in category 'submenu - help') ----- openHelp: bookSymbol topic: topicSymbol styled: boolean | openSelector | + openSelector := boolean ifTrue: [#openForCodeOn:] ifFalse: [#openOn:]. - openSelector := boolean ifTrue: [#openCodeOn:] ifFalse: [#openOn:]. (Smalltalk classNamed: 'HelpBrowser') ifNil: [self inform: 'Sorry, there is no help system installed.' translated] ifNotNil: [:helpClass | (Smalltalk classNamed: bookSymbol) ifNil: [self inform: 'Sorry, the help book you requested does not exist.'] ifNotNil: [:book | topicSymbol ifNil: [(helpClass perform: openSelector with: book) model showFirstTopic] ifNotNil: [helpClass perform: openSelector with: (book perform: topicSymbol)]]]! Item was changed: ----- Method: TheWorldMainDockingBar>>terseGuideToSqueak (in category 'submenu - help') ----- terseGuideToSqueak self openHelp: #TerseGuideHelp topic: nil + styled: true.! - styled: false.! Item was changed: ----- Method: TheWorldMainDockingBar>>usefulExpressions (in category 'submenu - help') ----- usefulExpressions self openHelp: #SqueakTutorials topic: #usefulExpressions + styled: true.! - styled: false.! From commits at source.squeak.org Tue Aug 2 13:24:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 13:24:04 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.642.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.642.mcz ==================== Summary ==================== Name: Monticello-mt.642 Author: mt Time: 2 August 2016, 3:23:49.877305 pm UUID: d16b4288-3e85-0148-93fe-cf9b01e79b4c Ancestors: Monticello-mt.641 Add inbox as well-known repository. =============== Diff against Monticello-mt.641 =============== Item was added: + ----- Method: MCHttpRepository class>>inbox (in category 'well-known repositories') ----- + inbox + ^ MCRepositoryGroup default repositories + detect: + [ : each | each isInbox ] + ifNone: + [ MCHttpRepository + location: MCHttpRepository inboxUrlString + user: 'squeak' + password: 'squeak' ]! Item was added: + ----- Method: MCHttpRepository class>>inboxUrlString (in category 'accessing') ----- + inboxUrlString + ^ 'http://source.squeak.org/inbox'! Item was added: + ----- Method: MCHttpRepository>>isInbox (in category 'testing') ----- + isInbox + ^ location = self class inboxUrlString! Item was added: + ----- Method: MCRepository class>>inbox (in category 'well-known repositories') ----- + inbox + ^ MCHttpRepository inbox! Item was added: + ----- Method: MCRepository>>isInbox (in category 'testing') ----- + isInbox + ^ false! From commits at source.squeak.org Tue Aug 2 13:34:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 13:34:03 2016 Subject: [squeak-dev] The Trunk: System-mt.859.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.859.mcz ==================== Summary ==================== Name: System-mt.859 Author: mt Time: 2 August 2016, 3:33:31.504305 pm UUID: c63dccd8-6a6d-e046-942f-592655403eaf Ancestors: System-mt.858 On aggressive clean-up, remove all auto-generated accessors in Preferences. =============== Diff against System-mt.858 =============== Item was added: + ----- Method: Preferences class>>cleanUp: (in category 'initialization') ----- + cleanUp: aggressive + + aggressive ifTrue: [ + self class organization categories + select: [:ea | ea beginsWith: '*autogenerated'] + thenDo: [:ea | self class removeCategory: ea]].! From Marcel.Taeumel at hpi.de Tue Aug 2 13:56:32 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 2 14:41:29 2016 Subject: [squeak-dev] Color black vs. Color transparent Message-ID: <1470146192516-4909167.post@n4.nabble.com> Hi, there. In Color class >> colorFromPixelValue:depth: we have: ... d = 32 ifTrue: [ "eight bits per component; 8 bits of alpha" r := (p bitShift: -16) bitAnd: 16rFF. g := (p bitShift: -8) bitAnd: 16rFF. b := p bitAnd: 16rFF. alpha := p bitShift: -24. alpha = 0 ifTrue: [^Color transparent]. (r = 0 and: [g = 0 and: [b = 0]]) ifTrue: [^Color transparent]. alpha < 255 ifTrue: [^ (Color r: r g: g b: b range: 255) alpha: (alpha asFloat / 255.0)] ifFalse: [^ (Color r: r g: g b: b range: 255)]]. ... This denotes black to transparent. Is this still right? I have here a form that renders right but after collecting the colors, all is transparent: '(Form extent: 16@16 depth: 32 fromArray: #( 1526726656 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 1526726656 2281701376 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2281701376 2281701376 0 3238002688 2281701376 2264924160 268435456 0 0 0 0 285212672 2264924160 2281701376 3238002688 0 2281701376 2281701376 0 2281701376 0 0 0 0 0 0 0 0 0 0 2281701376 0 2281701376 2281701376 0 2281701376 0 0 0 0 0 0 0 0 0 0 2281701376 0 2281701376 2281701376 0 234881024 0 0 0 0 0 0 0 0 0 0 234881024 0 2281701376 2281701376 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2281701376 2281701376 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2281701376 2281701376 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2281701376 2281701376 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2281701376 2281701376 0 234881024 0 0 0 0 0 0 0 0 0 0 234881024 0 2281701376 2281701376 0 2281701376 0 0 0 0 0 0 0 0 0 0 2281701376 0 2281701376 2281701376 0 2281701376 0 0 0 0 0 0 0 0 0 0 2281701376 0 2281701376 2281701376 0 3271557120 2281701376 2264924160 268435456 0 0 0 0 285212672 2264924160 2281701376 3271557120 0 2281701376 2281701376 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2281701376 1459617792 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 2566914048 1442840576) offset: 0@0)' And after "form collectColors: [:ea | ea]" if get this: '(Form extent: 16@16 depth: 32 fromArray: #( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) offset: 0@0)' :-( Best, Marcel -- View this message in context: http://forum.world.st/Color-black-vs-Color-transparent-tp4909167.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Tue Aug 2 14:55:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 14:55:16 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1224.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1224.mcz ==================== Summary ==================== Name: Morphic-mt.1224 Author: mt Time: 2 August 2016, 4:54:34.680305 pm UUID: 97c9810e-903b-7a4b-bb15-7c15ee3be3a9 Ancestors: Morphic-mt.1223 Use a wireframe fullscreen icon, which is colorizable/themeable, for the docking bar. Just like the Squeak icon. =============== Diff against Morphic-mt.1223 =============== Item was added: + ----- Method: MenuIcons class>>fullscreenWireframeIcon (in category 'accessing - icons') ----- + fullscreenWireframeIcon + "(c) 2016, Plainicon on www.flaticon.com + http://www.flaticon.com/free-icon/square-frame_79288 + CC 3.0 BY http://creativecommons.org/licenses/by/3.0/" + + ^ Icons + at: #fullscreenWireframeIcon + ifAbsentPut: [ (Form + extent: 16@16 + depth: 32 + fromArray: #( 1543503871 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 1543503871 2298478591 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2298478591 2298478591 0 3254779903 2298478591 2281701375 285212671 0 0 0 0 301989887 2281701375 2298478591 3254779903 0 2298478591 2298478591 0 2298478591 0 0 0 0 0 0 0 0 0 0 2298478591 0 2298478591 2298478591 0 2298478591 0 0 0 0 0 0 0 0 0 0 2298478591 0 2298478591 2298478591 0 251658239 0 0 0 0 0 0 0 0 0 0 251658239 0 2298478591 2298478591 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2298478591 2298478591 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2298478591 2298478591 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2298478591 2298478591 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2298478591 2298478591 0 251658239 0 0 0 0 0 0 0 0 0 0 251658239 0 2298478591 2298478591 0 2298478591 0 0 0 0 0 0 0 0 0 0 2298478591 0 2298478591 2298478591 0 2298478591 0 0 0 0 0 0 0 0 0 0 2298478591 0 2298478591 2298478591 0 3288334335 2298478591 2281701375 285212671 0 0 0 0 301989887 2281701375 2298478591 3288334335 0 2298478591 2298478591 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2298478591 1476395007 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 2583691263 1459617791) + offset: 0@0) ]! Item was added: + ----- Method: MenuIcons class>>fullscreenWireframeIconColorized: (in category 'accessing - icons') ----- + fullscreenWireframeIconColorized: aColor + + ^ self fullscreenWireframeIcon + collectColors: [:c | aColor alpha: c alpha]! Item was changed: ----- Method: TheWorldMainDockingBar>>toggleFullScreenOn: (in category 'right side') ----- toggleFullScreenOn: aDockingBar + | toggleMorph onIcon offIcon box bgColor | + offIcon := MenuIcons fullscreenWireframeIconColorized: + (self userInterfaceTheme logoColor ifNil: [Color black]). + onIcon := MenuIcons fullscreenWireframeIconColorized: + (self userInterfaceTheme selectionLogoColor ifNil: [Color white]). + bgColor := (UserInterfaceTheme current get: #selectionColor for: #DockingBarItemMorph) ifNil: [Color blue]. - | toggleMorph box | - toggleMorph := (SketchMorph withForm: MenuIcons smallFullscreenOffIcon). + toggleMorph := offIcon asMorph. + box := Morph new color: Color transparent; + hResizing: #shrinkWrap; vResizing: #spaceFill; width: toggleMorph width; + changeTableLayout; + + borderWidth: 1; + borderColor: Color transparent; balloonText: 'toggle full screen mode' translated; addMorph: toggleMorph. toggleMorph setToAdhereToEdge: #rightCenter. box + on: #mouseUp - on: #mouseDown send: #value to: [ DisplayScreen toggleFullScreen. + "toggleMorph image: MenuIcons smallFullscreenOffIcon" ] ; - toggleMorph form: MenuIcons smallFullscreenOffIcon ] ; on: #mouseEnter send: #value + to: [ + toggleMorph image: onIcon. + box color: bgColor; borderColor: bgColor]; - to: [toggleMorph form: MenuIcons smallFullscreenOnIcon]; on: #mouseLeave send: #value + to: [ + toggleMorph image: offIcon. + box color: Color transparent; borderColor: Color transparent]. - to: [toggleMorph form: MenuIcons smallFullscreenOffIcon]. aDockingBar addMorphBack: box! From bert at freudenbergs.de Tue Aug 2 14:57:48 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Aug 2 14:57:51 2016 Subject: [squeak-dev] Color black vs. Color transparent In-Reply-To: <1470146192516-4909167.post@n4.nabble.com> References: <1470146192516-4909167.post@n4.nabble.com> Message-ID: On Tue, Aug 2, 2016 at 3:56 PM, marcel.taeumel wrote: > Hi, there. > > In Color class >> colorFromPixelValue:depth: we have: > > ... > d = 32 ifTrue: [ > "eight bits per component; 8 bits of alpha" > r := (p bitShift: -16) bitAnd: 16rFF. > g := (p bitShift: -8) bitAnd: 16rFF. > b := p bitAnd: 16rFF. > alpha := p bitShift: -24. > alpha = 0 ifTrue: [^Color transparent]. > (r = 0 and: [g = 0 and: [b = 0]]) ifTrue: [^Color > transparent]. > alpha < 255 > ifTrue: [^ (Color r: r g: g b: b range: 255) > alpha: (alpha asFloat / > 255.0)] > ifFalse: [^ (Color r: r g: g b: b range: 255)]]. > ... > > This denotes black to transparent. Is this still right? > It was never "right" but a hack ... Some code treats the pixel value 0 to mean "transparent". In particular (IIRC) 16 bit forms which do not store an alpha value, and 32 bit forms that don't have a proper alpha channel. So they use 0,0,0 to mean "transparent" and "0,0,1" for solid black. I don't think there's a good reason for this anymore, since we do have enough memory and computation power to do alpha properly. But since it will break some code I'd suggest starting to fix it only after this release. - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160802/7569e5f0/attachment.htm From commits at source.squeak.org Tue Aug 2 21:29:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 21:29:38 2016 Subject: [squeak-dev] The Trunk: System-cmm.860.mcz Message-ID: Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.860.mcz ==================== Summary ==================== Name: System-cmm.860 Author: cmm Time: 2 August 2016, 4:29:02.356681 pm UUID: 0980ea7f-76ef-4ff1-8e27-b8e0840f9a70 Ancestors: System-mt.859 Fixes to the Community Dark theme: Dark themes must opposite a light theme -- in a Dark theme, darkness is the standard color of a widgets standard state, with increased lightness being used to indicate selected / hovered / feedback states. - Move toward a universal "selection" color, #dbAqua. I would like to make this the color for text-selection too, but we would need to adjust the syntax colors for that, and this change is just intended to make Community Dark minimally usable, not my preference. - Buttons now indicate their "on" selection state with a little color. - The labels of background windows are now readable. - The color palette was much too bright. Darkened it. =============== Diff against System-mt.859 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkButtons: (in category 'instance creation') ----- addDarkButtons: theme "self createDark apply." theme + set: #borderColor for: #PluggableButtonMorph to: Color gray ; + set: #color for: #PluggableButtonMorph to: Color darkGray ; - set: #borderColor for: #PluggableButtonMorph to: Color darkGray darker; - set: #color for: #PluggableButtonMorph to: Color gray; set: #textColor for: #PluggableButtonMorph to: Color white; + set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | self dbAqua twiceDarker] ]; + set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: 0.2] ]; + set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: 0.3] ]. - set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.2] ]; - set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.2] ]; - set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. "And the plus-version." theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: Color gray. ! Item was changed: ----- Method: CommunityTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- addDarkMenusAndDockingBars: theme "self createDark apply." theme set: #borderWidth for: #MenuMorph to: 0; set: #color for: #MenuMorph to: Color darkGray; set: #titleTextColor for: #MenuMorph to: Color white; set: #lineColor for: #MenuMorph to: Color lightGray; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. theme set: #textColor for: #MenuItemMorph to: Color white; + set: #selectionColor for: #MenuItemMorph to: self dbAqua; + set: #selectionTextColor for: #MenuItemMorph to: Color white. - set: #selectionColor for: #MenuItemMorph to: Color white; - set: #selectionTextColor for: #MenuItemMorph to: Color black. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." theme " set: #color for: #DockingBarMorph to: Color darkGray;" " set: #selectionColor for: #DockingBarItemMorph to: self darkContentSecondary;" set: #logoColor for: #TheWorldMainDockingBar to: Color white; set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color black.! Item was changed: ----- Method: CommunityTheme class>>addDarkScrollables: (in category 'instance creation') ----- addDarkScrollables: theme "self createDark apply." "Scroll bars" theme set: #thumbColor for: #ScrollBar to: Color gray; set: #thumbBorderColor for: #ScrollBar to: Color darkGray. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." theme set: #color for: #ScrollPane to: (Color gray: 0.1). "List widgets" theme set: #textColor for: #PluggableListMorph to: (Color gray: 0.9); + set: #selectionColor for: #PluggableListMorph to: self dbAqua; - set: #selectionColor for: #PluggableListMorph to: (Color r: 0.15 g: 0.4 b: 0.15 alpha: 1.0); set: #selectionTextColor for: #PluggableListMorph to: Color white; + derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; + set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.5); + set: #filterTextColor for: #PluggableListMorph to: Color white; + set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker ] ]; + set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker alpha: 0.5 ] ]. - set: #filterColor for: #PluggableListMorph to: self dbYellow; - set: #filterTextColor for: #PluggableListMorph to: Color black; - set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c lighter alpha: 0.5 ] ]; - set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c lighter alpha: 0.5 ] ]. "Tree widgets" theme set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; set: #lineColor for: #SimpleHierarchicalListMorph to: Color gray. "Text widgets" theme set: #textColor for: #PluggableTextMorph to: (Color gray: 0.9); set: #caretColor for: #PluggableTextMorph to: Color white; set: #selectionColor for: #PluggableTextMorph to: (Color r: 0.15 g: 0.4 b: 0.15 alpha: 1.0); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | c duller] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: self dbPurple; set: #adornmentRefuse for: #PluggableTextMorph to: self dbBlue; set: #adornmentConflict for: #PluggableTextMorph to: self dbRed; set: #adornmentDiff for: #PluggableTextMorph to: self dbGreen; set: #adornmentNormalEdit for: #PluggableTextMorph to: self dbOrange; set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow. theme set: #balloonTextColor for: #PluggableTextMorphPlus to: Color darkGray.! Item was changed: ----- Method: CommunityTheme class>>addDarkWindowColors: (in category 'instance creation') ----- addDarkWindowColors: theme "self createDark apply." theme set: #uniformWindowColor for: #Model to: Color darkGray; set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; + set: #unfocusedLabelColor for: #SystemWindow to: Color veryLightGray; - set: #unfocusedLabelColor for: #SystemWindow to: Color gray; set: #focusedLabelColor for: #SystemWindow to: Color white; set: #customWindowColor for: #Browser to: self dbGreen; set: #customWindowColor for: #ChangeList to: self dbBlue; set: #customWindowColor for: #ChangeSorter to: self dbBlue; set: #customWindowColor for: #ChatNotes to: self dbPurple; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self dbPurple; set: #customWindowColor for: #Debugger to: self dbRed; set: #customWindowColor for: #DualChangeSorter to: self dbBlue; set: #customWindowColor for: #FileContentsBrowser to: self dbYellow; set: #customWindowColor for: #FileList to: self dbYellow; set: #customWindowColor for: #InstanceBrowser to: self dbBlue; set: #customWindowColor for: #Lexicon to: self dbBlue; set: #customWindowColor for: #MCTool to: self dbPurple; set: #customWindowColor for: #MessageNames to: self dbGreen; set: #customWindowColor for: #MessageSet to: self dbBlue; set: #customWindowColor for: #PackagePaneBrowser to: self dbGreen; set: #customWindowColor for: #PluggableFileList to: self dbYellow; set: #customWindowColor for: #PreferenceBrowser to: self dbBlue; set: #customWindowColor for: #SMLoader to: self dbOrange; set: #customWindowColor for: #SMLoaderPlus to: self dbOrange; set: #customWindowColor for: #SMReleaseBrowser to: self dbOrange; set: #customWindowColor for: #ScriptingDomain to: self dbYellow; set: #customWindowColor for: #SelectorBrowser to: self dbBlue; set: #customWindowColor for: #StringHolder to: self dbYellow; set: #customWindowColor for: #TestRunner to: self dbOrange; set: #customWindowColor for: #TranscriptStream to: self dbOrange; set: #customWindowColor for: #VersionsBrowser to: self dbPurple.! Item was changed: ----- Method: CommunityTheme class>>dbAqua (in category 'colors by purpose') ----- dbAqua + ^ Color r: 0.2 g: 0.4 b: 0.4! - ^Color r: 0.542 g: 0.745 b: 0.717! Item was changed: ----- Method: CommunityTheme class>>dbBlue (in category 'colors by purpose') ----- dbBlue + ^Color r: 0.406 g: 0.535 b: 0.645! - ^Color r: 0.506 g: 0.635 b: 0.745! Item was changed: ----- Method: CommunityTheme class>>dbGreen (in category 'colors by purpose') ----- dbGreen + ^(Color r: 0.33 g: 0.542 b: 0.287)! - ^Color r: 0.71 g: 0.741 b: 0.408! Item was changed: ----- Method: CommunityTheme class>>dbOrange (in category 'colors by purpose') ----- dbOrange + ^Color r: 0.4 g: 0.2666 b: 0.172! - ^Color r: 0.871 g: 0.577 b: 0.372! Item was changed: ----- Method: CommunityTheme class>>dbRed (in category 'colors by purpose') ----- dbRed + ^Color r: 0.6 g: 0.3 b: 0.3! - ^Color r: 0.8 g: 0.4 b: 0.4! Item was changed: ----- Method: CommunityTheme class>>dbYellow (in category 'colors by purpose') ----- dbYellow + ^ (Color r: 0.554 g: 0.488 b: 0.134)! - ^Color r: 0.941 g: 0.776 b: 0.455! From asqueaker at gmail.com Tue Aug 2 21:43:36 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Aug 2 21:44:20 2016 Subject: [squeak-dev] The Inbox: Network-ul.180.mcz In-Reply-To: References: Message-ID: Hi Levente, I've narrowed Magma's problem with these changes down to one line in Socket>>#waitForSendDoneFor:. If I revert the call to #isThisEndConnected back to #isConnected, Magma's test suite works fine. waitForSendDoneFor: timeout "Wait up until the given deadline for the current send operation to complete. Return true if it completes by the deadline, false if not." | deadline timeleft | deadline := Time millisecondClockValue + (timeout * 1000) truncated. [ (self primSocketSendDone: socketHandle) ifTrue: [ ^true ]. self isThisEndConnected ifFalse: [ ^false ]. "<---- want to go back to #isConnected for this line" (timeleft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^false ]. writeSemaphore waitTimeoutMSecs: timeleft ] repeat It affects Magma's High-Availability test cases, which involve terminating the server while its busy serving clients. For each release of Squeak, I put out a new release of Magma that works OOTB. I would very much like to be able to do that this time too, without confusion of a changeset / modified system for Magma users. Would you be willing to revert this one line to buy us time to explore this change together under greater scrutiny for the duration of the next release of Squeak, instead of this release? Best, Chris On Sun, Jul 31, 2016 at 8:39 PM, Levente Uzonyi wrote: > Hi Chris, > > I decide to move this to the Trunk because the feature freeze is here. This > should also help getting more feedback. :) > > Levente > > > On Mon, 25 Jul 2016, Chris Muller wrote: > >> Hi Levente, Magma's test cases can't seem to get to the end with >> this.. I haven't investigated yet.. >> >> On Mon, Jul 25, 2016 at 2:40 PM, Levente Uzonyi >> wrote: >>> >>> Hi All, >>> >>> This is something to test on all platforms before push. I've used it on >>> 64-bit linux without problems so far. >>> >>> Levente >>> >>> >>> On Mon, 25 Jul 2016, commits@source.squeak.org wrote: >>> >>>> Levente Uzonyi uploaded a new version of Network to project The Inbox: >>>> http://source.squeak.org/inbox/Network-ul.180.mcz >>>> >>>> ==================== Summary ==================== >>>> >>>> Name: Network-ul.180 >>>> Author: ul >>>> Time: 25 July 2016, 8:40:01.001452 pm >>>> UUID: 2f23a55c-fec5-41ac-95bd-6a8c2458be95 >>>> Ancestors: Network-nice.179 >>>> >>>> Socket changes: >>>> - fixed the comment of #isOtherEndConnected and #isThisEndConnected >>>> - do not slice the data (TCP) in the image in #sendData:. Let the VM, >>>> the >>>> kernel, the hardware deal with that. >>>> - use #isOtherEndConnected when receiving data, and #isThisEndConnected >>>> when sending data instead of #isConnected >>>> - move away from #milliseconds:since:, since we have a clock that won't >>>> roll over >>>> >>>> =============== Diff against Network-nice.179 =============== >>>> >>>> Item was changed: >>>> ----- Method: Socket>>closeAndDestroy: (in category 'connection >>>> open/close') ----- >>>> closeAndDestroy: timeoutSeconds >>>> "First, try to close this connection gracefully. If the close >>>> attempt fails or times out, abort the connection. In either case, >>>> destroy >>>> the socket. Do nothing if the socket has already been destroyed (i.e., >>>> if >>>> its socketHandle is nil)." >>>> >>>> + socketHandle ifNil: [ ^self ]. >>>> + self isThisEndConnected ifTrue: [ >>>> + self close. "Close this end." ]. >>>> + (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ >>>> + "The other end has not closed the connect yet, so we >>>> will >>>> just abort it." >>>> + self primSocketAbortConnection: socketHandle ]. >>>> + self destroy! >>>> - socketHandle ifNotNil: [ >>>> - self isConnected ifTrue: [ >>>> - self close. "close this end" >>>> - (self waitForDisconnectionFor: >>>> timeoutSeconds) ifFalse: [ >>>> - "The other end didn't >>>> close so we just abort the connection" >>>> - self >>>> primSocketAbortConnection: socketHandle]]. >>>> - self destroy]. >>>> - ! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>discardReceivedData (in category 'receiving') >>>> ----- >>>> discardReceivedData >>>> "Discard any data received up until now, and return the number >>>> of >>>> bytes discarded." >>>> >>>> | buf totalBytesDiscarded | >>>> buf := String new: 10000. >>>> totalBytesDiscarded := 0. >>>> + [self isOtherEndConnected and: [self dataAvailable]] whileTrue: >>>> [ >>>> - [self isConnected and: [self dataAvailable]] whileTrue: [ >>>> totalBytesDiscarded := >>>> totalBytesDiscarded + (self receiveDataInto: >>>> buf)]. >>>> ^ totalBytesDiscarded >>>> ! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>isOtherEndConnected (in category 'queries') ----- >>>> isOtherEndConnected >>>> + "Return true if this socket is connected, or this end has closed >>>> the connection but not the other end, so we can still receive data." >>>> - "Return true if this socket is connected, or this end has closed >>>> the connection but not the other end, so we can still send data." >>>> >>>> | state | >>>> socketHandle ifNil: [ ^false ]. >>>> (state := self primSocketConnectionStatus: socketHandle) == >>>> Connected ifTrue: [ ^true ]. >>>> ^state == ThisEndClosed >>>> ! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>isThisEndConnected (in category 'queries') ----- >>>> isThisEndConnected >>>> + "Return true if this socket is connected, other the other end >>>> has >>>> closed the connection but not this end, so we can still send data." >>>> - "Return true if this socket is connected, other the other end >>>> has >>>> closed the connection but not this end, so we can still receive data." >>>> >>>> | state | >>>> socketHandle ifNil: [ ^false ]. >>>> (state := self primSocketConnectionStatus: socketHandle) == >>>> Connected ifTrue: [ ^true ]. >>>> ^state == OtherEndClosed >>>> ! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>sendData: (in category 'sending') ----- >>>> sendData: aStringOrByteArray >>>> "Send all of the data in the given array, even if it requires >>>> multiple calls to send it all. Return the number of bytes sent." >>>> >>>> "An experimental version use on slow lines: Longer timeout and >>>> smaller writes to try to avoid spurious timeouts." >>>> >>>> | bytesSent bytesToSend count | >>>> bytesToSend := aStringOrByteArray size. >>>> bytesSent := 0. >>>> [bytesSent < bytesToSend] whileTrue: [ >>>> (self waitForSendDoneFor: 60) >>>> ifFalse: [ConnectionTimedOut signal: 'send data >>>> timeout; data not sent']. >>>> count := self primSocket: socketHandle >>>> sendData: aStringOrByteArray >>>> startIndex: bytesSent + 1 >>>> + count: bytesToSend - bytesSent. >>>> - count: (bytesToSend - bytesSent min: >>>> DefaultSendBufferSize). >>>> bytesSent := bytesSent + count]. >>>> >>>> ^ bytesSent >>>> ! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>waitForConnectionFor:ifTimedOut:ifRefused: (in >>>> category 'waiting') ----- >>>> waitForConnectionFor: timeout ifTimedOut: timeoutBlock ifRefused: >>>> refusedBlock >>>> "Wait up until the given deadline for a connection to be >>>> established. Return true if it is established by the deadline, false if >>>> not." >>>> >>>> + | deadline timeLeft status | >>>> + deadline := Time millisecondClockValue + (timeout * 1000) >>>> truncated. >>>> + (status := self primSocketConnectionStatus: socketHandle) == >>>> Connected ifTrue: [^true]. >>>> + [ (status == WaitingForConnection) and: [ (timeLeft := deadline >>>> - >>>> Time millisecondClockValue) > 0 ] ] >>>> - | startTime msecsDelta msecsEllapsed status | >>>> - startTime := Time millisecondClockValue. >>>> - msecsDelta := (timeout * 1000) truncated. >>>> - status := self primSocketConnectionStatus: socketHandle. >>>> - status = Connected ifTrue: [^true]. >>>> - [(status = WaitingForConnection) and: [(msecsEllapsed := Time >>>> millisecondsSince: startTime) < msecsDelta]] >>>> whileTrue: [ >>>> + semaphore waitTimeoutMSecs: timeLeft. >>>> + status := self primSocketConnectionStatus: >>>> socketHandle ]. >>>> + status == Connected ifTrue: [ ^true ]. >>>> + status == WaitingForConnection >>>> + ifTrue: [ timeoutBlock value ] >>>> + ifFalse: [ refusedBlock value ]. >>>> + ^false! >>>> - semaphore waitTimeoutMSecs: msecsDelta - >>>> msecsEllapsed. >>>> - status := self primSocketConnectionStatus: >>>> socketHandle]. >>>> - status = Connected >>>> - ifFalse: [ >>>> - status = WaitingForConnection >>>> - ifTrue: [timeoutBlock value] >>>> - ifFalse: [refusedBlock value]. >>>> - ^false]. >>>> - ^ true! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>waitForConnectionUntil: (in category 'waiting') >>>> ----- >>>> waitForConnectionUntil: deadline >>>> "Wait up until the given deadline for a connection to be >>>> established. Return true if it is established by the deadline, false if >>>> not." >>>> >>>> + | status timeLeft | >>>> - | status waitTime | >>>> [ >>>> (status := self primSocketConnectionStatus: >>>> socketHandle) >>>> == Connected ifTrue: [ ^true ]. >>>> status == WaitingForConnection ifFalse: [ ^false ]. >>>> + (timeLeft := deadline - Time millisecondClockValue) <= 0 >>>> ifTrue: [ ^false ]. >>>> + semaphore waitTimeoutMSecs: timeLeft ] repeat! >>>> - (waitTime := deadline - Time millisecondClockValue) > 0 >>>> ifFalse: [ ^false ]. >>>> - semaphore waitTimeoutMSecs: waitTime ] repeat! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category >>>> 'waiting') ----- >>>> waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock >>>> "Wait for the given nr of seconds for data to arrive." >>>> >>>> + | deadline timeLeft | >>>> - | startTime msecsDelta | >>>> socketHandle ifNil: [ ^closedBlock value ]. >>>> + deadline := Time millisecondClockValue + (timeout * 1000) >>>> truncated. >>>> - startTime := Time millisecondClockValue. >>>> - msecsDelta := (timeout * 1000) truncated. >>>> [ >>>> (self primSocketReceiveDataAvailable: socketHandle) >>>> ifTrue: [ ^self ]. >>>> + self isOtherEndConnected ifFalse: [ ^closedBlock value >>>> ]. >>>> + (timeLeft := deadline - Time millisecondClockValue) <= 0 >>>> ifTrue: [ ^timedOutBlock value ]. >>>> - self isConnected ifFalse: [ ^closedBlock value ]. >>>> - (Time millisecondsSince: startTime) < msecsDelta >>>> ifFalse: >>>> [ ^timedOutBlock value ]. >>>> "Providing a maximum for the time for waiting is a >>>> workaround for a VM bug which causes sockets waiting for data forever in >>>> some rare cases, because the semaphore doesn't get signaled. Remove the >>>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>>> fixed." >>>> readSemaphore waitTimeoutMSecs: >>>> + (timeLeft min: self class >>>> maximumReadSemaphoreWaitTimeout) ] repeat! >>>> - (msecsDelta - (Time millisecondsSince: >>>> startTime) >>>> min: self class maximumReadSemaphoreWaitTimeout) ] repeat! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') >>>> ----- >>>> waitForDataIfClosed: closedBlock >>>> "Wait indefinitely for data to arrive. This method will block >>>> until >>>> data is available or the socket is closed." >>>> >>>> socketHandle ifNil: [ ^closedBlock value ]. >>>> [ >>>> (self primSocketReceiveDataAvailable: socketHandle) >>>> ifTrue: [ ^self ]. >>>> + self isOtherEndConnected ifFalse: [ ^closedBlock value >>>> ]. >>>> - self isConnected ifFalse: [ ^closedBlock value ]. >>>> "ul 8/13/2014 21:16 >>>> Providing a maximum for the time for waiting is a >>>> workaround for a VM bug which >>>> causes sockets waiting for data forever in some rare >>>> cases, because the semaphore >>>> doesn't get signaled. Replace the ""waitTimeoutMSecs: >>>> self class maximumReadSemaphoreWaitTimeout"" >>>> part with ""wait"" when the bug is fixed." >>>> readSemaphore waitTimeoutMSecs: self class >>>> maximumReadSemaphoreWaitTimeout ] repeat! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting') >>>> ----- >>>> waitForDisconnectionFor: timeout >>>> "Wait for the given nr of seconds for the connection to be >>>> broken. >>>> Return true if it is broken by the deadline, false if not. >>>> The client should know the connection is really going to be >>>> closed >>>> (e.g., because he has called 'close' to send a close request to >>>> the other end) >>>> before calling this method." >>>> >>>> + | deadline | >>>> + deadline := Time millisecondClockValue + (timeout * 1000) >>>> truncated. >>>> + [ self isOtherEndConnected and: [ deadline - Time >>>> millisecondClockValue > 0 ] ] >>>> + whileTrue: [ >>>> + self discardReceivedData. >>>> + "Providing a maximum for the time for waiting is >>>> a >>>> workaround for a VM bug which causes sockets waiting for data forever in >>>> some rare cases, because the semaphore doesn't get signaled. Remove the >>>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>>> fixed." >>>> + readSemaphore waitTimeoutMSecs: >>>> + (deadline - Time millisecondClockValue >>>> min: self class maximumReadSemaphoreWaitTimeout) ]. >>>> + ^self isOtherEndConnected! >>>> - | startTime msecsDelta status | >>>> - startTime := Time millisecondClockValue. >>>> - msecsDelta := (timeout * 1000) truncated. >>>> - status := self primSocketConnectionStatus: socketHandle. >>>> - [((status == Connected) or: [(status == ThisEndClosed)]) and: >>>> - [(Time millisecondsSince: startTime) < msecsDelta]] whileTrue: >>>> [ >>>> - self discardReceivedData. >>>> - "Providing a maximum for the time for waiting is a >>>> workaround for a VM bug which causes sockets waiting for data forever in >>>> some rare cases, because the semaphore doesn't get signaled. Remove the >>>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>>> fixed." >>>> - readSemaphore waitTimeoutMSecs: >>>> - (msecsDelta - (Time millisecondsSince: >>>> startTime) >>>> min: self class maximumReadSemaphoreWaitTimeout). >>>> - status := self primSocketConnectionStatus: >>>> socketHandle]. >>>> - ^ status ~= Connected! >>>> >>>> Item was changed: >>>> ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') ----- >>>> waitForSendDoneFor: timeout >>>> "Wait up until the given deadline for the current send operation >>>> to complete. Return true if it completes by the deadline, false if not." >>>> >>>> + | deadline timeleft | >>>> + deadline := Time millisecondClockValue + (timeout * 1000) >>>> truncated. >>>> - | startTime msecsDelta msecsEllapsed | >>>> - startTime := Time millisecondClockValue. >>>> - msecsDelta := (timeout * 1000) truncated. >>>> [ >>>> (self primSocketSendDone: socketHandle) ifTrue: [ ^true >>>> ]. >>>> + self isThisEndConnected ifFalse: [ ^false ]. >>>> + (timeleft := deadline - Time millisecondClockValue) <= 0 >>>> ifTrue: [ ^false ]. >>>> + writeSemaphore waitTimeoutMSecs: timeleft ] repeat! >>>> - self isConnected ifFalse: [ ^false ]. >>>> - (msecsEllapsed := Time millisecondsSince: startTime) < >>>> msecsDelta ifFalse: [ ^false ]. >>>> - writeSemaphore waitTimeoutMSecs: msecsDelta - >>>> msecsEllapsed ] repeat! >>>> >>>> >>>> >>> >> >> > From commits at source.squeak.org Tue Aug 2 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 2 21:55:03 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160802215502.28478.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068396.html Name: Morphic-mt.1220 Ancestors: Morphic-mt.1219 I forgot to restore the keyboard shortcut functionality for confirmation dialogs. It has been there before my refactorings. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068397.html Name: Collections-mt.703 Ancestors: Collections-mt.702 Small fix for SWiki HTML parsing. Recognize also non-hash color names. Our Color class is fine with it, too. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068398.html Name: HelpSystem-Core-mt.87 Ancestors: HelpSystem-Core-nice.86 Fixes parsing of broken HTML a-href links as found in SWiki. Fixes scroll-to-top when selecting new help topics. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068399.html Name: Morphic-mt.1221 Ancestors: Morphic-mt.1220 Let models such as HelpBrowser signal content changes that require a fresh start at the top. (Differentiate from appended content updates where a scroll-to-top would annoy the user who is scrolling down and in the process of reading). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068400.html Name: ToolBuilder-Morphic-mt.177 Ancestors: ToolBuilder-Morphic-mt.176 Fixes a bug where the parent of the current selection in a tree was not updated in the model when the model updated its current selection. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068401.html Name: Morphic-mt.1222 Ancestors: Morphic-mt.1221 Clean-up structure of help texts. Remove duplicates. Favor our help system instead of spreading elaborate help texts throughout the system. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068402.html Name: Graphics-mt.357 Ancestors: Graphics-tfel.356 Move generic font size summary from Morphic into Graphics package. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068403.html Name: ST80-mt.214 Ancestors: ST80-mt.213 HelpBrowser does not work in MVC because there is no tree view. Use StringHolder in a window instead. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068404.html Name: Help-Squeak-Project-mt.36 Ancestors: Help-Squeak-Project-tpr.35 Include more help texts from throughout the system. Add a book for release notes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068405.html Name: Morphic-mt.1223 Ancestors: Morphic-mt.1222 Sorry, the terse guide should not have vanished from the help menu. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068406.html Name: Monticello-mt.642 Ancestors: Monticello-mt.641 Add inbox as well-known repository. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068407.html Name: System-mt.859 Ancestors: System-mt.858 On aggressive clean-up, remove all auto-generated accessors in Preferences. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068408.html Name: Morphic-mt.1224 Ancestors: Morphic-mt.1223 Use a wireframe fullscreen icon, which is colorizable/themeable, for the docking bar. Just like the Squeak icon. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068409.html Name: System-cmm.860 Ancestors: System-mt.859 Fixes to the Community Dark theme: Dark themes must opposite a light theme -- in a Dark theme, darkness is the standard color of a widgets standard state, with increased lightness being used to indicate selected / hovered / feedback states. - Move toward a universal "selection" color, #dbAqua. I would like to make this the color for text-selection too, but we would need to adjust the syntax colors for that, and this change is just intended to make Community Dark minimally usable, not my preference. - Buttons now indicate their "on" selection state with a little color. - The labels of background windows are now readable. - The color palette was much too bright. Darkened it. ============================================= From asqueaker at gmail.com Tue Aug 2 22:12:57 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Aug 2 22:13:40 2016 Subject: [squeak-dev] The Trunk: System-cmm.860.mcz In-Reply-To: <57a110c6.b62dc80a.2941a.3229SMTPIN_ADDED_MISSING@mx.google.com> References: <57a110c6.b62dc80a.2941a.3229SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: These changes are the bare minimum to make this theme have a readable contrast and expected behaviors w.r.t. selection vs. non-selection in a dark theme. I would also prefer only for the reserved words -- self, super, thisContext, true, false and nil -- to be in bold font, the rest to be normal emphasis. I love the colors chosen for comments, classes and numerical constants, but syntax colors that provide more appropriate distinction between messages, inst-vars, variables, classes and constants is desirable. So far, I refrained from doing so, until I see the reaction to these changes.. :) I think I was the only one for years who said he wanted a "dark" theme, so maybe no one will mind if I do a bit more here..? :) On Tue, Aug 2, 2016 at 4:29 PM, wrote: > Chris Muller uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-cmm.860.mcz > > ==================== Summary ==================== > > Name: System-cmm.860 > Author: cmm > Time: 2 August 2016, 4:29:02.356681 pm > UUID: 0980ea7f-76ef-4ff1-8e27-b8e0840f9a70 > Ancestors: System-mt.859 > > Fixes to the Community Dark theme: > Dark themes must opposite a light theme -- in a Dark theme, darkness is the standard color of a widgets standard state, with increased lightness being used to indicate selected / hovered / feedback states. > - Move toward a universal "selection" color, #dbAqua. I would like to make this the color for text-selection too, but we would need to adjust the syntax colors for that, and this change is just intended to make Community Dark minimally usable, not my preference. > - Buttons now indicate their "on" selection state with a little color. > - The labels of background windows are now readable. > - The color palette was much too bright. Darkened it. > > =============== Diff against System-mt.859 =============== > > Item was changed: > ----- Method: CommunityTheme class>>addDarkButtons: (in category 'instance creation') ----- > addDarkButtons: theme > "self createDark apply." > theme > + set: #borderColor for: #PluggableButtonMorph to: Color gray ; > + set: #color for: #PluggableButtonMorph to: Color darkGray ; > - set: #borderColor for: #PluggableButtonMorph to: Color darkGray darker; > - set: #color for: #PluggableButtonMorph to: Color gray; > set: #textColor for: #PluggableButtonMorph to: Color white; > > + set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | self dbAqua twiceDarker] ]; > + set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: 0.2] ]; > + set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: 0.3] ]. > - set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.2] ]; > - set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.2] ]; > - set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. > > "And the plus-version." > theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: Color gray. > ! > > Item was changed: > ----- Method: CommunityTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- > addDarkMenusAndDockingBars: theme > "self createDark apply." > theme > set: #borderWidth for: #MenuMorph to: 0; > set: #color for: #MenuMorph to: Color darkGray; > set: #titleTextColor for: #MenuMorph to: Color white; > set: #lineColor for: #MenuMorph to: Color lightGray; > set: #lineStyle for: #MenuMorph to: BorderStyle default; > set: #lineWidth for: #MenuMorph to: 1. > > theme > set: #textColor for: #MenuItemMorph to: Color white; > + set: #selectionColor for: #MenuItemMorph to: self dbAqua; > + set: #selectionTextColor for: #MenuItemMorph to: Color white. > - set: #selectionColor for: #MenuItemMorph to: Color white; > - set: #selectionTextColor for: #MenuItemMorph to: Color black. > "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." > > "The world main docking bar." > theme > " set: #color for: #DockingBarMorph to: Color darkGray;" > " set: #selectionColor for: #DockingBarItemMorph to: self darkContentSecondary;" > set: #logoColor for: #TheWorldMainDockingBar to: Color white; > set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color black.! > > Item was changed: > ----- Method: CommunityTheme class>>addDarkScrollables: (in category 'instance creation') ----- > addDarkScrollables: theme > "self createDark apply." > > "Scroll bars" > theme > set: #thumbColor for: #ScrollBar to: Color gray; > set: #thumbBorderColor for: #ScrollBar to: Color darkGray. > > "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." > theme > set: #color for: #ScrollPane to: (Color gray: 0.1). > > "List widgets" > theme > set: #textColor for: #PluggableListMorph to: (Color gray: 0.9); > + set: #selectionColor for: #PluggableListMorph to: self dbAqua; > - set: #selectionColor for: #PluggableListMorph to: (Color r: 0.15 g: 0.4 b: 0.15 alpha: 1.0); > set: #selectionTextColor for: #PluggableListMorph to: Color white; > + derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; > + set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.5); > + set: #filterTextColor for: #PluggableListMorph to: Color white; > + set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker ] ]; > + set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker alpha: 0.5 ] ]. > - set: #filterColor for: #PluggableListMorph to: self dbYellow; > - set: #filterTextColor for: #PluggableListMorph to: Color black; > - set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c lighter alpha: 0.5 ] ]; > - set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c lighter alpha: 0.5 ] ]. > > "Tree widgets" > theme > set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; > set: #lineColor for: #SimpleHierarchicalListMorph to: Color gray. > > "Text widgets" > theme > set: #textColor for: #PluggableTextMorph to: (Color gray: 0.9); > set: #caretColor for: #PluggableTextMorph to: Color white; > set: #selectionColor for: #PluggableTextMorph to: (Color r: 0.15 g: 0.4 b: 0.15 alpha: 1.0); > set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | c duller] ]; > set: #adornmentReadOnly for: #PluggableTextMorph to: self dbPurple; > set: #adornmentRefuse for: #PluggableTextMorph to: self dbBlue; > set: #adornmentConflict for: #PluggableTextMorph to: self dbRed; > set: #adornmentDiff for: #PluggableTextMorph to: self dbGreen; > set: #adornmentNormalEdit for: #PluggableTextMorph to: self dbOrange; > set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow. > theme > set: #balloonTextColor for: #PluggableTextMorphPlus to: Color darkGray.! > > Item was changed: > ----- Method: CommunityTheme class>>addDarkWindowColors: (in category 'instance creation') ----- > addDarkWindowColors: theme > "self createDark apply." > theme > set: #uniformWindowColor for: #Model to: Color darkGray; > > set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; > + set: #unfocusedLabelColor for: #SystemWindow to: Color veryLightGray; > - set: #unfocusedLabelColor for: #SystemWindow to: Color gray; > set: #focusedLabelColor for: #SystemWindow to: Color white; > > set: #customWindowColor for: #Browser to: self dbGreen; > set: #customWindowColor for: #ChangeList to: self dbBlue; > set: #customWindowColor for: #ChangeSorter to: self dbBlue; > set: #customWindowColor for: #ChatNotes to: self dbPurple; > set: #customWindowColor for: #ClassCommentVersionsBrowser to: self dbPurple; > set: #customWindowColor for: #Debugger to: self dbRed; > set: #customWindowColor for: #DualChangeSorter to: self dbBlue; > set: #customWindowColor for: #FileContentsBrowser to: self dbYellow; > set: #customWindowColor for: #FileList to: self dbYellow; > set: #customWindowColor for: #InstanceBrowser to: self dbBlue; > set: #customWindowColor for: #Lexicon to: self dbBlue; > set: #customWindowColor for: #MCTool to: self dbPurple; > set: #customWindowColor for: #MessageNames to: self dbGreen; > set: #customWindowColor for: #MessageSet to: self dbBlue; > set: #customWindowColor for: #PackagePaneBrowser to: self dbGreen; > set: #customWindowColor for: #PluggableFileList to: self dbYellow; > set: #customWindowColor for: #PreferenceBrowser to: self dbBlue; > set: #customWindowColor for: #SMLoader to: self dbOrange; > set: #customWindowColor for: #SMLoaderPlus to: self dbOrange; > set: #customWindowColor for: #SMReleaseBrowser to: self dbOrange; > set: #customWindowColor for: #ScriptingDomain to: self dbYellow; > set: #customWindowColor for: #SelectorBrowser to: self dbBlue; > set: #customWindowColor for: #StringHolder to: self dbYellow; > set: #customWindowColor for: #TestRunner to: self dbOrange; > set: #customWindowColor for: #TranscriptStream to: self dbOrange; > set: #customWindowColor for: #VersionsBrowser to: self dbPurple.! > > Item was changed: > ----- Method: CommunityTheme class>>dbAqua (in category 'colors by purpose') ----- > dbAqua > + ^ Color r: 0.2 g: 0.4 b: 0.4! > - ^Color r: 0.542 g: 0.745 b: 0.717! > > Item was changed: > ----- Method: CommunityTheme class>>dbBlue (in category 'colors by purpose') ----- > dbBlue > + ^Color r: 0.406 g: 0.535 b: 0.645! > - ^Color r: 0.506 g: 0.635 b: 0.745! > > Item was changed: > ----- Method: CommunityTheme class>>dbGreen (in category 'colors by purpose') ----- > dbGreen > + ^(Color r: 0.33 g: 0.542 b: 0.287)! > - ^Color r: 0.71 g: 0.741 b: 0.408! > > Item was changed: > ----- Method: CommunityTheme class>>dbOrange (in category 'colors by purpose') ----- > dbOrange > + ^Color r: 0.4 g: 0.2666 b: 0.172! > - ^Color r: 0.871 g: 0.577 b: 0.372! > > Item was changed: > ----- Method: CommunityTheme class>>dbRed (in category 'colors by purpose') ----- > dbRed > + ^Color r: 0.6 g: 0.3 b: 0.3! > - ^Color r: 0.8 g: 0.4 b: 0.4! > > Item was changed: > ----- Method: CommunityTheme class>>dbYellow (in category 'colors by purpose') ----- > dbYellow > + ^ (Color r: 0.554 g: 0.488 b: 0.134)! > - ^Color r: 0.941 g: 0.776 b: 0.455! > > From Marcel.Taeumel at hpi.de Wed Aug 3 06:53:30 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 07:38:32 2016 Subject: [squeak-dev] Re: The Trunk: System-cmm.860.mcz In-Reply-To: References: Message-ID: <1470207210233-4909245.post@n4.nabble.com> Chris Muller-3 wrote > These changes are the bare minimum to make this theme have a readable > contrast and expected behaviors w.r.t. selection vs. non-selection in > a dark theme. > > I would also prefer only for the reserved words -- self, super, > thisContext, true, false and nil -- to be in bold font, the rest to be > normal emphasis. I love the colors chosen for comments, classes and > numerical constants, but syntax colors that provide more appropriate > distinction between messages, inst-vars, variables, classes and > constants is desirable. > > So far, I refrained from doing so, until I see the reaction to these > changes.. :) I think I was the only one for years who said he > wanted a "dark" theme, so maybe no one will mind if I do a bit more > here..? :) > > On Tue, Aug 2, 2016 at 4:29 PM, < > commits@.squeak > > wrote: >> Chris Muller uploaded a new version of System to project The Trunk: >> http://source.squeak.org/trunk/System-cmm.860.mcz >> >> ==================== Summary ==================== >> >> Name: System-cmm.860 >> Author: cmm >> Time: 2 August 2016, 4:29:02.356681 pm >> UUID: 0980ea7f-76ef-4ff1-8e27-b8e0840f9a70 >> Ancestors: System-mt.859 >> >> Fixes to the Community Dark theme: >> Dark themes must opposite a light theme -- in a Dark theme, >> darkness is the standard color of a widgets standard state, with >> increased lightness being used to indicate selected / hovered / feedback >> states. >> - Move toward a universal "selection" color, #dbAqua. I would >> like to make this the color for text-selection too, but we would need to >> adjust the syntax colors for that, and this change is just intended to >> make Community Dark minimally usable, not my preference. >> - Buttons now indicate their "on" selection state with a little >> color. >> - The labels of background windows are now readable. >> - The color palette was much too bright. Darkened it. >> >> =============== Diff against System-mt.859 =============== >> >> Item was changed: >> ----- Method: CommunityTheme class>>addDarkButtons: (in category >> 'instance creation') ----- >> addDarkButtons: theme >> "self createDark apply." >> theme >> + set: #borderColor for: #PluggableButtonMorph to: Color >> gray ; >> + set: #color for: #PluggableButtonMorph to: Color darkGray >> ; >> - set: #borderColor for: #PluggableButtonMorph to: Color >> darkGray darker; >> - set: #color for: #PluggableButtonMorph to: Color gray; >> set: #textColor for: #PluggableButtonMorph to: Color >> white; >> >> + set: #selectionModifier for: #PluggableButtonMorph to: [ >> [:c | self dbAqua twiceDarker] ]; >> + set: #hoverModifier for: #PluggableButtonMorph to: [ [:c >> | c adjustBrightness: 0.2] ]; >> + set: #feedbackModifier for: #PluggableButtonMorph to: [ >> [:c | c adjustBrightness: 0.3] ]. >> - set: #selectionModifier for: #PluggableButtonMorph to: [ >> [:c | c adjustBrightness: -0.2] ]; >> - set: #hoverModifier for: #PluggableButtonMorph to: [ [:c >> | c adjustBrightness: -0.2] ]; >> - set: #feedbackModifier for: #PluggableButtonMorph to: [ >> [:c | c adjustBrightness: -0.3] ]. >> >> "And the plus-version." >> theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: >> Color gray. >> ! >> >> Item was changed: >> ----- Method: CommunityTheme class>>addDarkMenusAndDockingBars: (in >> category 'instance creation') ----- >> addDarkMenusAndDockingBars: theme >> "self createDark apply." >> theme >> set: #borderWidth for: #MenuMorph to: 0; >> set: #color for: #MenuMorph to: Color darkGray; >> set: #titleTextColor for: #MenuMorph to: Color white; >> set: #lineColor for: #MenuMorph to: Color lightGray; >> set: #lineStyle for: #MenuMorph to: BorderStyle default; >> set: #lineWidth for: #MenuMorph to: 1. >> >> theme >> set: #textColor for: #MenuItemMorph to: Color white; >> + set: #selectionColor for: #MenuItemMorph to: self dbAqua; >> + set: #selectionTextColor for: #MenuItemMorph to: Color >> white. >> - set: #selectionColor for: #MenuItemMorph to: Color white; >> - set: #selectionTextColor for: #MenuItemMorph to: Color >> black. >> "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use >> hard-coded default. See MenuItemMorph." >> >> "The world main docking bar." >> theme >> " set: #color for: #DockingBarMorph to: Color darkGray;" >> " set: #selectionColor for: #DockingBarItemMorph to: self >> darkContentSecondary;" >> set: #logoColor for: #TheWorldMainDockingBar to: Color >> white; >> set: #selectionLogoColor for: #TheWorldMainDockingBar to: >> Color black.! >> >> Item was changed: >> ----- Method: CommunityTheme class>>addDarkScrollables: (in category >> 'instance creation') ----- >> addDarkScrollables: theme >> "self createDark apply." >> >> "Scroll bars" >> theme >> set: #thumbColor for: #ScrollBar to: Color gray; >> set: #thumbBorderColor for: #ScrollBar to: Color >> darkGray. >> >> "Scroll panes (includes generic stuff for list widgets, tree >> widgets, and text widgets." >> theme >> set: #color for: #ScrollPane to: (Color gray: 0.1). >> >> "List widgets" >> theme >> set: #textColor for: #PluggableListMorph to: (Color gray: >> 0.9); >> + set: #selectionColor for: #PluggableListMorph to: self >> dbAqua; >> - set: #selectionColor for: #PluggableListMorph to: (Color >> r: 0.15 g: 0.4 b: 0.15 alpha: 1.0); >> set: #selectionTextColor for: #PluggableListMorph to: >> Color white; >> + derive: #multiSelectionColor for: #PluggableListMorph >> from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; >> + set: #filterColor for: #PluggableListMorph to: (self >> dbYellow alpha: 0.5); >> + set: #filterTextColor for: #PluggableListMorph to: Color >> white; >> + set: #preSelectionModifier for: #PluggableListMorph to: [ >> [:c | c twiceDarker ] ]; >> + set: #hoverSelectionModifier for: #PluggableListMorph to: >> [ [:c | c twiceDarker alpha: 0.5 ] ]. >> - set: #filterColor for: #PluggableListMorph to: self >> dbYellow; >> - set: #filterTextColor for: #PluggableListMorph to: Color >> black; >> - set: #preSelectionModifier for: #PluggableListMorph to: [ >> [:c | c lighter alpha: 0.5 ] ]; >> - set: #hoverSelectionModifier for: #PluggableListMorph to: >> [ [:c | c lighter alpha: 0.5 ] ]. >> >> "Tree widgets" >> theme >> set: #highlightTextColor for: >> #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; >> set: #lineColor for: #SimpleHierarchicalListMorph to: >> Color gray. >> >> "Text widgets" >> theme >> set: #textColor for: #PluggableTextMorph to: (Color gray: >> 0.9); >> set: #caretColor for: #PluggableTextMorph to: Color >> white; >> set: #selectionColor for: #PluggableTextMorph to: (Color >> r: 0.15 g: 0.4 b: 0.15 alpha: 1.0); >> set: #unfocusedSelectionModifier for: #PluggableTextMorph >> to: [ [:c | c duller] ]; >> set: #adornmentReadOnly for: #PluggableTextMorph to: self >> dbPurple; >> set: #adornmentRefuse for: #PluggableTextMorph to: self >> dbBlue; >> set: #adornmentConflict for: #PluggableTextMorph to: self >> dbRed; >> set: #adornmentDiff for: #PluggableTextMorph to: self >> dbGreen; >> set: #adornmentNormalEdit for: #PluggableTextMorph to: >> self dbOrange; >> set: #adornmentDiffEdit for: #PluggableTextMorph to: self >> dbYellow. >> theme >> set: #balloonTextColor for: #PluggableTextMorphPlus to: >> Color darkGray.! >> >> Item was changed: >> ----- Method: CommunityTheme class>>addDarkWindowColors: (in category >> 'instance creation') ----- >> addDarkWindowColors: theme >> "self createDark apply." >> theme >> set: #uniformWindowColor for: #Model to: Color darkGray; >> >> set: #unfocusedWindowColorModifier for: #SystemWindow to: >> [ [:color | color darker] ]; >> + set: #unfocusedLabelColor for: #SystemWindow to: Color >> veryLightGray; >> - set: #unfocusedLabelColor for: #SystemWindow to: Color >> gray; >> set: #focusedLabelColor for: #SystemWindow to: Color >> white; >> >> set: #customWindowColor for: #Browser to: self dbGreen; >> set: #customWindowColor for: #ChangeList to: self dbBlue; >> set: #customWindowColor for: #ChangeSorter to: self >> dbBlue; >> set: #customWindowColor for: #ChatNotes to: self >> dbPurple; >> set: #customWindowColor for: #ClassCommentVersionsBrowser >> to: self dbPurple; >> set: #customWindowColor for: #Debugger to: self dbRed; >> set: #customWindowColor for: #DualChangeSorter to: self >> dbBlue; >> set: #customWindowColor for: #FileContentsBrowser to: >> self dbYellow; >> set: #customWindowColor for: #FileList to: self dbYellow; >> set: #customWindowColor for: #InstanceBrowser to: self >> dbBlue; >> set: #customWindowColor for: #Lexicon to: self dbBlue; >> set: #customWindowColor for: #MCTool to: self dbPurple; >> set: #customWindowColor for: #MessageNames to: self >> dbGreen; >> set: #customWindowColor for: #MessageSet to: self dbBlue; >> set: #customWindowColor for: #PackagePaneBrowser to: self >> dbGreen; >> set: #customWindowColor for: #PluggableFileList to: self >> dbYellow; >> set: #customWindowColor for: #PreferenceBrowser to: self >> dbBlue; >> set: #customWindowColor for: #SMLoader to: self dbOrange; >> set: #customWindowColor for: #SMLoaderPlus to: self >> dbOrange; >> set: #customWindowColor for: #SMReleaseBrowser to: self >> dbOrange; >> set: #customWindowColor for: #ScriptingDomain to: self >> dbYellow; >> set: #customWindowColor for: #SelectorBrowser to: self >> dbBlue; >> set: #customWindowColor for: #StringHolder to: self >> dbYellow; >> set: #customWindowColor for: #TestRunner to: self >> dbOrange; >> set: #customWindowColor for: #TranscriptStream to: self >> dbOrange; >> set: #customWindowColor for: #VersionsBrowser to: self >> dbPurple.! >> >> Item was changed: >> ----- Method: CommunityTheme class>>dbAqua (in category 'colors by >> purpose') ----- >> dbAqua >> + ^ Color r: 0.2 g: 0.4 b: 0.4! >> - ^Color r: 0.542 g: 0.745 b: 0.717! >> >> Item was changed: >> ----- Method: CommunityTheme class>>dbBlue (in category 'colors by >> purpose') ----- >> dbBlue >> + ^Color r: 0.406 g: 0.535 b: 0.645! >> - ^Color r: 0.506 g: 0.635 b: 0.745! >> >> Item was changed: >> ----- Method: CommunityTheme class>>dbGreen (in category 'colors by >> purpose') ----- >> dbGreen >> + ^(Color r: 0.33 g: 0.542 b: 0.287)! >> - ^Color r: 0.71 g: 0.741 b: 0.408! >> >> Item was changed: >> ----- Method: CommunityTheme class>>dbOrange (in category 'colors by >> purpose') ----- >> dbOrange >> + ^Color r: 0.4 g: 0.2666 b: 0.172! >> - ^Color r: 0.871 g: 0.577 b: 0.372! >> >> Item was changed: >> ----- Method: CommunityTheme class>>dbRed (in category 'colors by >> purpose') ----- >> dbRed >> + ^Color r: 0.6 g: 0.3 b: 0.3! >> - ^Color r: 0.8 g: 0.4 b: 0.4! >> >> Item was changed: >> ----- Method: CommunityTheme class>>dbYellow (in category 'colors by >> purpose') ----- >> dbYellow >> + ^ (Color r: 0.554 g: 0.488 b: 0.134)! >> - ^Color r: 0.941 g: 0.776 b: 0.455! >> >> Hi Chris, please no "bold" in any source code keywords. :-) Here is some feedback for these changes: - menu selection is barely visible, especially with the gray around it -- maybe change also #selectionTextColor to be not white? - text selection is too prominent and could be a little bit duller - add theme set: #borderColor for: #ScrollPane to: (Color gray: 0.075) to have a matching border color in scroll panes outside system windows such as the browser's class search Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-System-cmm-860-mcz-tp4909214p4909245.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Das.Linux at gmx.de Wed Aug 3 07:47:21 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Aug 3 07:47:24 2016 Subject: [squeak-dev] Re: The Trunk: System-cmm.860.mcz In-Reply-To: <1470207210233-4909245.post@n4.nabble.com> References: <1470207210233-4909245.post@n4.nabble.com> Message-ID: On 03.08.2016, at 08:53, marcel.taeumel wrote: > > please no "bold" in any source code keywords. :-) +1 From commits at source.squeak.org Wed Aug 3 08:07:39 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 08:07:42 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1225.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1225.mcz ==================== Summary ==================== Name: Morphic-mt.1225 Author: mt Time: 3 August 2016, 10:07:05.19227 am UUID: 997b3ea0-bf32-9140-a6df-5147d1c278f9 Ancestors: Morphic-mt.1224 Fixes scratch-pad to be compatible with UI themes. This is not the optimal solution but it works for now. =============== Diff against Morphic-mt.1224 =============== Item was changed: ----- Method: BalloonMorph class>>balloonColor (in category 'preferences') ----- balloonColor + self flag: #remove. "mt: We should remove this additional getter in the future and use UI themes instead:" + ^ (UserInterfaceTheme current get: #color for: #NewBalloonMorph) ifNil: [(TranslucentColor r: 0.92 g: 0.92 b: 0.706 alpha: 0.749)]! - - - ^ BalloonColor ifNil: [(TranslucentColor r: 0.92 g: 0.92 b: 0.706 alpha: 0.749)]! Item was changed: ----- Method: BalloonMorph class>>balloonColor: (in category 'preferences') ----- balloonColor: aColor + self flag: #remove. "mt: We should remove this additional setter in the future and use UI themes instead:" + UserInterfaceTheme current set: #color for: #NewBalloonMorph to: aColor.! - BalloonColor := aColor.! Item was changed: ----- Method: BalloonMorph class>>balloonFont (in category 'utility') ----- balloonFont + + self flag: #remove. "mt: We should remove this additional getter in the future and use UI themes instead:" + ^ (UserInterfaceTheme current get: #font for: #NewBalloonMorph) ifNil: [TextStyle defaultFont]! - ^ BalloonFont! Item was changed: ----- Method: BalloonMorph class>>setBalloonFontTo: (in category 'utility') ----- setBalloonFontTo: aFont + + self flag: #remove. "mt: We should remove this additional setter in the future and use UI themes instead:" + UserInterfaceTheme current set: #font for: #NewBalloonMorph to: aFont.! - aFont ifNotNil: [BalloonFont := aFont]! Item was changed: ----- Method: PluggableTextMorph>>setDefaultParameters (in category 'initialization') ----- setDefaultParameters super setDefaultParameters. self font: (self userInterfaceTheme font ifNil: [TextStyle defaultFont]); setTextColor: (self userInterfaceTheme textColor ifNil: [Color black]). self wrapBorderColor: ((self userInterfaceTheme wrapBorderColorModifier ifNil: [ [:c | c muchLighter alpha: 0.3] ]) value: self borderColor). self setProperty: #adornmentReadOnly toValue: (self userInterfaceTheme adornmentReadOnly ifNil: [Color black]); setProperty: #adornmentRefuse toValue: (self userInterfaceTheme adornmentRefuse ifNil: [Color tan]); setProperty: #adornmentConflict toValue: (self userInterfaceTheme adornmentConflict ifNil: [Color red]); setProperty: #adornmentDiff toValue: (self userInterfaceTheme adornmentDiff ifNil: [Color green]); setProperty: #adornmentNormalEdit toValue: (self userInterfaceTheme adornmentNormalEdit ifNil: [Color orange]); setProperty: #adornmentDiffEdit toValue: (self userInterfaceTheme adornmentDiffEdit ifNil: [Color yellow]). textMorph + caretColor: (self userInterfaceTheme caretColor ifNil: [Color red]); + selectionColor: (self userInterfaceTheme selectionColor ifNil: [TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.2]); + unfocusedSelectionColor: ((self userInterfaceTheme unfocusedSelectionModifier ifNil: [ [:c | Color gray: 0.9] ]) - setProperty: #caretColor - toValue: (self userInterfaceTheme caretColor ifNil: [Color red]); - setProperty: #selectionColor - toValue: (self userInterfaceTheme selectionColor ifNil: [TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.2]); - setProperty: #unfocusedSelectionColor - toValue: ((self userInterfaceTheme unfocusedSelectionModifier ifNil: [ [:c | Color gray: 0.9] ]) value: textMorph selectionColor).! Item was changed: ----- Method: SearchBar>>scratchPad (in category 'accessing') ----- scratchPad ^ scratchPad ifNil: + [ scratchPad := TextMorphForEditView new. "we should be able to use TextMorph here; fix later" - [ scratchPad := TextMorph new. scratchPad " on: #keyboardFocusChange send: #removeScratchPad to: self ;" on: #mouseLeave send: #removeScratchPad to: self ; on: #keyStroke send: #handleScratchPadKey: to: self ; + margins: (5@0 corner: 5@0); backgroundColor: (BalloonMorph balloonColor alpha: 1.0) ; + setEditView: PluggableTextMorph new ; "dummy" autoFit: true ; wrapFlag: true ; newContents: '--scratch area--' ; + font: ((UserInterfaceTheme current get: #font for: #PluggableTextMorph) ifNil: [TextStyle defaultFont]); + textColor: ((UserInterfaceTheme current get: #textColor for: #PluggableTextMorph) ifNil: [Color black]); + caretColor: ((UserInterfaceTheme current get: #caretColor for: #PluggableTextMorph) ifNil: [Color red]); + selectionColor: ((UserInterfaceTheme current get: #selectionColor for: #PluggableTextMorph) ifNil: [Color blue]) muchDarker; yourself. self layoutScratchPad. Preferences menuAppearance3d ifTrue: [ scratchPad addDropShadow ]. scratchPad ]! Item was added: + ----- Method: TextMorphForEditView>>caretColor: (in category 'accessing') ----- + caretColor: aColor + self + setProperty: #caretColor + toValue: aColor.! Item was added: + ----- Method: TextMorphForEditView>>selectionColor: (in category 'accessing') ----- + selectionColor: aColor + + self + setProperty: #selectionColor + toValue: aColor.! Item was added: + ----- Method: TextMorphForEditView>>unfocusedSelectionColor: (in category 'accessing') ----- + unfocusedSelectionColor: aColor + + self + setProperty: #unfocusedSelectionColor + toValue: aColor.! From commits at source.squeak.org Wed Aug 3 08:28:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 08:28:30 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.88.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.88.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.88 Author: mt Time: 3 August 2016, 10:28:19.65027 am UUID: faca3bc4-b5df-6b49-86bf-07c55fed4316 Ancestors: HelpSystem-Core-mt.87 For prospective content authors in our help system, avoid changing protected texts by accident. =============== Diff against HelpSystem-Core-mt.87 =============== Item was changed: ----- Method: HelpBrowser>>currentParentTopic (in category 'accessing') ----- currentParentTopic + ^ currentParentTopic! - ^ currentParentTopic ifNil: [self rootTopic]! Item was changed: AbstractHelpTopic subclass: #HelpTopic + instanceVariableNames: 'title key icon contents subtopics priority isEditable' - instanceVariableNames: 'title key icon contents subtopics priority' classVariableNames: '' poolDictionaries: '' category: 'HelpSystem-Core-Model'! !HelpTopic commentStamp: 'mt 3/25/2015 11:27' prior: 0! This is a configurable version of a help topic. You can define its contents, title, icon, and subtopics manually. Help builders make use of this.! Item was added: + ----- Method: HelpTopic class>>title:icon:readOnlyContents: (in category 'instance creation') ----- + title: aTitle icon: anIcon readOnlyContents: aText + "Create a new instance with given title, icon and content" + + ^self new + title: aTitle; + icon: anIcon; + contents: aText; + isEditable: false; + yourself. + ! Item was added: + ----- Method: HelpTopic class>>title:readOnlyContents: (in category 'instance creation') ----- + title: aTitle readOnlyContents: aText + "Create a new instance with given title and content" + + ^ self new + title: aTitle; + contents: aText; + isEditable: false; + yourself. + ! Item was added: + ----- Method: HelpTopic>>isEditable (in category 'accessing') ----- + isEditable + ^ isEditable ifNil: [true]! Item was added: + ----- Method: HelpTopic>>isEditable: (in category 'accessing') ----- + isEditable: aBoolean + isEditable := aBoolean.! From commits at source.squeak.org Wed Aug 3 08:29:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 08:29:48 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.37.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.37.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.37 Author: mt Time: 3 August 2016, 10:29:37.74127 am UUID: f0bafae7-02f3-6843-9fe4-076c0a3338e3 Ancestors: Help-Squeak-Project-mt.36 Protect help texts that are fixed or derived from other strings in the system from editing (and duplicating). =============== Diff against Help-Squeak-Project-mt.36 =============== Item was changed: ----- Method: SqueakLicenseHelp class>>licenseChange (in category 'pages') ----- licenseChange ^HelpTopic title: 'License has changed with 4.0' + readOnlyContents: 'On 23 September 1996, Apple Computer Inc. released Squeak V1.1 under the "Squeak License" (SqL). - contents: 'On 23 September 1996, Apple Computer Inc. released Squeak V1.1 under the "Squeak License" (SqL). On May 8, 2006 Apple agreed to relicense original Squeak V1.1 under the Apple Public Source License. On October 12, 2006 Apple granted permission to relicense under Apache license 2.0. In 2006, VPRI began to collect "Distribution Agreements" for all contributors to Squeak since V1.1 up to V3.8, asking them to relicense their contributions, which were originally licensed under SqL, to the MIT license. This was a great effort on behalf of many and VPRI has 100s of signed documents agreeing to this. Do you want to contribute source to Squeak?All new contributions since 4.0 must be under the MIT license. When you make your code available, please state explicitly in some form such as the description on a web site or email announcement that your contribution is under the MIT license. (It doesn''t have to be exclusive; you can release it under difference licenses at the same time.) Have you contributed source to Squeak? If you believe you have, but have not sent in an agreement to allow your submission(s) to be licensed under the MIT license then please see http://netjam.org/squeak/contributors. There you can find a list of known contributors and a PDF of the agreement with instructions. The snail mail address is found in the agreement PDF file. Also there are a few people for which we are lacking full contact information. If you think you can help please also visit the link above and see if you can identify any of the unknown developer initials or any of the developers for whom we do not have a current email address.' ! Item was changed: ----- Method: SqueakLicenseHelp class>>officialLicense (in category 'pages') ----- officialLicense ^HelpTopic title: 'Official License' + readOnlyContents: Smalltalk license readStream nextChunkText! - contents: Smalltalk license readStream nextChunkText! Item was changed: ----- Method: SqueakToolsHelp class>>fontSizeSummary (in category 'pages') ----- fontSizeSummary ^HelpTopic title: 'Font Size Summary' + readOnlyContents: TextStyle fontSizeSummaryContents! - contents: TextStyle fontSizeSummaryContents! Item was changed: ----- Method: SqueakTutorials class>>usefulExpressions (in category 'pages') ----- usefulExpressions ^ HelpTopic title: 'Useful Expressions' + readOnlyContents: Utilities standardWorkspaceContents! - contents: Utilities standardWorkspaceContents! From karlramberg at gmail.com Wed Aug 3 11:05:16 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 11:05:20 2016 Subject: [squeak-dev] Merge button missing in MergeBrowser ? Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: merge.PNG Type: image/png Size: 21337 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/c246fded/merge.png From karlramberg at gmail.com Wed Aug 3 11:57:49 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 11:57:53 2016 Subject: [squeak-dev] Latest image from build http://build.squeak.org/ failing ? Message-ID: Latest builds seem to be failing and latest successful build is quite behind http://build.squeak.org/job/Trunk/711/console Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/fcb0a073/attachment.htm From commits at source.squeak.org Wed Aug 3 12:17:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 12:17:09 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1226.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1226.mcz ==================== Summary ==================== Name: Morphic-mt.1226 Author: mt Time: 3 August 2016, 2:16:23.039041 pm UUID: 2258c988-1152-4940-9a2b-a95241a3e1d3 Ancestors: Morphic-mt.1225 Fixes retractable scroll bars, which did not work properly of mouseOverForKeyboardFocus was disabled. Note that #hasFocus is ancient and not needed anymore for controlling keyboard focus here. See also #hIsScrollbarNeeded and #vIsScrollbarNeeded and maybe other senders of #hasFocus. =============== Diff against Morphic-mt.1225 =============== Item was changed: ----- Method: ScrollPane>>mouseEnter: (in category 'event handling') ----- mouseEnter: event + hasFocus := true. - Preferences mouseOverForKeyboardFocus ifTrue: [hasFocus := true]. owner isSystemWindow ifTrue: [owner paneTransition: event]. retractableScrollBar ifTrue: [self hideOrShowScrollBars].! Item was changed: ----- Method: ScrollPane>>mouseLeave: (in category 'event handling') ----- mouseLeave: event + hasFocus := false. - Preferences mouseOverForKeyboardFocus ifTrue: [hasFocus := false]. retractableScrollBar ifTrue: [self hideScrollBars]. owner isSystemWindow ifTrue: [owner paneTransition: event].! From karlramberg at gmail.com Wed Aug 3 12:33:22 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 12:33:26 2016 Subject: [squeak-dev] Re: Latest image from build http://build.squeak.org/ failing ? In-Reply-To: References: Message-ID: Seems build #698 is latest image that is ok. Build #699 drops download size by ~6 MB and is quite behind on the updates. Best, Karl On Wed, Aug 3, 2016 at 1:57 PM, karl ramberg wrote: > Latest builds seem to be failing and latest successful build is quite > behind > > http://build.squeak.org/job/Trunk/711/console > > Best, > Karl > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/328f75af/attachment.htm From commits at source.squeak.org Wed Aug 3 12:52:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 12:52:47 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1227.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1227.mcz ==================== Summary ==================== Name: Morphic-mt.1227 Author: mt Time: 3 August 2016, 2:52:07.812041 pm UUID: 428a55a4-6204-174c-b4b0-14b8dc1a297d Ancestors: Morphic-mt.1226 Fixes a small regression where the text cursor did not show up on a simple mouse down when it was invisible due to its blinking animation. =============== Diff against Morphic-mt.1226 =============== Item was changed: ----- Method: TextMorph>>mouseDown: (in category 'event handling') ----- mouseDown: evt "Make this TextMorph be the keyboard input focus, if it isn't already, and repond to the text selection gesture." evt yellowButtonPressed ifTrue: [ "First check for option (menu) click" ^ self yellowButtonActivity: evt shiftPressed]. + "Show the caret immediately on mouse down to give user feedback." + self resetBlinkCursor. + "If focus does not follow the mouse cursor and we click below everything, just grab the focus to not destroy the selection." ((self hasKeyboardFocus: evt hand) not and: [(self bounds containsPoint: evt position) not]) ifTrue: [evt hand newKeyboardFocus: self] ifFalse: [ evt hand newKeyboardFocus: self. self handleInteraction: [editor mouseDown: evt] fromEvent: evt].! From Marcel.Taeumel at hpi.de Wed Aug 3 12:11:16 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 12:56:20 2016 Subject: [squeak-dev] Re: Latest image from build http://build.squeak.org/ failing ? In-Reply-To: References: Message-ID: <1470226276598-4909389.post@n4.nabble.com> Karl Ramberg wrote > Seems build #698 is latest image that is ok. > Build #699 drops download size by ~6 MB and is quite behind on the > updates. > > Best, > Karl > > On Wed, Aug 3, 2016 at 1:57 PM, karl ramberg < > karlramberg@ > > wrote: > >> Latest builds seem to be failing and latest successful build is quite >> behind >> >> http://build.squeak.org/job/Trunk/711/console >> >> Best, >> Karl >> Hi Karl, this is because of the instvar-update-phenomenon affecting the system progress bar morph. We need a new reference image for the CI server. Tobias? :) Best, Marcel -- View this message in context: http://forum.world.st/Latest-image-from-build-http-build-squeak-org-failing-tp4909360p4909389.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Aug 3 12:12:32 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 12:57:36 2016 Subject: [squeak-dev] Re: Merge button missing in MergeBrowser ? In-Reply-To: References: Message-ID: <1470226352771-4909391.post@n4.nabble.com> Karl Ramberg wrote > Anybody else seen this issue? > Merge button not present so I can't merge in changes :-( > > Best, > Karl > > > > > merge.PNG (28K) > <http://forum.world.st/attachment/4909328/0/merge.PNG> o.O I can see the merge button on that screenshot, at least the letters "merge" ;-) You cannot merge until you resolve the conflicts. Then the merge button will be enabled again. Best, Marcel -- View this message in context: http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909391.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 3 13:08:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 13:08:09 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.178.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.178.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.178 Author: mt Time: 3 August 2016, 3:07:56.004992 pm UUID: d001b249-3b74-334f-a7d8-8b799779efe5 Ancestors: ToolBuilder-Morphic-mt.177 For disabled buttons, still draw a border to make them still look like buttons, not like labels. =============== Diff against ToolBuilder-Morphic-mt.177 =============== Item was changed: ----- Method: PluggableButtonMorphPlus>>updateFillStylePressing:hovering: (in category 'initialize-release') ----- updateFillStylePressing: isPressing hovering: isHovering enabled ifFalse: [ self color: (disabledColor ifNil: [Color transparent]). + self borderStyle color: disabledTextColor. - self borderStyle color: Color transparent. ^ self]. super updateFillStylePressing: isPressing hovering: isHovering.! From Marcel.Taeumel at hpi.de Wed Aug 3 12:24:11 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 13:09:14 2016 Subject: [squeak-dev] Re: Merge button missing in MergeBrowser ? In-Reply-To: References: Message-ID: <1470227051541-4909394.post@n4.nabble.com> Karl Ramberg wrote > Anybody else seen this issue? > Merge button not present so I can't merge in changes :-( > > Best, > Karl > > > > > merge.PNG (28K) > <http://forum.world.st/attachment/4909328/0/merge.PNG> Anyway, thanks for the pointer. :-) http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-178-mcz-td4909393.html Best, Marcel -- View this message in context: http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909394.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 3 13:29:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 13:29:20 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1228.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1228.mcz ==================== Summary ==================== Name: Morphic-mt.1228 Author: mt Time: 3 August 2016, 3:28:25.722418 pm UUID: 24a39e09-443b-0b41-8d8d-3bd49125fe20 Ancestors: Morphic-mt.1227 Some last-minute UI theming fix, which applies to the non-flat look (i.e. using gradients) in progress bars. Implementation is not perfect but consistent with LazyListMorph selections, now. Note that, in the future, we should untangle the use of #gradientMenu and, maybe, add specific preferences. =============== Diff against Morphic-mt.1227 =============== Item was added: + ----- Method: SystemProgressBarMorph>>barColor (in category 'accessing') ----- + barColor + + ^ barColor! Item was added: + ----- Method: SystemProgressBarMorph>>barColor: (in category 'accessing') ----- + barColor: aColor + + | cc fill | + cc := aColor. + + MenuMorph gradientMenu + ifFalse: [fill := SolidFillStyle color: cc] + ifTrue: [ + fill := GradientFillStyle ramp: { + 0.0 -> cc twiceLighter. + 1 -> cc twiceDarker }]. + + barColor := fill. + self changed.! Item was added: + ----- Method: SystemProgressBarMorph>>barSize (in category 'accessing') ----- + barSize + + ^ barSize! Item was changed: ----- Method: SystemProgressBarMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas + + | area fill | - | area | super drawOn: aCanvas. + self barSize > 0 ifTrue: [ - barSize > 0 ifTrue: [ area := self innerBounds. + area := area origin extent: (self barSize min: area extent x)@area extent y. + + fill := self barColor isColor + ifTrue: [SolidFillStyle color: self barColor] + ifFalse: [self barColor]. + fill isGradientFill ifTrue: [ + fill origin: area origin. + fill direction: 0@ area height]. + + aCanvas + fillRectangle: area + fillStyle: fill + borderStyle: (SimpleBorder new width: 1; color: fill asColor muchDarker). - area := area origin extent: (barSize min: area extent x)@area extent y. - aCanvas fillRectangle: area color: barColor ]. ! Item was changed: ----- Method: SystemProgressBarMorph>>setDefaultParameters (in category 'initialization') ----- setDefaultParameters "change the receiver's appareance parameters" self color: (self userInterfaceTheme color ifNil: [Color r: 0.977 g: 0.977 b: 0.977]); borderStyle: (self userInterfaceTheme borderStyle ifNil: [BorderStyle default]); borderColor: (self userInterfaceTheme borderColor ifNil: [Color transparent]); + borderWidth: (self userInterfaceTheme borderWidth ifNil: [0]); + barColor: (self userInterfaceTheme barColor ifNil: [Color r: 0.72 g: 0.72 b: 0.9]).! - borderWidth: (self userInterfaceTheme borderWidth ifNil: [0]). - - barColor := self userInterfaceTheme barColor ifNil: [Color r: 0.72 g: 0.72 b: 0.9].! From commits at source.squeak.org Wed Aug 3 13:49:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 13:49:16 2016 Subject: [squeak-dev] The Trunk: System-mt.861.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.861.mcz ==================== Summary ==================== Name: System-mt.861 Author: mt Time: 3 August 2016, 3:48:48.221245 pm UUID: 74e725aa-ea12-df48-b3cf-730dba8dccc6 Ancestors: System-cmm.860 Provide progress indication when applying a new UI theme. Use 1000-ms updates to not slow-down the process unnecessarily. =============== Diff against System-cmm.860 =============== Item was changed: ----- Method: UserInterfaceTheme>>apply (in category 'actions') ----- apply "Apply this theme to all affected objects. Let classes decide on how to iterate and call their instances." UserInterfaceTheme current: self. self class clientClassesToReapply in: [:cc | cc do: [:eachClass | eachClass applyUserInterfaceTheme]. + (cc select: [:eachClass | eachClass canApplyThemeToInstances]) + do: [:eachClass | eachClass applyThemeToInstances] + displayingProgress: [:eachClass | 'Applying {1} to instances of {2}' format: {self name. eachClass name}] + every: 1000 ]. - cc - select: [:eachClass | eachClass canApplyThemeToInstances] - thenDo: [:eachClass | eachClass applyThemeToInstances]]. Project current restoreDisplay.! From Marcel.Taeumel at hpi.de Wed Aug 3 13:06:42 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 13:51:47 2016 Subject: [squeak-dev] Re: The Trunk: System-mt.861.mcz In-Reply-To: References: Message-ID: <1470229602884-4909403.post@n4.nabble.com> commits-2 wrote > Marcel Taeumel uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-mt.861.mcz > > ==================== Summary ==================== > > Name: System-mt.861 > Author: mt > Time: 3 August 2016, 3:48:48.221245 pm > UUID: 74e725aa-ea12-df48-b3cf-730dba8dccc6 > Ancestors: System-cmm.860 > > Provide progress indication when applying a new UI theme. Use 1000-ms > updates to not slow-down the process unnecessarily. > > =============== Diff against System-cmm.860 =============== > > Item was changed: > ----- Method: UserInterfaceTheme>>apply (in category 'actions') ----- > apply > "Apply this theme to all affected objects. Let classes decide on how to > iterate and call their instances." > > UserInterfaceTheme current: self. > > self class clientClassesToReapply in: [:cc | > cc do: [:eachClass | eachClass applyUserInterfaceTheme]. > + (cc select: [:eachClass | eachClass canApplyThemeToInstances]) > + do: [:eachClass | eachClass applyThemeToInstances] > + displayingProgress: [:eachClass | 'Applying {1} to instances of {2}' > format: {self name. eachClass name}] > + every: 1000 ]. > - cc > - select: [:eachClass | eachClass canApplyThemeToInstances] > - thenDo: [:eachClass | eachClass applyThemeToInstances]]. > > Project current restoreDisplay.! Hey, there. We might want to discuss this. I heard that, when applying a theme, some users had to wait quite some time before they could continue to work in the image, especially when there are thousands of instances. Do you think that this kind of progress indication is sufficient and/or valuable? Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-System-mt-861-mcz-tp4909402p4909403.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Wed Aug 3 14:15:08 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 14:15:12 2016 Subject: [squeak-dev] Re: Merge button missing in MergeBrowser ? In-Reply-To: <1470227051541-4909394.post@n4.nabble.com> References: <1470227051541-4909394.post@n4.nabble.com> Message-ID: Button did not activate when I did the right actions either, so I guess something was seriously wrong. Hopefully you fixed that :-) Best, Karl On Wed, Aug 3, 2016 at 2:24 PM, marcel.taeumel wrote: > Karl Ramberg wrote > > Anybody else seen this issue? > > Merge button not present so I can't merge in changes :-( > > > > Best, > > Karl > > > > > > > > > > merge.PNG (28K) > > <http://forum.world.st/attachment/4909328/0/merge.PNG> > > Anyway, thanks for the pointer. :-) > > http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-178-mcz-td4909393.html > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909394.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/2e2e6ddc/attachment.htm From karlramberg at gmail.com Wed Aug 3 14:16:29 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 14:16:33 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1228.mcz In-Reply-To: <57a1f1b3.c6a6370a.1f814.6b16SMTPIN_ADDED_MISSING@mx.google.com> References: <57a1f1b3.c6a6370a.1f814.6b16SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: The gradientMenu stuff is pretty bad. Best, Karl On Wed, Aug 3, 2016 at 3:28 PM, wrote: > Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-mt.1228.mcz > > ==================== Summary ==================== > > Name: Morphic-mt.1228 > Author: mt > Time: 3 August 2016, 3:28:25.722418 pm > UUID: 24a39e09-443b-0b41-8d8d-3bd49125fe20 > Ancestors: Morphic-mt.1227 > > Some last-minute UI theming fix, which applies to the non-flat look (i.e. > using gradients) in progress bars. Implementation is not perfect but > consistent with LazyListMorph selections, now. > > Note that, in the future, we should untangle the use of #gradientMenu and, > maybe, add specific preferences. > > =============== Diff against Morphic-mt.1227 =============== > > Item was added: > + ----- Method: SystemProgressBarMorph>>barColor (in category 'accessing') > ----- > + barColor > + > + ^ barColor! > > Item was added: > + ----- Method: SystemProgressBarMorph>>barColor: (in category > 'accessing') ----- > + barColor: aColor > + > + | cc fill | > + cc := aColor. > + > + MenuMorph gradientMenu > + ifFalse: [fill := SolidFillStyle color: cc] > + ifTrue: [ > + fill := GradientFillStyle ramp: { > + 0.0 -> cc twiceLighter. > + 1 -> cc twiceDarker }]. > + > + barColor := fill. > + self changed.! > > Item was added: > + ----- Method: SystemProgressBarMorph>>barSize (in category 'accessing') > ----- > + barSize > + > + ^ barSize! > > Item was changed: > ----- Method: SystemProgressBarMorph>>drawOn: (in category 'drawing') > ----- > drawOn: aCanvas > + > + | area fill | > - | area | > super drawOn: aCanvas. > > + self barSize > 0 ifTrue: [ > - barSize > 0 ifTrue: [ > area := self innerBounds. > + area := area origin extent: (self barSize min: area extent > x)@area extent y. > + > + fill := self barColor isColor > + ifTrue: [SolidFillStyle color: self barColor] > + ifFalse: [self barColor]. > + fill isGradientFill ifTrue: [ > + fill origin: area origin. > + fill direction: 0@ area height]. > + > + aCanvas > + fillRectangle: area > + fillStyle: fill > + borderStyle: (SimpleBorder new width: 1; color: > fill asColor muchDarker). > - area := area origin extent: (barSize min: area extent > x)@area extent y. > - aCanvas fillRectangle: area color: barColor > ]. > ! > > Item was changed: > ----- Method: SystemProgressBarMorph>>setDefaultParameters (in category > 'initialization') ----- > setDefaultParameters > "change the receiver's appareance parameters" > > self > color: (self userInterfaceTheme color ifNil: [Color r: > 0.977 g: 0.977 b: 0.977]); > borderStyle: (self userInterfaceTheme borderStyle ifNil: > [BorderStyle default]); > borderColor: (self userInterfaceTheme borderColor ifNil: > [Color transparent]); > + borderWidth: (self userInterfaceTheme borderWidth ifNil: > [0]); > + barColor: (self userInterfaceTheme barColor ifNil: [Color > r: 0.72 g: 0.72 b: 0.9]).! > - borderWidth: (self userInterfaceTheme borderWidth ifNil: > [0]). > - > - barColor := self userInterfaceTheme barColor ifNil: [Color r: 0.72 > g: 0.72 b: 0.9].! > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/ec476131/attachment.htm From karlramberg at gmail.com Wed Aug 3 14:22:48 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 14:22:52 2016 Subject: [squeak-dev] A couple Monokai theme issues Message-ID: The sub menu indicator arrow is black and menu color is very dark gray so it is hard to see. Selection color is used as progress bar indication color. And same color is used as color for progress bar morph. Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/71b6ecba/attachment.htm From Marcel.Taeumel at hpi.de Wed Aug 3 14:04:17 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 14:49:20 2016 Subject: [squeak-dev] Re: A couple Monokai theme issues In-Reply-To: References: Message-ID: <1470233057245-4909419.post@n4.nabble.com> Karl Ramberg wrote > The sub menu indicator arrow is black and menu color is very dark gray so > it is hard to see. > > Selection color is used as progress bar indication color. And same color > is > used as color for progress bar morph. > > Best, > Karl Hi Karl, thanks, the sub-menu indicators need to be themed, too. Maybe color-collected. This affects all other themes. I don't see an issue with the colors in the progress bars, though. I think you refer to the background of the bar not being visible. Still, there no real information lost because you know where the bar will go to reach 100 percent. Hmm... but we need to have a border for the system progress morph if you disable the shadow. This also affects the Solarized themes. Best, Marcel -- View this message in context: http://forum.world.st/A-couple-Monokai-theme-issues-tp4909413p4909419.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Wed Aug 3 14:53:32 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 3 14:53:41 2016 Subject: [squeak-dev] Re: Merge button missing in MergeBrowser ? In-Reply-To: References: <1470227051541-4909394.post@n4.nabble.com> Message-ID: I had the same issue after the theme updates. I tried to work it around by evaluating the button's action manually, but that didn't work out. The changes were not merged. Finally, I decided to load the new package and reverted what I wanted to keep. Since then merging has started to work again. Levente On Wed, 3 Aug 2016, karl ramberg wrote: > Button did not activate when I did the right actions either, so I guess something was seriously wrong.? > Hopefully you fixed that :-) > > Best, > Karl > > On Wed, Aug 3, 2016 at 2:24 PM, marcel.taeumel wrote: > Karl Ramberg wrote > > Anybody else seen this issue? > > Merge button not present so I can't merge in changes :-( > > > > Best, > > Karl > > > > > > > > > > merge.PNG (28K) > > <http://forum.world.st/attachment/4909328/0/merge.PNG> > > Anyway, thanks for the pointer. :-) > http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-178-mcz-td4909393.html > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909394.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > > > From commits at source.squeak.org Wed Aug 3 15:03:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 15:03:15 2016 Subject: [squeak-dev] The Trunk: System-mt.862.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.862.mcz ==================== Summary ==================== Name: System-mt.862 Author: mt Time: 3 August 2016, 5:02:47.934179 pm UUID: d0377fca-6807-b948-b464-e74122834e6f Ancestors: System-mt.861 Implements Karl's suggestions for the colors in Monokai and Solarized themes for progress bars. Also improve the non-shadow scenario. =============== Diff against System-mt.861 =============== Item was changed: ----- Method: MonokaiTheme class>>addDarkDialogs: (in category 'instance creation') ----- addDarkDialogs: theme "self createDark apply." theme set: #borderColor for: #DialogWindow to: self backgroundColor muchDarker; set: #color for: #DialogWindow to: self invisibleColor; set: #titleColor for: #DialogWindow to: self backgroundColor; set: #titleTextColor for: #DialogWindow to: self foregroundColor; set: #textColor for: #DialogWindow to: self yellow; set: #okColor for: #DialogWindow to: self green muchDarker; set: #cancelColor for: #DialogWindow to: self orange muchDarker; set: #buttonColor for: #DialogWindow to: self invisibleColor; set: #selectionModifier for: #DialogWindow to: [ [:c | c adjustBrightness: -0.1 ] ]. "The List Chooser is a dialog, too." theme set: #addColor for: #ListChooser to: self blue; set: #disabledColor for: #ListChooser to: Color transparent. "And the system progress bar." theme + set: #color for: #SystemProgressBarMorph to: self invisibleColor; - set: #color for: #SystemProgressBarMorph to: Color transparent; set: #barColor for: #SystemProgressBarMorph to: self foregroundColor. "And the balloon morphs." theme set: #borderColor for: #NewBalloonMorph to: self backgroundColor muchDarker; set: #color for: #NewBalloonMorph to: self invisibleColor.! Item was changed: ----- Method: MonokaiTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- addDarkMenusAndDockingBars: theme "self createDark apply." theme + set: #borderWidth for: #MenuMorph to: 1; + set: #borderColor for: #MenuMorph to: self invisibleColor; - set: #borderWidth for: #MenuMorph to: 0; set: #color for: #MenuMorph to: self backgroundColor; set: #titleTextColor for: #MenuMorph to: self yellow; set: #lineColor for: #MenuMorph to: self invisibleColor; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. theme set: #textColor for: #MenuItemMorph to: self foregroundColor; set: #selectionColor for: #MenuItemMorph to: self invisibleColor; set: #selectionTextColor for: #MenuItemMorph to: self yellow. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." theme set: #color for: #DockingBarMorph to: self invisibleColor; set: #selectionColor for: #DockingBarItemMorph to: self grayLight; set: #logoColor for: #TheWorldMainDockingBar to: self foregroundColor; set: #selectionLogoColor for: #TheWorldMainDockingBar to: self yellow.! Item was changed: ----- Method: SolarizedTheme class>>addDarkDialogs: (in category 'instance creation') ----- addDarkDialogs: theme "self createDark apply." theme set: #borderColor for: #DialogWindow to: self darkBackground muchDarker; set: #color for: #DialogWindow to: self darkBackgroundHighlights; set: #titleColor for: #DialogWindow to: self darkBackground; set: #titleTextColor for: #DialogWindow to: self darkContentEmphasized; set: #textColor for: #DialogWindow to: self darkContentEmphasizedMore; set: #okColor for: #DialogWindow to: self green; set: #cancelColor for: #DialogWindow to: self orange; set: #buttonColor for: #DialogWindow to: self darkBackgroundHighlights; set: #selectionModifier for: #DialogWindow to: [ [:c | c adjustBrightness: -0.1 ] ]. "The List Chooser is a dialog, too." theme set: #addColor for: #ListChooser to: self blue; set: #disabledColor for: #ListChooser to: Color transparent. "And the system progress bar." theme + set: #color for: #SystemProgressBarMorph to: self darkBackgroundHighlights; + set: #barColor for: #SystemProgressBarMorph to: self darkContentSecondary. - set: #color for: #SystemProgressBarMorph to: Color transparent; - set: #barColor for: #SystemProgressBarMorph to: self darkContentEmphasized. "And the balloon morphs." theme set: #borderColor for: #NewBalloonMorph to: self darkBackground muchDarker; set: #color for: #NewBalloonMorph to: self darkBackgroundHighlights.! Item was changed: ----- Method: SolarizedTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- addDarkMenusAndDockingBars: theme "self createDark apply." theme + set: #borderWidth for: #MenuMorph to: 1; + set: #borderColor for: #MenuMorph to: self darkBackgroundHighlights; - set: #borderWidth for: #MenuMorph to: 0; set: #color for: #MenuMorph to: self darkBackground; set: #titleTextColor for: #MenuMorph to: self darkContentEmphasizedMore; set: #lineColor for: #MenuMorph to: self darkBackgroundHighlights; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. theme set: #textColor for: #MenuItemMorph to: self darkContentEmphasized; set: #selectionColor for: #MenuItemMorph to: self darkBackgroundHighlights; set: #selectionTextColor for: #MenuItemMorph to: self darkContentEmphasizedMore. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." theme set: #color for: #DockingBarMorph to: self darkBackgroundHighlights; set: #selectionColor for: #DockingBarItemMorph to: self darkContentSecondary; set: #logoColor for: #TheWorldMainDockingBar to: self darkContentEmphasized; set: #selectionLogoColor for: #TheWorldMainDockingBar to: self darkContentEmphasizedMore.! Item was changed: ----- Method: SolarizedTheme class>>addLightDialogs: (in category 'instance creation') ----- addLightDialogs: theme "self createLight apply." theme set: #borderColor for: #DialogWindow to: self lightBackground muchDarker; set: #color for: #DialogWindow to: self lightBackgroundHighlights; set: #titleColor for: #DialogWindow to: self lightBackground; set: #titleTextColor for: #DialogWindow to: self lightContentEmphasized; set: #textColor for: #DialogWindow to: self lightContentEmphasizedMore; set: #okColor for: #DialogWindow to: self green; set: #cancelColor for: #DialogWindow to: self orange; set: #buttonColor for: #DialogWindow to: self lightBackgroundHighlights; set: #selectionModifier for: #DialogWindow to: [ [:c | c adjustBrightness: -0.1 ] ]. "The List Chooser is a dialog, too." theme set: #addColor for: #ListChooser to: self blue; set: #disabledColor for: #ListChooser to: Color transparent. "And the system progress bar." theme + set: #color for: #SystemProgressBarMorph to: self lightBackgroundHighlights; + set: #barColor for: #SystemProgressBarMorph to: self lightContentSecondary. - set: #color for: #SystemProgressBarMorph to: Color transparent; - set: #barColor for: #SystemProgressBarMorph to: self lightContentEmphasized. "And the balloon morphs." theme set: #borderColor for: #NewBalloonMorph to: self lightBackground muchDarker; set: #color for: #NewBalloonMorph to: self lightBackgroundHighlights.! Item was changed: ----- Method: SolarizedTheme class>>addLightMenusAndDockingBars: (in category 'instance creation') ----- addLightMenusAndDockingBars: theme "self createLight apply." theme + set: #borderWidth for: #MenuMorph to: 1; + set: #borderColor for: #MenuMorph to: self lightBackgroundHighlights; - set: #borderWidth for: #MenuMorph to: 0; set: #color for: #MenuMorph to: self lightBackground; set: #titleTextColor for: #MenuMorph to: self lightContentEmphasizedMore; set: #lineColor for: #MenuMorph to: self lightBackgroundHighlights; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. theme set: #textColor for: #MenuItemMorph to: self lightContentEmphasized; set: #selectionColor for: #MenuItemMorph to: self lightBackgroundHighlights; set: #selectionTextColor for: #MenuItemMorph to: self lightContentEmphasizedMore. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." theme set: #color for: #DockingBarMorph to: self lightBackgroundHighlights; set: #selectionColor for: #DockingBarItemMorph to: self lightContentSecondary; set: #logoColor for: #TheWorldMainDockingBar to: self lightContentEmphasized; set: #selectionLogoColor for: #TheWorldMainDockingBar to: self lightContentEmphasizedMore.! From Marcel.Taeumel at hpi.de Wed Aug 3 14:18:55 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 15:03:59 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1228.mcz In-Reply-To: References: Message-ID: <1470233935967-4909424.post@n4.nabble.com> Karl Ramberg wrote > The gradientMenu stuff is pretty bad. > > Best, > Karl > > On Wed, Aug 3, 2016 at 3:28 PM, < > commits@.squeak > > wrote: > >> Marcel Taeumel uploaded a new version of Morphic to project The Trunk: >> http://source.squeak.org/trunk/Morphic-mt.1228.mcz >> >> ==================== Summary ==================== >> >> Name: Morphic-mt.1228 >> Author: mt >> Time: 3 August 2016, 3:28:25.722418 pm >> UUID: 24a39e09-443b-0b41-8d8d-3bd49125fe20 >> Ancestors: Morphic-mt.1227 >> >> Some last-minute UI theming fix, which applies to the non-flat look (i.e. >> using gradients) in progress bars. Implementation is not perfect but >> consistent with LazyListMorph selections, now. >> >> Note that, in the future, we should untangle the use of #gradientMenu >> and, >> maybe, add specific preferences. >> >> =============== Diff against Morphic-mt.1227 =============== >> >> Item was added: >> + ----- Method: SystemProgressBarMorph>>barColor (in category >> 'accessing') >> ----- >> + barColor >> + >> + ^ barColor! >> >> Item was added: >> + ----- Method: SystemProgressBarMorph>>barColor: (in category >> 'accessing') ----- >> + barColor: aColor >> + >> + | cc fill | >> + cc := aColor. >> + >> + MenuMorph gradientMenu >> + ifFalse: [fill := SolidFillStyle color: cc] >> + ifTrue: [ >> + fill := GradientFillStyle ramp: { >> + 0.0 -> cc twiceLighter. >> + 1 -> cc twiceDarker }]. >> + >> + barColor := fill. >> + self changed.! >> >> Item was added: >> + ----- Method: SystemProgressBarMorph>>barSize (in category 'accessing') >> ----- >> + barSize >> + >> + ^ barSize! >> >> Item was changed: >> ----- Method: SystemProgressBarMorph>>drawOn: (in category 'drawing') >> ----- >> drawOn: aCanvas >> + >> + | area fill | >> - | area | >> super drawOn: aCanvas. >> >> + self barSize > 0 ifTrue: [ >> - barSize > 0 ifTrue: [ >> area := self innerBounds. >> + area := area origin extent: (self barSize min: area >> extent >> x)@area extent y. >> + >> + fill := self barColor isColor >> + ifTrue: [SolidFillStyle color: self barColor] >> + ifFalse: [self barColor]. >> + fill isGradientFill ifTrue: [ >> + fill origin: area origin. >> + fill direction: 0@ area height]. >> + >> + aCanvas >> + fillRectangle: area >> + fillStyle: fill >> + borderStyle: (SimpleBorder new width: 1; color: >> fill asColor muchDarker). >> - area := area origin extent: (barSize min: area extent >> x)@area extent y. >> - aCanvas fillRectangle: area color: barColor >> ]. >> ! >> >> Item was changed: >> ----- Method: SystemProgressBarMorph>>setDefaultParameters (in category >> 'initialization') ----- >> setDefaultParameters >> "change the receiver's appareance parameters" >> >> self >> color: (self userInterfaceTheme color ifNil: [Color r: >> 0.977 g: 0.977 b: 0.977]); >> borderStyle: (self userInterfaceTheme borderStyle ifNil: >> [BorderStyle default]); >> borderColor: (self userInterfaceTheme borderColor ifNil: >> [Color transparent]); >> + borderWidth: (self userInterfaceTheme borderWidth ifNil: >> [0]); >> + barColor: (self userInterfaceTheme barColor ifNil: [Color >> r: 0.72 g: 0.72 b: 0.9]).! >> - borderWidth: (self userInterfaceTheme borderWidth ifNil: >> [0]). >> - >> - barColor := self userInterfaceTheme barColor ifNil: [Color r: >> 0.72 >> g: 0.72 b: 0.9].! >> >> >> Can you please elaborate on this comment? :-) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1228-mcz-tp4909399p4909424.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Aug 3 14:23:31 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 15:08:34 2016 Subject: [squeak-dev] Re: Merge button missing in MergeBrowser ? In-Reply-To: References: <1470227051541-4909394.post@n4.nabble.com> Message-ID: <1470234211357-4909425.post@n4.nabble.com> Levente Uzonyi wrote > I had the same issue after the theme updates. I tried to work it around by > evaluating the button's action manually, but that didn't work out. The > changes were not merged. Finally, I decided to load the new package and > reverted what I wanted to keep. Since then merging has started to work > again. > > Levente > > On Wed, 3 Aug 2016, karl ramberg wrote: > >> Button did not activate when I did the right actions either, so I guess >> something was seriously wrong.? >> Hopefully you fixed that :-) >> >> Best, >> Karl >> >> On Wed, Aug 3, 2016 at 2:24 PM, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >> Karl Ramberg wrote >> > Anybody else seen this issue? >> > Merge button not present so I can't merge in changes :-( >> > >> > Best, >> > Karl >> > >> > >> > >> > >> > merge.PNG (28K) >> > <http://forum.world.st/attachment/4909328/0/merge.PNG> >> >> Anyway, thanks for the pointer. :-) >> http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-178-mcz-td4909393.html >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909394.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> >> >> I noticed that tools provide the #enabled selector but omit to send notifications if that state changes. Yes, I cleaned-up some mess in PluggableButtonMorph, which not reveal that the tools omit to communite their state updates to the buttons correctly. Let's find them all. ;-) Here: I am looking the the places is MCMergeBrowser to send "self changed: #canMerge". Shouldn't be that difficult. Best, Marcel -- View this message in context: http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909425.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Wed Aug 3 15:10:44 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 3 15:10:51 2016 Subject: [squeak-dev] The Inbox: Network-ul.180.mcz In-Reply-To: References: Message-ID: Hi Chris, Thanks for tracking this down. I'll write some tests to see if the VM actually supports half-closed connections properly when I have time. If not, I'll revert this change before the release. Levente On Tue, 2 Aug 2016, Chris Muller wrote: > Hi Levente, I've narrowed Magma's problem with these changes down to > one line in Socket>>#waitForSendDoneFor:. If I revert the call to > #isThisEndConnected back to #isConnected, Magma's test suite works > fine. > > waitForSendDoneFor: timeout > "Wait up until the given deadline for the current send operation > to complete. Return true if it completes by the deadline, false if > not." > > | deadline timeleft | > deadline := Time millisecondClockValue + (timeout * 1000) truncated. > [ > (self primSocketSendDone: socketHandle) ifTrue: [ ^true ]. > self isThisEndConnected ifFalse: [ ^false ]. "<---- want to > go back to #isConnected for this line" > (timeleft := deadline - Time millisecondClockValue) <= 0 > ifTrue: [ ^false ]. > writeSemaphore waitTimeoutMSecs: timeleft ] repeat > > It affects Magma's High-Availability test cases, which involve > terminating the server while its busy serving clients. For each > release of Squeak, I put out a new release of Magma that works OOTB. > I would very much like to be able to do that this time too, without > confusion of a changeset / modified system for Magma users. Would you > be willing to revert this one line to buy us time to explore this > change together under greater scrutiny for the duration of the next > release of Squeak, instead of this release? > > Best, > Chris > > On Sun, Jul 31, 2016 at 8:39 PM, Levente Uzonyi wrote: >> Hi Chris, >> >> I decide to move this to the Trunk because the feature freeze is here. This >> should also help getting more feedback. :) >> >> Levente >> >> >> On Mon, 25 Jul 2016, Chris Muller wrote: >> >>> Hi Levente, Magma's test cases can't seem to get to the end with >>> this.. I haven't investigated yet.. >>> >>> On Mon, Jul 25, 2016 at 2:40 PM, Levente Uzonyi >>> wrote: >>>> >>>> Hi All, >>>> >>>> This is something to test on all platforms before push. I've used it on >>>> 64-bit linux without problems so far. >>>> >>>> Levente >>>> >>>> >>>> On Mon, 25 Jul 2016, commits@source.squeak.org wrote: >>>> >>>>> Levente Uzonyi uploaded a new version of Network to project The Inbox: >>>>> http://source.squeak.org/inbox/Network-ul.180.mcz >>>>> >>>>> ==================== Summary ==================== >>>>> >>>>> Name: Network-ul.180 >>>>> Author: ul >>>>> Time: 25 July 2016, 8:40:01.001452 pm >>>>> UUID: 2f23a55c-fec5-41ac-95bd-6a8c2458be95 >>>>> Ancestors: Network-nice.179 >>>>> >>>>> Socket changes: >>>>> - fixed the comment of #isOtherEndConnected and #isThisEndConnected >>>>> - do not slice the data (TCP) in the image in #sendData:. Let the VM, >>>>> the >>>>> kernel, the hardware deal with that. >>>>> - use #isOtherEndConnected when receiving data, and #isThisEndConnected >>>>> when sending data instead of #isConnected >>>>> - move away from #milliseconds:since:, since we have a clock that won't >>>>> roll over >>>>> >>>>> =============== Diff against Network-nice.179 =============== >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>closeAndDestroy: (in category 'connection >>>>> open/close') ----- >>>>> closeAndDestroy: timeoutSeconds >>>>> "First, try to close this connection gracefully. If the close >>>>> attempt fails or times out, abort the connection. In either case, >>>>> destroy >>>>> the socket. Do nothing if the socket has already been destroyed (i.e., >>>>> if >>>>> its socketHandle is nil)." >>>>> >>>>> + socketHandle ifNil: [ ^self ]. >>>>> + self isThisEndConnected ifTrue: [ >>>>> + self close. "Close this end." ]. >>>>> + (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ >>>>> + "The other end has not closed the connect yet, so we >>>>> will >>>>> just abort it." >>>>> + self primSocketAbortConnection: socketHandle ]. >>>>> + self destroy! >>>>> - socketHandle ifNotNil: [ >>>>> - self isConnected ifTrue: [ >>>>> - self close. "close this end" >>>>> - (self waitForDisconnectionFor: >>>>> timeoutSeconds) ifFalse: [ >>>>> - "The other end didn't >>>>> close so we just abort the connection" >>>>> - self >>>>> primSocketAbortConnection: socketHandle]]. >>>>> - self destroy]. >>>>> - ! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>discardReceivedData (in category 'receiving') >>>>> ----- >>>>> discardReceivedData >>>>> "Discard any data received up until now, and return the number >>>>> of >>>>> bytes discarded." >>>>> >>>>> | buf totalBytesDiscarded | >>>>> buf := String new: 10000. >>>>> totalBytesDiscarded := 0. >>>>> + [self isOtherEndConnected and: [self dataAvailable]] whileTrue: >>>>> [ >>>>> - [self isConnected and: [self dataAvailable]] whileTrue: [ >>>>> totalBytesDiscarded := >>>>> totalBytesDiscarded + (self receiveDataInto: >>>>> buf)]. >>>>> ^ totalBytesDiscarded >>>>> ! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>isOtherEndConnected (in category 'queries') ----- >>>>> isOtherEndConnected >>>>> + "Return true if this socket is connected, or this end has closed >>>>> the connection but not the other end, so we can still receive data." >>>>> - "Return true if this socket is connected, or this end has closed >>>>> the connection but not the other end, so we can still send data." >>>>> >>>>> | state | >>>>> socketHandle ifNil: [ ^false ]. >>>>> (state := self primSocketConnectionStatus: socketHandle) == >>>>> Connected ifTrue: [ ^true ]. >>>>> ^state == ThisEndClosed >>>>> ! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>isThisEndConnected (in category 'queries') ----- >>>>> isThisEndConnected >>>>> + "Return true if this socket is connected, other the other end >>>>> has >>>>> closed the connection but not this end, so we can still send data." >>>>> - "Return true if this socket is connected, other the other end >>>>> has >>>>> closed the connection but not this end, so we can still receive data." >>>>> >>>>> | state | >>>>> socketHandle ifNil: [ ^false ]. >>>>> (state := self primSocketConnectionStatus: socketHandle) == >>>>> Connected ifTrue: [ ^true ]. >>>>> ^state == OtherEndClosed >>>>> ! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>sendData: (in category 'sending') ----- >>>>> sendData: aStringOrByteArray >>>>> "Send all of the data in the given array, even if it requires >>>>> multiple calls to send it all. Return the number of bytes sent." >>>>> >>>>> "An experimental version use on slow lines: Longer timeout and >>>>> smaller writes to try to avoid spurious timeouts." >>>>> >>>>> | bytesSent bytesToSend count | >>>>> bytesToSend := aStringOrByteArray size. >>>>> bytesSent := 0. >>>>> [bytesSent < bytesToSend] whileTrue: [ >>>>> (self waitForSendDoneFor: 60) >>>>> ifFalse: [ConnectionTimedOut signal: 'send data >>>>> timeout; data not sent']. >>>>> count := self primSocket: socketHandle >>>>> sendData: aStringOrByteArray >>>>> startIndex: bytesSent + 1 >>>>> + count: bytesToSend - bytesSent. >>>>> - count: (bytesToSend - bytesSent min: >>>>> DefaultSendBufferSize). >>>>> bytesSent := bytesSent + count]. >>>>> >>>>> ^ bytesSent >>>>> ! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>waitForConnectionFor:ifTimedOut:ifRefused: (in >>>>> category 'waiting') ----- >>>>> waitForConnectionFor: timeout ifTimedOut: timeoutBlock ifRefused: >>>>> refusedBlock >>>>> "Wait up until the given deadline for a connection to be >>>>> established. Return true if it is established by the deadline, false if >>>>> not." >>>>> >>>>> + | deadline timeLeft status | >>>>> + deadline := Time millisecondClockValue + (timeout * 1000) >>>>> truncated. >>>>> + (status := self primSocketConnectionStatus: socketHandle) == >>>>> Connected ifTrue: [^true]. >>>>> + [ (status == WaitingForConnection) and: [ (timeLeft := deadline >>>>> - >>>>> Time millisecondClockValue) > 0 ] ] >>>>> - | startTime msecsDelta msecsEllapsed status | >>>>> - startTime := Time millisecondClockValue. >>>>> - msecsDelta := (timeout * 1000) truncated. >>>>> - status := self primSocketConnectionStatus: socketHandle. >>>>> - status = Connected ifTrue: [^true]. >>>>> - [(status = WaitingForConnection) and: [(msecsEllapsed := Time >>>>> millisecondsSince: startTime) < msecsDelta]] >>>>> whileTrue: [ >>>>> + semaphore waitTimeoutMSecs: timeLeft. >>>>> + status := self primSocketConnectionStatus: >>>>> socketHandle ]. >>>>> + status == Connected ifTrue: [ ^true ]. >>>>> + status == WaitingForConnection >>>>> + ifTrue: [ timeoutBlock value ] >>>>> + ifFalse: [ refusedBlock value ]. >>>>> + ^false! >>>>> - semaphore waitTimeoutMSecs: msecsDelta - >>>>> msecsEllapsed. >>>>> - status := self primSocketConnectionStatus: >>>>> socketHandle]. >>>>> - status = Connected >>>>> - ifFalse: [ >>>>> - status = WaitingForConnection >>>>> - ifTrue: [timeoutBlock value] >>>>> - ifFalse: [refusedBlock value]. >>>>> - ^false]. >>>>> - ^ true! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>waitForConnectionUntil: (in category 'waiting') >>>>> ----- >>>>> waitForConnectionUntil: deadline >>>>> "Wait up until the given deadline for a connection to be >>>>> established. Return true if it is established by the deadline, false if >>>>> not." >>>>> >>>>> + | status timeLeft | >>>>> - | status waitTime | >>>>> [ >>>>> (status := self primSocketConnectionStatus: >>>>> socketHandle) >>>>> == Connected ifTrue: [ ^true ]. >>>>> status == WaitingForConnection ifFalse: [ ^false ]. >>>>> + (timeLeft := deadline - Time millisecondClockValue) <= 0 >>>>> ifTrue: [ ^false ]. >>>>> + semaphore waitTimeoutMSecs: timeLeft ] repeat! >>>>> - (waitTime := deadline - Time millisecondClockValue) > 0 >>>>> ifFalse: [ ^false ]. >>>>> - semaphore waitTimeoutMSecs: waitTime ] repeat! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category >>>>> 'waiting') ----- >>>>> waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock >>>>> "Wait for the given nr of seconds for data to arrive." >>>>> >>>>> + | deadline timeLeft | >>>>> - | startTime msecsDelta | >>>>> socketHandle ifNil: [ ^closedBlock value ]. >>>>> + deadline := Time millisecondClockValue + (timeout * 1000) >>>>> truncated. >>>>> - startTime := Time millisecondClockValue. >>>>> - msecsDelta := (timeout * 1000) truncated. >>>>> [ >>>>> (self primSocketReceiveDataAvailable: socketHandle) >>>>> ifTrue: [ ^self ]. >>>>> + self isOtherEndConnected ifFalse: [ ^closedBlock value >>>>> ]. >>>>> + (timeLeft := deadline - Time millisecondClockValue) <= 0 >>>>> ifTrue: [ ^timedOutBlock value ]. >>>>> - self isConnected ifFalse: [ ^closedBlock value ]. >>>>> - (Time millisecondsSince: startTime) < msecsDelta >>>>> ifFalse: >>>>> [ ^timedOutBlock value ]. >>>>> "Providing a maximum for the time for waiting is a >>>>> workaround for a VM bug which causes sockets waiting for data forever in >>>>> some rare cases, because the semaphore doesn't get signaled. Remove the >>>>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>>>> fixed." >>>>> readSemaphore waitTimeoutMSecs: >>>>> + (timeLeft min: self class >>>>> maximumReadSemaphoreWaitTimeout) ] repeat! >>>>> - (msecsDelta - (Time millisecondsSince: >>>>> startTime) >>>>> min: self class maximumReadSemaphoreWaitTimeout) ] repeat! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') >>>>> ----- >>>>> waitForDataIfClosed: closedBlock >>>>> "Wait indefinitely for data to arrive. This method will block >>>>> until >>>>> data is available or the socket is closed." >>>>> >>>>> socketHandle ifNil: [ ^closedBlock value ]. >>>>> [ >>>>> (self primSocketReceiveDataAvailable: socketHandle) >>>>> ifTrue: [ ^self ]. >>>>> + self isOtherEndConnected ifFalse: [ ^closedBlock value >>>>> ]. >>>>> - self isConnected ifFalse: [ ^closedBlock value ]. >>>>> "ul 8/13/2014 21:16 >>>>> Providing a maximum for the time for waiting is a >>>>> workaround for a VM bug which >>>>> causes sockets waiting for data forever in some rare >>>>> cases, because the semaphore >>>>> doesn't get signaled. Replace the ""waitTimeoutMSecs: >>>>> self class maximumReadSemaphoreWaitTimeout"" >>>>> part with ""wait"" when the bug is fixed." >>>>> readSemaphore waitTimeoutMSecs: self class >>>>> maximumReadSemaphoreWaitTimeout ] repeat! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting') >>>>> ----- >>>>> waitForDisconnectionFor: timeout >>>>> "Wait for the given nr of seconds for the connection to be >>>>> broken. >>>>> Return true if it is broken by the deadline, false if not. >>>>> The client should know the connection is really going to be >>>>> closed >>>>> (e.g., because he has called 'close' to send a close request to >>>>> the other end) >>>>> before calling this method." >>>>> >>>>> + | deadline | >>>>> + deadline := Time millisecondClockValue + (timeout * 1000) >>>>> truncated. >>>>> + [ self isOtherEndConnected and: [ deadline - Time >>>>> millisecondClockValue > 0 ] ] >>>>> + whileTrue: [ >>>>> + self discardReceivedData. >>>>> + "Providing a maximum for the time for waiting is >>>>> a >>>>> workaround for a VM bug which causes sockets waiting for data forever in >>>>> some rare cases, because the semaphore doesn't get signaled. Remove the >>>>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>>>> fixed." >>>>> + readSemaphore waitTimeoutMSecs: >>>>> + (deadline - Time millisecondClockValue >>>>> min: self class maximumReadSemaphoreWaitTimeout) ]. >>>>> + ^self isOtherEndConnected! >>>>> - | startTime msecsDelta status | >>>>> - startTime := Time millisecondClockValue. >>>>> - msecsDelta := (timeout * 1000) truncated. >>>>> - status := self primSocketConnectionStatus: socketHandle. >>>>> - [((status == Connected) or: [(status == ThisEndClosed)]) and: >>>>> - [(Time millisecondsSince: startTime) < msecsDelta]] whileTrue: >>>>> [ >>>>> - self discardReceivedData. >>>>> - "Providing a maximum for the time for waiting is a >>>>> workaround for a VM bug which causes sockets waiting for data forever in >>>>> some rare cases, because the semaphore doesn't get signaled. Remove the >>>>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>>>> fixed." >>>>> - readSemaphore waitTimeoutMSecs: >>>>> - (msecsDelta - (Time millisecondsSince: >>>>> startTime) >>>>> min: self class maximumReadSemaphoreWaitTimeout). >>>>> - status := self primSocketConnectionStatus: >>>>> socketHandle]. >>>>> - ^ status ~= Connected! >>>>> >>>>> Item was changed: >>>>> ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') ----- >>>>> waitForSendDoneFor: timeout >>>>> "Wait up until the given deadline for the current send operation >>>>> to complete. Return true if it completes by the deadline, false if not." >>>>> >>>>> + | deadline timeleft | >>>>> + deadline := Time millisecondClockValue + (timeout * 1000) >>>>> truncated. >>>>> - | startTime msecsDelta msecsEllapsed | >>>>> - startTime := Time millisecondClockValue. >>>>> - msecsDelta := (timeout * 1000) truncated. >>>>> [ >>>>> (self primSocketSendDone: socketHandle) ifTrue: [ ^true >>>>> ]. >>>>> + self isThisEndConnected ifFalse: [ ^false ]. >>>>> + (timeleft := deadline - Time millisecondClockValue) <= 0 >>>>> ifTrue: [ ^false ]. >>>>> + writeSemaphore waitTimeoutMSecs: timeleft ] repeat! >>>>> - self isConnected ifFalse: [ ^false ]. >>>>> - (msecsEllapsed := Time millisecondsSince: startTime) < >>>>> msecsDelta ifFalse: [ ^false ]. >>>>> - writeSemaphore waitTimeoutMSecs: msecsDelta - >>>>> msecsEllapsed ] repeat! >>>>> >>>>> >>>>> >>>> >>> >>> >> > > From commits at source.squeak.org Wed Aug 3 15:12:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 15:12:47 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.643.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.643.mcz ==================== Summary ==================== Name: Monticello-mt.643 Author: mt Time: 3 August 2016, 5:12:29.133179 pm UUID: 75d22f47-6cf5-5d44-9416-dd46377863ec Ancestors: Monticello-mt.642 Fixes the merge button in MC's merge browser. =============== Diff against Monticello-mt.642 =============== Item was changed: ----- Method: MCMergeBrowser>>chooseAllNewerConflicts (in category 'as yet unclassified') ----- chooseAllNewerConflicts conflicts do: [ :ea | ea chooseNewer ]. + self changed: #text; changed: #list; changed: #canMerge.! - self changed: #text; changed: #list.! Item was changed: ----- Method: MCMergeBrowser>>chooseAllOlderConflicts (in category 'as yet unclassified') ----- chooseAllOlderConflicts conflicts do: [ :ea | ea chooseOlder ]. + self changed: #text; changed: #list; changed: #canMerge.! - self changed: #text; changed: #list.! Item was changed: ----- Method: MCMergeBrowser>>chooseAllSameAST (in category 'as yet unclassified') ----- chooseAllSameAST conflicts do: [ :ea | ea chooseSameAST ]. + self changed: #text; changed: #list; changed: #canMerge.! - self changed: #text; changed: #list.! Item was changed: ----- Method: MCMergeBrowser>>chooseAllUnchosenLocal (in category 'as yet unclassified') ----- chooseAllUnchosenLocal conflicts do: [ :ea | ea isResolved ifFalse: [ ea chooseLocal ] ]. + self changed: #text; changed: #list; changed: #canMerge.! - self changed: #text; changed: #list.! Item was changed: ----- Method: MCMergeBrowser>>chooseAllUnchosenRemote (in category 'as yet unclassified') ----- chooseAllUnchosenRemote conflicts do: [ :ea | ea isResolved ifFalse: [ ea chooseRemote ] ]. + self changed: #text; changed: #list; changed: #canMerge.! - self changed: #text; changed: #list.! Item was changed: ----- Method: MCMergeBrowser>>chooseLocal (in category 'as yet unclassified') ----- chooseLocal self conflictSelectionDo: [selection chooseLocal. + self changed: #text; changed: #list; changed: #canMerge]. - self changed: #text; changed: #list]. self selectNextUnresolvedConflict! Item was changed: ----- Method: MCMergeBrowser>>chooseRemote (in category 'as yet unclassified') ----- chooseRemote self conflictSelectionDo: [selection chooseRemote. + self changed: #text; changed: #list; changed: #canMerge]. - self changed: #text; changed: #list]. self selectNextUnresolvedConflict! Item was changed: ----- Method: MCMergeBrowser>>clearChoice (in category 'as yet unclassified') ----- clearChoice self conflictSelectionDo: [selection clearChoice. + self changed: #text; changed: #list; changed: #canMerge]! - self changed: #text; changed: #list]! From Marcel.Taeumel at hpi.de Wed Aug 3 14:56:56 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 15:42:01 2016 Subject: [squeak-dev] Re: Latest image from build http://build.squeak.org/ failing ? In-Reply-To: <1470226276598-4909389.post@n4.nabble.com> References: <1470226276598-4909389.post@n4.nabble.com> Message-ID: <1470236216750-4909440.post@n4.nabble.com> marcel.taeumel wrote > > Karl Ramberg wrote >> Seems build #698 is latest image that is ok. >> Build #699 drops download size by ~6 MB and is quite behind on the >> updates. >> >> Best, >> Karl >> >> On Wed, Aug 3, 2016 at 1:57 PM, karl ramberg < >> karlramberg@ >> > wrote: >> >>> Latest builds seem to be failing and latest successful build is quite >>> behind >>> >>> http://build.squeak.org/job/Trunk/711/console >>> >>> Best, >>> Karl >>> > Hi Karl, > > this is because of the instvar-update-phenomenon affecting the system > progress bar morph. We need a new reference image for the CI server. > > Tobias? :) > > Best, > Marcel I updated the reference update. The next CI run should produce a new trunk image. Best, Marcel -- View this message in context: http://forum.world.st/Latest-image-from-build-http-build-squeak-org-failing-tp4909360p4909440.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Wed Aug 3 16:31:17 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 16:31:23 2016 Subject: [squeak-dev] Re: Latest image from build http://build.squeak.org/ failing ? In-Reply-To: <1470236216750-4909440.post@n4.nabble.com> References: <1470226276598-4909389.post@n4.nabble.com> <1470236216750-4909440.post@n4.nabble.com> Message-ID: Great :-) Best, Karl On Wed, Aug 3, 2016 at 4:56 PM, marcel.taeumel wrote: > marcel.taeumel wrote > > > > Karl Ramberg wrote > >> Seems build #698 is latest image that is ok. > >> Build #699 drops download size by ~6 MB and is quite behind on the > >> updates. > >> > >> Best, > >> Karl > >> > >> On Wed, Aug 3, 2016 at 1:57 PM, karl ramberg < > > >> karlramberg@ > > >> > wrote: > >> > >>> Latest builds seem to be failing and latest successful build is quite > >>> behind > >>> > >>> http://build.squeak.org/job/Trunk/711/console > >>> > >>> Best, > >>> Karl > >>> > > Hi Karl, > > > > this is because of the instvar-update-phenomenon affecting the system > > progress bar morph. We need a new reference image for the CI server. > > > > Tobias? :) > > > > Best, > > Marcel > > I updated the reference update. The next CI run should produce a new trunk > image. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Latest-image-from-build-http-build-squeak-org-failing-tp4909360p4909440.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/3c52ac03/attachment.htm From karlramberg at gmail.com Wed Aug 3 16:36:53 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 16:36:58 2016 Subject: [squeak-dev] Re: Merge button missing in MergeBrowser ? In-Reply-To: <1470234211357-4909425.post@n4.nabble.com> References: <1470227051541-4909394.post@n4.nabble.com> <1470234211357-4909425.post@n4.nabble.com> Message-ID: I saw you did some changes in http://source.squeak.org/trunk/Monticello-mt.643.mcz When I load that before doing updates I can merge in changes again :-) Best, Karl On Wed, Aug 3, 2016 at 4:23 PM, marcel.taeumel wrote: > Levente Uzonyi wrote > > I had the same issue after the theme updates. I tried to work it around > by > > evaluating the button's action manually, but that didn't work out. The > > changes were not merged. Finally, I decided to load the new package and > > reverted what I wanted to keep. Since then merging has started to work > > again. > > > > Levente > > > > On Wed, 3 Aug 2016, karl ramberg wrote: > > > >> Button did not activate when I did the right actions either, so I guess > >> something was seriously wrong. > >> Hopefully you fixed that :-) > >> > >> Best, > >> Karl > >> > >> On Wed, Aug 3, 2016 at 2:24 PM, marcel.taeumel < > > > Marcel.Taeumel@ > > > > wrote: > >> Karl Ramberg wrote > >> > Anybody else seen this issue? > >> > Merge button not present so I can't merge in changes :-( > >> > > >> > Best, > >> > Karl > >> > > >> > > >> > > >> > > >> > merge.PNG (28K) > >> > <http://forum.world.st/attachment/4909328/0/merge.PNG> > >> > >> Anyway, thanks for the pointer. :-) > >> > http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-178-mcz-td4909393.html > >> > >> Best, > >> Marcel > >> > >> > >> > >> -- > >> View this message in context: > >> > http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909394.html > >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > >> > >> > >> > >> > > I noticed that tools provide the #enabled selector but omit to send > notifications if that state changes. Yes, I cleaned-up some mess in > PluggableButtonMorph, which not reveal that the tools omit to communite > their state updates to the buttons correctly. > > Let's find them all. ;-) Here: I am looking the the places is > MCMergeBrowser > to send "self changed: #canMerge". Shouldn't be that difficult. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909425.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/5b22d3b6/attachment.htm From karlramberg at gmail.com Wed Aug 3 16:41:35 2016 From: karlramberg at gmail.com (karl ramberg) Date: Wed Aug 3 16:41:44 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1228.mcz In-Reply-To: <1470233935967-4909424.post@n4.nabble.com> References: <1470233935967-4909424.post@n4.nabble.com> Message-ID: I have looked at the hard coded stuff for menu3d and gradientMenu before and those methods where quite messy and had lot's of cross dependency on the preferences. I hope we can untangle that with the themes so it will be less hard coded values. Best, Karl On Wed, Aug 3, 2016 at 4:18 PM, marcel.taeumel wrote: > Karl Ramberg wrote > > The gradientMenu stuff is pretty bad. > > > > Best, > > Karl > > > > On Wed, Aug 3, 2016 at 3:28 PM, < > > > commits@.squeak > > > > wrote: > > > >> Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > >> http://source.squeak.org/trunk/Morphic-mt.1228.mcz > >> > >> ==================== Summary ==================== > >> > >> Name: Morphic-mt.1228 > >> Author: mt > >> Time: 3 August 2016, 3:28:25.722418 pm > >> UUID: 24a39e09-443b-0b41-8d8d-3bd49125fe20 > >> Ancestors: Morphic-mt.1227 > >> > >> Some last-minute UI theming fix, which applies to the non-flat look > (i.e. > >> using gradients) in progress bars. Implementation is not perfect but > >> consistent with LazyListMorph selections, now. > >> > >> Note that, in the future, we should untangle the use of #gradientMenu > >> and, > >> maybe, add specific preferences. > >> > >> =============== Diff against Morphic-mt.1227 =============== > >> > >> Item was added: > >> + ----- Method: SystemProgressBarMorph>>barColor (in category > >> 'accessing') > >> ----- > >> + barColor > >> + > >> + ^ barColor! > >> > >> Item was added: > >> + ----- Method: SystemProgressBarMorph>>barColor: (in category > >> 'accessing') ----- > >> + barColor: aColor > >> + > >> + | cc fill | > >> + cc := aColor. > >> + > >> + MenuMorph gradientMenu > >> + ifFalse: [fill := SolidFillStyle color: cc] > >> + ifTrue: [ > >> + fill := GradientFillStyle ramp: { > >> + 0.0 -> cc twiceLighter. > >> + 1 -> cc twiceDarker }]. > >> + > >> + barColor := fill. > >> + self changed.! > >> > >> Item was added: > >> + ----- Method: SystemProgressBarMorph>>barSize (in category > 'accessing') > >> ----- > >> + barSize > >> + > >> + ^ barSize! > >> > >> Item was changed: > >> ----- Method: SystemProgressBarMorph>>drawOn: (in category 'drawing') > >> ----- > >> drawOn: aCanvas > >> + > >> + | area fill | > >> - | area | > >> super drawOn: aCanvas. > >> > >> + self barSize > 0 ifTrue: [ > >> - barSize > 0 ifTrue: [ > >> area := self innerBounds. > >> + area := area origin extent: (self barSize min: area > >> extent > >> x)@area extent y. > >> + > >> + fill := self barColor isColor > >> + ifTrue: [SolidFillStyle color: self barColor] > >> + ifFalse: [self barColor]. > >> + fill isGradientFill ifTrue: [ > >> + fill origin: area origin. > >> + fill direction: 0@ area height]. > >> + > >> + aCanvas > >> + fillRectangle: area > >> + fillStyle: fill > >> + borderStyle: (SimpleBorder new width: 1; color: > >> fill asColor muchDarker). > >> - area := area origin extent: (barSize min: area extent > >> x)@area extent y. > >> - aCanvas fillRectangle: area color: barColor > >> ]. > >> ! > >> > >> Item was changed: > >> ----- Method: SystemProgressBarMorph>>setDefaultParameters (in > category > >> 'initialization') ----- > >> setDefaultParameters > >> "change the receiver's appareance parameters" > >> > >> self > >> color: (self userInterfaceTheme color ifNil: [Color r: > >> 0.977 g: 0.977 b: 0.977]); > >> borderStyle: (self userInterfaceTheme borderStyle ifNil: > >> [BorderStyle default]); > >> borderColor: (self userInterfaceTheme borderColor ifNil: > >> [Color transparent]); > >> + borderWidth: (self userInterfaceTheme borderWidth ifNil: > >> [0]); > >> + barColor: (self userInterfaceTheme barColor ifNil: > [Color > >> r: 0.72 g: 0.72 b: 0.9]).! > >> - borderWidth: (self userInterfaceTheme borderWidth ifNil: > >> [0]). > >> - > >> - barColor := self userInterfaceTheme barColor ifNil: [Color r: > >> 0.72 > >> g: 0.72 b: 0.9].! > >> > >> > >> > > Can you please elaborate on this comment? :-) > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/The-Trunk-Morphic-mt-1228-mcz-tp4909399p4909424.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160803/43ba9243/attachment.htm From Marcel.Taeumel at hpi.de Wed Aug 3 17:05:58 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 3 17:51:04 2016 Subject: [squeak-dev] Re: Merge button missing in MergeBrowser ? In-Reply-To: References: <1470227051541-4909394.post@n4.nabble.com> <1470234211357-4909425.post@n4.nabble.com> Message-ID: <1470243958966-4909468.post@n4.nabble.com> Karl Ramberg wrote > I saw you did some changes in > http://source.squeak.org/trunk/Monticello-mt.643.mcz > > When I load that before doing updates I can merge in changes again :-) > > Best, > Karl > > On Wed, Aug 3, 2016 at 4:23 PM, marcel.taeumel < > Marcel.Taeumel@ > > > wrote: > >> Levente Uzonyi wrote >> > I had the same issue after the theme updates. I tried to work it around >> by >> > evaluating the button's action manually, but that didn't work out. The >> > changes were not merged. Finally, I decided to load the new package and >> > reverted what I wanted to keep. Since then merging has started to work >> > again. >> > >> > Levente >> > >> > On Wed, 3 Aug 2016, karl ramberg wrote: >> > >> >> Button did not activate when I did the right actions either, so I >> guess >> >> something was seriously wrong. >> >> Hopefully you fixed that :-) >> >> >> >> Best, >> >> Karl >> >> >> >> On Wed, Aug 3, 2016 at 2:24 PM, marcel.taeumel < >> >> > Marcel.Taeumel@ >> >> > > wrote: >> >> Karl Ramberg wrote >> >> > Anybody else seen this issue? >> >> > Merge button not present so I can't merge in changes :-( >> >> > >> >> > Best, >> >> > Karl >> >> > >> >> > >> >> > >> >> > >> >> > merge.PNG (28K) >> >> > <http://forum.world.st/attachment/4909328/0/merge.PNG> >> >> >> >> Anyway, thanks for the pointer. :-) >> >> >> http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-178-mcz-td4909393.html >> >> >> >> Best, >> >> Marcel >> >> >> >> >> >> >> >> -- >> >> View this message in context: >> >> >> http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909394.html >> >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> >> >> >> >> >> >> >> >> I noticed that tools provide the #enabled selector but omit to send >> notifications if that state changes. Yes, I cleaned-up some mess in >> PluggableButtonMorph, which not reveal that the tools omit to communite >> their state updates to the buttons correctly. >> >> Let's find them all. ;-) Here: I am looking the the places is >> MCMergeBrowser >> to send "self changed: #canMerge". Shouldn't be that difficult. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909425.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Hi Karl, yes, that did it. :-) It's basic ToolBuilder usage here. You configure callbacks via ToolBuilderSpecs and then you have to signal changed data via Object >> #changed: with that same callback selector. Now, if you set a callback for #enabled: in PluggableButtonSpec, you have to send #changed: as your state changes. The MCMergeBrowse failed to do that for #canMerge. Best, Marcel -- View this message in context: http://forum.world.st/Merge-button-missing-in-MergeBrowser-tp4909328p4909468.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 3 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 3 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160803215502.22487.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068410.html Name: Morphic-mt.1225 Ancestors: Morphic-mt.1224 Fixes scratch-pad to be compatible with UI themes. This is not the optimal solution but it works for now. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068411.html Name: HelpSystem-Core-mt.88 Ancestors: HelpSystem-Core-mt.87 For prospective content authors in our help system, avoid changing protected texts by accident. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068412.html Name: Help-Squeak-Project-mt.37 Ancestors: Help-Squeak-Project-mt.36 Protect help texts that are fixed or derived from other strings in the system from editing (and duplicating). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068413.html Name: Morphic-mt.1226 Ancestors: Morphic-mt.1225 Fixes retractable scroll bars, which did not work properly of mouseOverForKeyboardFocus was disabled. Note that #hasFocus is ancient and not needed anymore for controlling keyboard focus here. See also #hIsScrollbarNeeded and #vIsScrollbarNeeded and maybe other senders of #hasFocus. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068414.html Name: Morphic-mt.1227 Ancestors: Morphic-mt.1226 Fixes a small regression where the text cursor did not show up on a simple mouse down when it was invisible due to its blinking animation. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068415.html Name: ToolBuilder-Morphic-mt.178 Ancestors: ToolBuilder-Morphic-mt.177 For disabled buttons, still draw a border to make them still look like buttons, not like labels. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068416.html Name: Morphic-mt.1228 Ancestors: Morphic-mt.1227 Some last-minute UI theming fix, which applies to the non-flat look (i.e. using gradients) in progress bars. Implementation is not perfect but consistent with LazyListMorph selections, now. Note that, in the future, we should untangle the use of #gradientMenu and, maybe, add specific preferences. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068417.html Name: System-mt.861 Ancestors: System-cmm.860 Provide progress indication when applying a new UI theme. Use 1000-ms updates to not slow-down the process unnecessarily. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068418.html Name: System-mt.862 Ancestors: System-mt.861 Implements Karl's suggestions for the colors in Monokai and Solarized themes for progress bars. Also improve the non-shadow scenario. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068419.html Name: Monticello-mt.643 Ancestors: Monticello-mt.642 Fixes the merge button in MC's merge browser. ============================================= From commits at source.squeak.org Thu Aug 4 02:42:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 4 02:42:28 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-eem.179.mcz Message-ID: Eliot Miranda uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-eem.179.mcz ==================== Summary ==================== Name: MorphicExtras-eem.179 Author: eem Time: 3 August 2016, 7:42:04.74973 pm UUID: 7e0dd147-e862-4ad7-9218-8de41bb8b81b Ancestors: MorphicExtras-tfel.178 Use allInsyancesDo: instead of someInstance/nextInstance to remove grab commands from MorphExtensions. P.S. to improve start-up time we might consider moving these to snapshot time, if at all possible. =============== Diff against MorphicExtras-tfel.178 =============== Item was removed: - ----- Method: CommandHistory class>>forgetAllGrabCommandsFrom: (in category 'system startup') ----- - forgetAllGrabCommandsFrom: starterInstance - "Forget all the commands that might be held on to in the properties dicitonary of various morphs for various reasons." - - | object | - object := starterInstance. - [ - [nil == object] whileFalse: [ - object removeProperty: #undoGrabCommand. - object := object nextInstance]. - ] ifError: [:err :rcvr | "object is obsolete" - self forgetAllGrabCommandsFrom: object nextInstance]. - - "CommandHistory forgetAllGrabCommandsFrom: MorphExtension someInstance" - ! Item was changed: ----- Method: CommandHistory class>>resetAllHistory (in category 'system startup') ----- resetAllHistory "Reset all command histories, and make all morphs that might be holding on to undo-grab-commands forget them" self allInstancesDo: [:c | c resetCommandHistory]. MorphExtension withAllSubclassesDo: + [:morphExtensionClass| + morphExtensionClass allInstancesDo: + [:object| object removeProperty: #undoGrabCommand]] - [:mexc| - self forgetAllGrabCommandsFrom: mexc someInstance] "CommandHistory resetAllHistory" ! From commits at source.squeak.org Thu Aug 4 10:42:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 4 10:42:25 2016 Subject: [squeak-dev] The Trunk: Morphic-pre.1229.mcz Message-ID: Patrick Rein uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-pre.1229.mcz ==================== Summary ==================== Name: Morphic-pre.1229 Author: pre Time: 4 August 2016, 12:40:48.215407 pm UUID: 4d9cc4e1-e64b-f946-8a54-1e329d9e4d5a Ancestors: Morphic-mt.1228 Fixes the handling of block provided answers to send out the message instead of the window title and to deal with a request for the default value. =============== Diff against Morphic-mt.1228 =============== Item was changed: ----- Method: DialogWindow>>getUserResponse (in category 'running') ----- getUserResponse | hand world | + (ProvideAnswerNotification signal: self message asString) + ifNotNil: [:answer| + ^ answer = #default + ifTrue: [result] + ifFalse: [answer]]. - (ProvideAnswerNotification signal: self title asString) ifNotNil: [:answer| ^ answer]. self message ifEmpty: [messageMorph delete]. "Do not waste space." self paneMorph submorphs ifEmpty: [self paneMorph delete]. "Do not waste space." hand := self currentHand. world := self currentWorld. self fullBounds. self center: preferredPosition. self bounds: (self bounds translatedToBeWithin: world bounds). self openInWorld: world. hand keyboardFocus in: [:priorKeyboardFocus | hand mouseFocus in: [:priorMouseFocus | self exclusive ifTrue: [hand newMouseFocus: self]. hand newKeyboardFocus: self. [self isInWorld] whileTrue:[world doOneSubCycle]. hand newKeyboardFocus: priorKeyboardFocus. self exclusive ifTrue: [ hand newMouseFocus: priorMouseFocus]]]. ^ result! From commits at source.squeak.org Thu Aug 4 10:44:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 4 10:44:03 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-pre.180.mcz Message-ID: Patrick Rein uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-pre.180.mcz ==================== Summary ==================== Name: MorphicExtras-pre.180 Author: pre Time: 4 August 2016, 12:43:42.582407 pm UUID: 0c786ccd-27d9-4a44-a5be-d488104568ae Ancestors: MorphicExtras-eem.179 Fixes a test by re-ordering the way the trashcanmorph images are set. Otherwise, through unexpected side effects it would try to get the extent of the offimage which is not yet set. =============== Diff against MorphicExtras-eem.179 =============== Item was changed: ----- Method: TrashCanMorph>>initialize (in category 'initialization') ----- initialize "Initialize the receiver's graphics, name, and balloon-help" super initialize. + self offImage: TrashPic; + pressedImage: TrashPicOn; + image: TrashPicOn. - self image: TrashPicOn; - offImage: TrashPic; - pressedImage: TrashPicOn. self setNameTo: 'Trash' translated. self setBalloonText: 'To remove an object, drop it on any trash can. To view, and maybe retrieve, items that have been thrown away, double-click on any trash-can. Things are retained in the trash-can if the "preserveTrash" preference is set, otherwise they are purged immediately' translated. ! From commits at source.squeak.org Thu Aug 4 10:48:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 4 10:48:02 2016 Subject: [squeak-dev] The Trunk: EToys-pre.141.mcz Message-ID: Patrick Rein uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-pre.141.mcz ==================== Summary ==================== Name: EToys-pre.141 Author: pre Time: 4 August 2016, 12:47:41.822407 pm UUID: 7f4ea675-0382-3e4e-a28e-5bffa94563d3 Ancestors: EToys-mt.140 Same fix applied to TrashCanBin applied to etoys morphs. =============== Diff against EToys-mt.140 =============== Item was changed: ----- Method: StandardScriptingSystem>>goButton (in category '*Etoys-script-control') ----- goButton | aButton | aButton := ThreePhaseButtonMorph new. + aButton - aButton image: (ScriptingSystem formAtKey: 'GoPicOn'); offImage: (ScriptingSystem formAtKey: 'GoPic'); pressedImage: (ScriptingSystem formAtKey: 'GoPicOn'); + image: (ScriptingSystem formAtKey: 'GoPicOn'); actionSelector: #goUp:with:; arguments: (Array with: nil with: aButton); actWhen: #buttonUp; target: self; setNameTo: 'Go Button'; setBalloonText: 'Resume running all paused scripts' translated. ^ aButton! Item was changed: ----- Method: StandardScriptingSystem>>stepButton (in category '*Etoys-script-control') ----- stepButton | aButton | self flag: #deferred. "ambiguity about recipients" aButton := ThreePhaseButtonMorph new. aButton - image: (ScriptingSystem formAtKey: 'StepPicOn'); offImage: (ScriptingSystem formAtKey: 'StepPic'); pressedImage: (ScriptingSystem formAtKey: 'StepPicOn'); + image: (ScriptingSystem formAtKey: 'StepPicOn'); arguments: (Array with: nil with: aButton); actionSelector: #stepStillDown:with:; target: self; setNameTo: 'Step Button'; actWhen: #whilePressed; on: #mouseDown send: #stepDown:with: to: self; on: #mouseStillDown send: #stepStillDown:with: to: self; on: #mouseUp send: #stepUp:with: to: self; setBalloonText: 'Run every paused script exactly once. Keep the mouse button down over "Step" and everything will keep running until you release it' translated. ^ aButton! Item was changed: ----- Method: StandardScriptingSystem>>stopButton (in category '*Etoys-script-control') ----- stopButton "Answer a new button that can serve as a stop button" | aButton | aButton := ThreePhaseButtonMorph new. aButton - image: (ScriptingSystem formAtKey: 'StopPic'); offImage: (ScriptingSystem formAtKey: 'StopPic'); + pressedImage: (ScriptingSystem formAtKey: 'StopPicOn'); + image: (ScriptingSystem formAtKey: 'StopPic'). - pressedImage: (ScriptingSystem formAtKey: 'StopPicOn'). aButton actionSelector: #stopUp:with:; arguments: (Array with: nil with: aButton); actWhen: #buttonUp; target: self; setNameTo: 'Stop Button'; setBalloonText: 'Pause all ticking scripts.' translated. ^ aButton! From commits at source.squeak.org Thu Aug 4 11:34:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 4 11:34:37 2016 Subject: [squeak-dev] The Trunk: MorphicTests-mt.34.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicTests to project The Trunk: http://source.squeak.org/trunk/MorphicTests-mt.34.mcz ==================== Summary ==================== Name: MorphicTests-mt.34 Author: mt Time: 4 August 2016, 1:34:30.435068 pm UUID: 3eb4d2c9-273f-054e-8199-367bc3fdf5cc Ancestors: MorphicTests-mt.33 Fixes a test. Pluggable button's color tests can only work if the state of the button is off. Most of our buttons are in the off state and hence that's what the color defines. =============== Diff against MorphicTests-mt.33 =============== Item was added: + ----- Method: MorphicToolBuilderTests>>getState (in category 'support') ----- + getState + queries add: #getState. + ^false! From commits at source.squeak.org Thu Aug 4 11:36:46 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 4 11:36:47 2016 Subject: [squeak-dev] The Trunk: MorphicTests-mt.35.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicTests to project The Trunk: http://source.squeak.org/trunk/MorphicTests-mt.35.mcz ==================== Summary ==================== Name: MorphicTests-mt.35 Author: mt Time: 4 August 2016, 1:36:40.325068 pm UUID: 73892cc3-1745-5e41-8e59-26010520922e Ancestors: MorphicTests-mt.34 Fixes a test. There are no side-effects in pluggable buttons anymore. =============== Diff against MorphicTests-mt.34 =============== Item was changed: ----- Method: MorphicToolBuilderTests>>expectedButtonSideEffects (in category 'support') ----- expectedButtonSideEffects + ^#()! - ^#(getColor getState getEnabled)! From Marcel.Taeumel at hpi.de Thu Aug 4 11:00:12 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 4 11:45:22 2016 Subject: [squeak-dev] Re: Latest image from build http://build.squeak.org/ failing ? In-Reply-To: References: <1470226276598-4909389.post@n4.nabble.com> <1470236216750-4909440.post@n4.nabble.com> Message-ID: <1470308412545-4909594.post@n4.nabble.com> Karl Ramberg wrote > Great :-) > > Best, > Karl > > On Wed, Aug 3, 2016 at 4:56 PM, marcel.taeumel < > Marcel.Taeumel@ > > > wrote: > >> marcel.taeumel wrote >> > >> > Karl Ramberg wrote >> >> Seems build #698 is latest image that is ok. >> >> Build #699 drops download size by ~6 MB and is quite behind on the >> >> updates. >> >> >> >> Best, >> >> Karl >> >> >> >> On Wed, Aug 3, 2016 at 1:57 PM, karl ramberg < >> >> >> karlramberg@ >> >> >> > wrote: >> >> >> >>> Latest builds seem to be failing and latest successful build is quite >> >>> behind >> >>> >> >>> http://build.squeak.org/job/Trunk/711/console >> >>> >> >>> Best, >> >>> Karl >> >>> >> > Hi Karl, >> > >> > this is because of the instvar-update-phenomenon affecting the system >> > progress bar morph. We need a new reference image for the CI server. >> > >> > Tobias? :) >> > >> > Best, >> > Marcel >> >> I updated the reference update. The next CI run should produce a new >> trunk >> image. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/Latest-image-from-build-http-build-squeak-org-failing-tp4909360p4909440.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> ...aaand #updateFromDefaultRepository had to be replaced with #updateFromServer... should work now.. Best, Marcel -- View this message in context: http://forum.world.st/Latest-image-from-build-http-build-squeak-org-failing-tp4909360p4909594.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bert at freudenbergs.de Thu Aug 4 13:39:45 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Aug 4 13:39:48 2016 Subject: [squeak-dev] Re: Latest image from build http://build.squeak.org/ failing ? In-Reply-To: <1470308412545-4909594.post@n4.nabble.com> References: <1470226276598-4909389.post@n4.nabble.com> <1470236216750-4909440.post@n4.nabble.com> <1470308412545-4909594.post@n4.nabble.com> Message-ID: On Thu, Aug 4, 2016 at 1:00 PM, marcel.taeumel wrote: > > ...aaand #updateFromDefaultRepository had to be replaced with > #updateFromServer... should work now.. > MCMcmUpdater(Object)>>doesNotUnderstand: #updateFromServer - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160804/fb16cbba/attachment.htm From joseph.alotta at gmail.com Thu Aug 4 14:18:24 2016 From: joseph.alotta at gmail.com (Joseph Alotta) Date: Thu Aug 4 14:18:38 2016 Subject: [squeak-dev] Squeak 5.0 running hot In-Reply-To: <57a31d6c.cea7370a.10046.79fbSMTPIN_ADDED_MISSING@mx.google.com> References: <57a31d6c.cea7370a.10046.79fbSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: I just installed squeak 5.0 all in one, and it had a workspace open with a bunch of old Array joins, and one growers window. The whole running Squeak was hidden on my OS/X, while I was reading email for about half an hour. Suddenly my computer started to become hot and the fan when on. So I looked at running processes and Squeak was on the top of the list with %6 of cpu time and the next highest rounded to zero. Has anyone looked into why Squeak is running hot? Sincerely, Joe. From herbertkoenig at gmx.net Thu Aug 4 17:04:12 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Thu Aug 4 17:04:14 2016 Subject: [squeak-dev] Squeak 5.0 running hot In-Reply-To: References: <57a31d6c.cea7370a.10046.79fbSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: <88200ff2-bd19-aa67-1439-80d51c2da688@gmx.net> Hello Joe, on my 2010 Win 7 Laptop an idle Squeak 5.0 with several windows uses no cpu and a Squeak 3.8 with a MagnifierMorph (screen magnifier) uses between 2 and 3 percent. In 5.0, Tools, ProcessBrowser, right click in the pane with the processes, auto update, right click again, start cpu watcher and see who uses CPU in Squeak. I have 14% UI process and 86% idle. OTOH at 6% CPU no laptop should get hot and turn on the fan. Maybe you only see your processes and some system process got busy. No Mac so no idea if this applies. Cheers, Herbert Am 04.08.2016 um 16:18 schrieb Joseph Alotta: > I just installed squeak 5.0 all in one, and it had a workspace open with a bunch of old Array joins, and one growers window. > > The whole running Squeak was hidden on my OS/X, while I was reading email for about half an hour. > > Suddenly my computer started to become hot and the fan when on. So I looked at running processes and Squeak was on the top of the list with %6 of cpu time and the next highest rounded to zero. > > Has anyone looked into why Squeak is running hot? > > > Sincerely, > > Joe. > > > > > -------------- next part -------------- Skipped content of type multipart/related From cunningham.cb at gmail.com Thu Aug 4 17:37:23 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Thu Aug 4 17:37:26 2016 Subject: [squeak-dev] What happened to the merging tool? Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: image.png Type: image/png Size: 20005 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160804/f2d25b86/image.png From cunningham.cb at gmail.com Thu Aug 4 17:43:43 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Thu Aug 4 17:43:46 2016 Subject: [squeak-dev] Re: Merge button missing in MergeBrowser ? In-Reply-To: References: <1470227051541-4909394.post@n4.nabble.com> <1470234211357-4909425.post@n4.nabble.com> Message-ID: Hi. Could someone with commit ability put a Update into Trunk to make this happen right as soon as possible? Otherwise, more folks may send out concerns about this (like I did this morning). Update should just update correctly, if at all possible. And based on history, it is possible (love the update mechanism as a user). -cbc On Wed, Aug 3, 2016 at 9:36 AM, karl ramberg wrote: > I saw you did some changes in > http://source.squeak.org/trunk/Monticello-mt.643.mcz > > When I load that before doing updates I can merge in changes again :-) > > Best, > Karl > > On Wed, Aug 3, 2016 at 4:23 PM, marcel.taeumel > wrote: > >> Levente Uzonyi wrote >> > I had the same issue after the theme updates. I tried to work it around >> by >> > evaluating the button's action manually, but that didn't work out. The >> > changes were not merged. Finally, I decided to load the new package and >> > reverted what I wanted to keep. Since then merging has started to work >> > again. >> > >> > Levente >> > >> > On Wed, 3 Aug 2016, karl ramberg wrote: >> > >> >> Button did not activate when I did the right actions either, so I guess >> >> something was seriously wrong. >> >> Hopefully you fixed that :-) >> >> >> >> Best, >> >> Karl >> >> >> >> On Wed, Aug 3, 2016 at 2:24 PM, marcel.taeumel < >> >> > Marcel.Taeumel@ >> >> > > wrote: >> >> Karl Ramberg wrote >> >> > Anybody else seen this issue? >> >> > Merge button not present so I can't merge in changes :-( >> >> > >> >> > Best, >> >> > Karl >> >> > >> >> > >> >> > >> >> > >> >> > merge.PNG (28K) >> >> > <http://forum.world.st/attachment/4909328/0/merge.PNG> >> >> >> >> Anyway, thanks for the pointer. :-) >> >> http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt- >> 178-mcz-td4909393.html >> >> >> >> Best, >> >> Marcel >> >> >> >> >> >> >> >> -- >> >> View this message in context: >> >> http://forum.world.st/Merge-button-missing-in-MergeBrowser- >> tp4909328p4909394.html >> >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> >> >> >> >> >> >> >> >> I noticed that tools provide the #enabled selector but omit to send >> notifications if that state changes. Yes, I cleaned-up some mess in >> PluggableButtonMorph, which not reveal that the tools omit to communite >> their state updates to the buttons correctly. >> >> Let's find them all. ;-) Here: I am looking the the places is >> MCMergeBrowser >> to send "self changed: #canMerge". Shouldn't be that difficult. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Merge- >> button-missing-in-MergeBrowser-tp4909328p4909425.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160804/03de705e/attachment.htm From cunningham.cb at gmail.com Thu Aug 4 17:59:23 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Thu Aug 4 17:59:26 2016 Subject: [squeak-dev] Feedback (again) Message-ID: Hi. Just updated to latest on Trunk. I like the themes - it still takes 7-9 seconds to apply the changes to my approximately 40+ open windows, but it tells me it is doing something - which makes the time acceptable (to me at least). It now correctly updates all the close windows. Thanks! For the update itself, after the first update, it just said updated to a certain number (16268). When I updated again, it gave the nice message about how we are now in a feature freeze, awaiting bug fixes and release. It probably would have been nice for that to show up the first time. (Maybe a fix for the next release.) -cbc -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160804/50eaddd8/attachment.htm From commits at source.squeak.org Thu Aug 4 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 4 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160804215502.2499.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068420.html Name: MorphicExtras-eem.179 Ancestors: MorphicExtras-tfel.178 Use allInsyancesDo: instead of someInstance/nextInstance to remove grab commands from MorphExtensions. P.S. to improve start-up time we might consider moving these to snapshot time, if at all possible. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068421.html Name: Morphic-pre.1229 Ancestors: Morphic-mt.1228 Fixes the handling of block provided answers to send out the message instead of the window title and to deal with a request for the default value. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068422.html Name: MorphicExtras-pre.180 Ancestors: MorphicExtras-eem.179 Fixes a test by re-ordering the way the trashcanmorph images are set. Otherwise, through unexpected side effects it would try to get the extent of the offimage which is not yet set. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068423.html Name: EToys-pre.141 Ancestors: EToys-mt.140 Same fix applied to TrashCanBin applied to etoys morphs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068424.html Name: MorphicTests-mt.34 Ancestors: MorphicTests-mt.33 Fixes a test. Pluggable button's color tests can only work if the state of the button is off. Most of our buttons are in the off state and hence that's what the color defines. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068425.html Name: MorphicTests-mt.35 Ancestors: MorphicTests-mt.34 Fixes a test. There are no side-effects in pluggable buttons anymore. ============================================= From commits at source.squeak.org Fri Aug 5 04:45:46 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 04:45:49 2016 Subject: [squeak-dev] The Trunk: System-cmm.863.mcz Message-ID: Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.863.mcz ==================== Summary ==================== Name: System-cmm.863 Author: cmm Time: 4 August 2016, 11:45:16.067202 pm UUID: 6ebf00a2-b037-4d71-a877-e905acb5fdd6 Ancestors: System-mt.862 Community Dark Theme. =============== Diff against System-mt.862 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkButtons: (in category 'instance creation') ----- + addDarkButtons: aUserInterfaceTheme - addDarkButtons: theme "self createDark apply." + aUserInterfaceTheme + set: #borderColor for: #PluggableButtonMorph to: Color darkGray darker ; + set: #color for: #PluggableButtonMorph to: Color gray darker ; - theme - set: #borderColor for: #PluggableButtonMorph to: Color gray ; - set: #color for: #PluggableButtonMorph to: Color darkGray ; set: #textColor for: #PluggableButtonMorph to: Color white; + set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | self dbSelection twiceDarker] ]; - set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | self dbAqua twiceDarker] ]; set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: 0.2] ]; set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: 0.3] ]. - "And the plus-version." + aUserInterfaceTheme set: #disabledTextColor for: #PluggableButtonMorphPlus to: Color lightGray! - theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: Color gray. - ! Item was changed: ----- Method: CommunityTheme class>>addDarkDialogs: (in category 'instance creation') ----- + addDarkDialogs: aUserInterfaceTheme - addDarkDialogs: theme "self createDark apply." + aUserInterfaceTheme - theme set: #borderColor for: #DialogWindow to: Color darkGray; set: #color for: #DialogWindow to: Color gray; set: #titleColor for: #DialogWindow to: Color darkGray; set: #titleTextColor for: #DialogWindow to: Color white; + - set: #textColor for: #DialogWindow to: (Color gray: 0.9); + - set: #okColor for: #DialogWindow to: self dbGreen; set: #cancelColor for: #DialogWindow to: self dbOrange; set: #buttonColor for: #DialogWindow to: Color darkGray; + set: #selectionModifier for: #DialogWindow to: [ [:c | self dbSelection twiceDarker ] ]. - set: #selectionModifier for: #DialogWindow to: [ [:c | c adjustBrightness: 0.2 ] ]. - "The List Chooser is a dialog, too." + aUserInterfaceTheme - theme set: #addColor for: #ListChooser to: self dbBlue; set: #disabledColor for: #ListChooser to: Color transparent. - - "And the system progress bar." + aUserInterfaceTheme - theme set: #color for: #SystemProgressBarMorph to: Color transparent; + set: #barColor for: #SystemProgressBarMorph to: self dbSelection. - set: #barColor for: #SystemProgressBarMorph to: Color darkGray. - "And the balloon morphs." + aUserInterfaceTheme + set: #borderColor for: #BalloonMorph to: Color transparent ; + set: #color for: #BalloonMorph to: (self dbOrange twiceDarker alpha: 0.9) ; + set: #textColor for: #BalloonMorph to: Color white ; + set: #font for: #BalloonMorph to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis italic emphasisCode) ; + derive: #borderColor for: #NewBalloonMorph from: #BalloonMorph at: #borderColor ; + derive: #color for: #NewBalloonMorph from: #BalloonMorph at: #color! - theme - set: #borderColor for: #NewBalloonMorph to: Color black; - set: #color for: #NewBalloonMorph to: (Color cyan muchDarker alpha: 0.7).! Item was changed: ----- Method: CommunityTheme class>>addDarkFonts: (in category 'instance creation') ----- + addDarkFonts: aUserInterfaceTheme - addDarkFonts: theme - "Set-up fonts." + aUserInterfaceTheme + set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis italic emphasisCode); - theme - set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7); set: #standardButtonFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7); + set: #standardCodeFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); + set: #standardDefaultTextFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); - set: #standardCodeFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); - set: #standardDefaultTextFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardFlapFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); + set: #standardListFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); + set: #standardMenuFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); + set: #standardSystemFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); + set: #windowTitleFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9)! - set: #standardListFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); - set: #standardMenuFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); - set: #standardSystemFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); - set: #windowTitleFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9).! Item was changed: ----- Method: CommunityTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- + addDarkMenusAndDockingBars: aUserInterfaceTheme - addDarkMenusAndDockingBars: theme "self createDark apply." + aUserInterfaceTheme - theme set: #borderWidth for: #MenuMorph to: 0; + set: #color for: #MenuMorph to: Color darkGray twiceDarker; - set: #color for: #MenuMorph to: Color darkGray; set: #titleTextColor for: #MenuMorph to: Color white; + set: #lineColor for: #MenuMorph to: Color darkGray; - set: #lineColor for: #MenuMorph to: Color lightGray; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. + aUserInterfaceTheme + set: #textColor for: #MenuItemMorph to: self dbForeground; + set: #selectionColor for: #MenuItemMorph to: self dbSelection; + set: #selectionTextColor for: #MenuItemMorph to: self dbForeground ; + set: #disabledTextColor for: #MenuItemMorph to: self dbForeground muchDarker. - - theme - set: #textColor for: #MenuItemMorph to: Color white; - set: #selectionColor for: #MenuItemMorph to: self dbAqua; - set: #selectionTextColor for: #MenuItemMorph to: Color white. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." - "The world main docking bar." + aUserInterfaceTheme - theme " set: #color for: #DockingBarMorph to: Color darkGray;" " set: #selectionColor for: #DockingBarItemMorph to: self darkContentSecondary;" set: #logoColor for: #TheWorldMainDockingBar to: Color white; + set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color black! - set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color black.! Item was changed: ----- Method: CommunityTheme class>>addDarkScrollables: (in category 'instance creation') ----- + addDarkScrollables: aUserInterfaceTheme - addDarkScrollables: theme "self createDark apply." - "Scroll bars" + aUserInterfaceTheme + set: #thumbColor for: #ScrollBar to: self dbGray; + set: #thumbBorderColor for: #ScrollBar to: self dbGray twiceDarker. - theme - set: #thumbColor for: #ScrollBar to: Color gray; - set: #thumbBorderColor for: #ScrollBar to: Color darkGray. - "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." + aUserInterfaceTheme - theme set: #color for: #ScrollPane to: (Color gray: 0.1). - "List widgets" + aUserInterfaceTheme - theme set: #textColor for: #PluggableListMorph to: (Color gray: 0.9); + set: #selectionColor for: #PluggableListMorph to: self dbSelection; + derive: #selectionTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; - set: #selectionColor for: #PluggableListMorph to: self dbAqua; - set: #selectionTextColor for: #PluggableListMorph to: Color white; derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.5); + derive: #filterTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; - set: #filterTextColor for: #PluggableListMorph to: Color white; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker ] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker alpha: 0.5 ] ]. - "Tree widgets" + aUserInterfaceTheme - theme set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; set: #lineColor for: #SimpleHierarchicalListMorph to: Color gray. - "Text widgets" + aUserInterfaceTheme - theme set: #textColor for: #PluggableTextMorph to: (Color gray: 0.9); + set: #caretColor for: #PluggableTextMorph to: Color orange darker; + set: #selectionColor for: #PluggableTextMorph to: (self dbSelection darker duller); - set: #caretColor for: #PluggableTextMorph to: Color white; - set: #selectionColor for: #PluggableTextMorph to: (Color r: 0.15 g: 0.4 b: 0.15 alpha: 1.0); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | c duller] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: self dbPurple; set: #adornmentRefuse for: #PluggableTextMorph to: self dbBlue; set: #adornmentConflict for: #PluggableTextMorph to: self dbRed; set: #adornmentDiff for: #PluggableTextMorph to: self dbGreen; set: #adornmentNormalEdit for: #PluggableTextMorph to: self dbOrange; + set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow; + set: #frameAdornmentWidth for: PluggableTextMorph to: 2. + aUserInterfaceTheme + set: #balloonTextColor for: #PluggableTextMorphPlus to: Color lightGray! - set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow. - theme - set: #balloonTextColor for: #PluggableTextMorphPlus to: Color darkGray.! Item was changed: ----- Method: CommunityTheme class>>addDarkSyntaxHighlighting: (in category 'instance creation') ----- + addDarkSyntaxHighlighting: aUserInterfaceTheme - addDarkSyntaxHighlighting: theme "self createDark apply." + | normal bold italic underlined darkMap | normal := TextEmphasis normal. bold:=TextEmphasis bold. italic:=TextEmphasis italic. underlined := TextEmphasis underlined. darkMap := StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9. + aUserInterfaceTheme - theme set: #default for: #SHTextStylerST80 to: {self dbForeground}; + set: #invalid for: #SHTextStylerST80 to: {self dbInvalid}; + set: #excessCode for: #SHTextStylerST80 to: {self dbInvalid twiceDarker}; + "Descriptive text for humans, italicized." + set: #comment for: #SHTextStylerST80 to: {self dbComment. italic}; + set: #unfinishedComment for: #SHTextStylerST80 to: {self dbComment darker. italic}; + set: #'$' for: #SHTextStylerST80 to: {self dbConstant}; + set: #character for: #SHTextStylerST80 to: {self dbConstant}; + set: #integer for: #SHTextStylerST80 to: {self dbConstant}; + set: #number for: #SHTextStylerST80 to: {self dbConstant}; + set: #- for: #SHTextStylerST80 to: {self dbForeground. bold}; + set: #= for: #SHTextStylerST80 to: {self dbForeground. bold}; + set: #symbol for: #SHTextStylerST80 to: {self dbBedrock}; + set: #stringSymbol for: #SHTextStylerST80 to: {self dbBedrock}; + set: #literalArray for: #SHTextStylerST80 to: {self dbForeground}; + set: #string for: #SHTextStylerST80 to: {self dbConstant}; + set: #unfinishedString for: #SHTextStylerST80 to: {self dbConstant darker}; + set: #assignment for: #SHTextStylerST80 to: {nil. bold}; + set: #ansiAssignment for: #SHTextStylerST80 to: {nil. bold}; + set: #literal for: #SHTextStylerST80 to: {nil. bold}; + set: #keyword for: #SHTextStylerST80 to: {self dbMessage}; + set: #binary for: #SHTextStylerST80 to: {self dbForeground. bold}; + set: #unary for: #SHTextStylerST80 to: {self dbMessage}; + set: #incompleteKeyword for: #SHTextStylerST80 to: {self dbMessage darker. {underlined. bold}}; + set: #incompleteBinary for: #SHTextStylerST80 to: {self dbMessage darker. underlined}; + set: #incompleteUnary for: #SHTextStylerST80 to: {self dbMessage darker. underlined}; + set: #undefinedKeyword for: #SHTextStylerST80 to: {self dbInvalid}; + set: #undefinedBinary for: #SHTextStylerST80 to: {self dbInvalid}; + set: #undefinedUnary for: #SHTextStylerST80 to: {self dbInvalid}; + "Delineate the selector (good for new users), and make the method look like a mini-document with a title." + set: #patternKeyword for: #SHTextStylerST80 to: {self dbMessage lighter. underlined. darkMap}; + set: #patternBinary for: #SHTextStylerST80 to: {nil. bold}; + set: #patternUnary for: #SHTextStylerST80 to: {self dbMessage lighter. underlined. darkMap}; + set: #self for: #SHTextStylerST80 to: {self dbBedrock. bold}; + set: #super for: #SHTextStylerST80 to: {self dbBedrock. bold}; + set: #true for: #SHTextStylerST80 to: {self dbBedrock. bold}; + set: #false for: #SHTextStylerST80 to: {self dbBedrock. bold}; + set: #nil for: #SHTextStylerST80 to: {self dbBedrock. bold}; + set: #thisContext for: #SHTextStylerST80 to: {self dbBedrock. bold}; + set: #return for: #SHTextStylerST80 to: {self dbForeground. bold}; + set: #patternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. darkMap}; + set: #methodArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. darkMap}; + set: #blockPatternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; + set: #blockArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; + set: #argument for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; + set: #blockArgColon for: #SHTextStylerST80 to: {self dbBedrock}; + set: #leftParenthesis for: #SHTextStylerST80 to: {self dbBedrock}; + set: #rightParenthesis for: #SHTextStylerST80 to: {self dbBedrock}; - set: #invalid for: #SHTextStylerST80 to: {self dbRed}; - set: #excessCode for: #SHTextStylerST80 to: {self dbRed}; - set: #comment for: #SHTextStylerST80 to: {Color gray: 0.3}; - set: #unfinishedComment for: #SHTextStylerST80 to: {self dbRed. TextEmphasis italic}; - set: #'$' for: #SHTextStylerST80 to: {self dbRed}; - set: #character for: #SHTextStylerST80 to: {self dbRed}; - set: #integer for: #SHTextStylerST80 to: {self dbRed}; - set: #number for: #SHTextStylerST80 to: {self dbRed}; - set: #- for: #SHTextStylerST80 to: {self dbRed}; - set: #symbol for: #SHTextStylerST80 to: {self dbBlue}; - set: #stringSymbol for: #SHTextStylerST80 to: {self dbBlue}; - set: #literalArray for: #SHTextStylerST80 to: {self dbBlue}; - set: #string for: #SHTextStylerST80 to: {self dbPurple. TextEmphasis normal}; - set: #unfinishedString for: #SHTextStylerST80 to: {self dbRed. TextEmphasis normal}; - set: #assignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; - set: #ansiAssignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; - set: #literal for: #SHTextStylerST80 to: {nil. TextEmphasis italic}; - set: #keyword for: #SHTextStylerST80 to: {self dbBlue}; - set: #binary for: #SHTextStylerST80 to: {self dbBlue}; - set: #unary for: #SHTextStylerST80 to: {self dbBlue}; - set: #incompleteKeyword for: #SHTextStylerST80 to: {self dbForeground. TextEmphasis underlined}; - set: #incompleteBinary for: #SHTextStylerST80 to: {self dbForeground. TextEmphasis underlined}; - set: #incompleteUnary for: #SHTextStylerST80 to: {self dbForeground. TextEmphasis underlined}; - set: #undefinedKeyword for: #SHTextStylerST80 to: {self dbRed}; - set: #undefinedBinary for: #SHTextStylerST80 to: {self dbRed}; - set: #undefinedUnary for: #SHTextStylerST80 to: {self dbRed}; - set: #patternKeyword for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; - set: #patternBinary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; - set: #patternUnary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; - set: #self for: #SHTextStylerST80 to: {self dbRed}; - set: #super for: #SHTextStylerST80 to: {self dbRed}; - set: #true for: #SHTextStylerST80 to: {self dbRed}; - set: #false for: #SHTextStylerST80 to: {self dbRed}; - set: #nil for: #SHTextStylerST80 to: {self dbRed}; - set: #thisContext for: #SHTextStylerST80 to: {self dbRed}; - set: #return for: #SHTextStylerST80 to: {self dbRed}; - set: #patternArg for: #SHTextStylerST80 to: {self dbBlue}; - set: #methodArg for: #SHTextStylerST80 to: {self dbBlue}; - set: #blockPatternArg for: #SHTextStylerST80 to: {self dbBlue}; - set: #blockArg for: #SHTextStylerST80 to: {self dbBlue}; - set: #argument for: #SHTextStylerST80 to: {self dbBlue}; - set: #blockArgColon for: #SHTextStylerST80 to: {self dbForeground}; - set: #leftParenthesis for: #SHTextStylerST80 to: {self dbForeground}; - set: #rightParenthesis for: #SHTextStylerST80 to: {self dbForeground}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {self dbGreen}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {self dbGreen}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {self dbPurple}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {self dbPurple}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {self dbRed}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {self dbRed}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {self dbGreen}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {self dbGreen}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {self dbOrange}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {self dbOrange}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {self dbPurple}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {self dbPurple}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {self dbBlue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {self dbBlue}; + set: #blockStart for: #SHTextStylerST80 to: {self dbBedrock}; + set: #blockEnd for: #SHTextStylerST80 to: {self dbBedrock}; - set: #blockStart for: #SHTextStylerST80 to: {self dbForeground}; - set: #blockEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #blockStart1 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockEnd1 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockStart2 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockEnd2 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockStart3 for: #SHTextStylerST80 to: {self dbRed}; set: #blockEnd3 for: #SHTextStylerST80 to: {self dbRed}; set: #blockStart4 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockEnd4 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockStart5 for: #SHTextStylerST80 to: {self dbOrange}; set: #blockEnd5 for: #SHTextStylerST80 to: {self dbOrange}; set: #blockStart6 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockEnd6 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockStart7 for: #SHTextStylerST80 to: {self dbBlue}; set: #blockEnd7 for: #SHTextStylerST80 to: {self dbBlue}; + set: #arrayStart for: #SHTextStylerST80 to: {self dbBedrock}; + set: #arrayEnd for: #SHTextStylerST80 to: {self dbBedrock}; - set: #arrayStart for: #SHTextStylerST80 to: {self dbForeground}; - set: #arrayEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #arrayStart1 for: #SHTextStylerST80 to: {self dbForeground}; set: #arrayEnd1 for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayStart for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {self dbForeground}; set: #leftBrace for: #SHTextStylerST80 to: {self dbForeground}; set: #rightBrace for: #SHTextStylerST80 to: {self dbForeground}; set: #cascadeSeparator for: #SHTextStylerST80 to: {self dbForeground}; set: #statementSeparator for: #SHTextStylerST80 to: {self dbForeground}; set: #externalCallType for: #SHTextStylerST80 to: {self dbForeground}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {self dbForeground}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {self dbForeground}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {self dbForeground}; + set: #methodTempBar for: #SHTextStylerST80 to: {self dbBedrock}; + set: #blockTempBar for: #SHTextStylerST80 to: {self dbBedrock}; + set: #blockArgsBar for: #SHTextStylerST80 to: {self dbBedrock}; + set: #primitive for: #SHTextStylerST80 to: {self dbGreen lighter. bold}; + set: #pragmaKeyword for: #SHTextStylerST80 to: {self dbGreen. bold}; + set: #pragmaUnary for: #SHTextStylerST80 to: {self dbGreen. bold}; + set: #pragmaBinary for: #SHTextStylerST80 to: {self dbGreen. bold}; + set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {self dbGreen. bold}; + set: #module for: #SHTextStylerST80 to: {self dbGreen. bold}; + set: #blockTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; + set: #blockPatternTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; + set: #instVar for: #SHTextStylerST80 to: {self dbYellow. normal. darkMap}; + set: #workspaceVar for: #SHTextStylerST80 to: {self dbLocal. italic. darkMap}; + set: #undefinedIdentifier for: #SHTextStylerST80 to: {self dbInvalid}; + set: #incompleteIdentifier for: #SHTextStylerST80 to: {self dbGray. underlined}; + set: #tempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; + set: #patternTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; + set: #poolConstant for: #SHTextStylerST80 to: {self dbConstant }; + set: #classVar for: #SHTextStylerST80 to: {self dbReference}; + set: #globalVar for: #SHTextStylerST80 to: {self dbClass. normal. darkMap}. - set: #methodTempBar for: #SHTextStylerST80 to: {self dbForeground}; - set: #blockTempBar for: #SHTextStylerST80 to: {self dbForeground}; - set: #blockArgsBar for: #SHTextStylerST80 to: {self dbForeground}; - set: #primitive for: #SHTextStylerST80 to: {self dbGreen. TextEmphasis bold}; - set: #pragmaKeyword for: #SHTextStylerST80 to: {self dbGreen. TextEmphasis bold}; - set: #pragmaUnary for: #SHTextStylerST80 to: {self dbGreen. TextEmphasis bold}; - set: #pragmaBinary for: #SHTextStylerST80 to: {self dbGreen. TextEmphasis bold}; - set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {self dbGreen. TextEmphasis bold}; - set: #module for: #SHTextStylerST80 to: {self dbGreen. TextEmphasis bold}; - set: #blockTempVar for: #SHTextStylerST80 to: {self dbForeground}; - set: #blockPatternTempVar for: #SHTextStylerST80 to: {self dbForeground}; - set: #instVar for: #SHTextStylerST80 to: {self dbForeground}; - set: #workspaceVar for: #SHTextStylerST80 to: {self dbForeground}; - set: #undefinedIdentifier for: #SHTextStylerST80 to: {self dbRed}; - set: #incompleteIdentifier for: #SHTextStylerST80 to: {self dbForeground. {TextEmphasis italic. TextEmphasis underlined}}; - set: #tempVar for: #SHTextStylerST80 to: {self dbForeground}; - set: #patternTempVar for: #SHTextStylerST80 to: {self dbForeground}; - set: #poolConstant for: #SHTextStylerST80 to: {self dbForeground}; - set: #classVar for: #SHTextStylerST80 to: {self dbForeground}; - set: #globalVar for: #SHTextStylerST80 to: {self dbForeground}. - "And the text differ" + aUserInterfaceTheme - theme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor color: self dbRed }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor color: self dbBlue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: CommunityTheme class>>addDarkWindowColors: (in category 'instance creation') ----- + addDarkWindowColors: aUserInterfaceTheme - addDarkWindowColors: theme "self createDark apply." + aUserInterfaceTheme - theme set: #uniformWindowColor for: #Model to: Color darkGray; set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; set: #unfocusedLabelColor for: #SystemWindow to: Color veryLightGray; set: #focusedLabelColor for: #SystemWindow to: Color white; + set: #customWindowColor for: #Browser to: self dbBlue; - set: #customWindowColor for: #Browser to: self dbGreen; set: #customWindowColor for: #ChangeList to: self dbBlue; set: #customWindowColor for: #ChangeSorter to: self dbBlue; set: #customWindowColor for: #ChatNotes to: self dbPurple; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self dbPurple; set: #customWindowColor for: #Debugger to: self dbRed; + set: #customWindowColor for: #DualChangeSorter to: self dbOrange; + set: #customWindowColor for: #FileContentsBrowser to: self dbGray; + set: #customWindowColor for: #FileList to: self dbGray; + set: #customWindowColor for: #Inspector to: self dbYellow duller; + set: #customWindowColor for: #InstanceBrowser to: self dbYellow duller; + set: #customWindowColor for: #Lexicon to: self dbGreen; + set: #customWindowColor for: #MCTool to: self dbOrange twiceDarker; - set: #customWindowColor for: #DualChangeSorter to: self dbBlue; - set: #customWindowColor for: #FileContentsBrowser to: self dbYellow; - set: #customWindowColor for: #FileList to: self dbYellow; - set: #customWindowColor for: #InstanceBrowser to: self dbBlue; - set: #customWindowColor for: #Lexicon to: self dbBlue; - set: #customWindowColor for: #MCTool to: self dbPurple; set: #customWindowColor for: #MessageNames to: self dbGreen; + set: #customWindowColor for: #MessageSet to: self dbGreen; + set: #customWindowColor for: #ObjectExplorer to: self dbYellow duller; + set: #customWindowColor for: #PackagePaneBrowser to: self dbBlue; + set: #customWindowColor for: #PluggableFileList to: self dbGray; - set: #customWindowColor for: #MessageSet to: self dbBlue; - set: #customWindowColor for: #PackagePaneBrowser to: self dbGreen; - set: #customWindowColor for: #PluggableFileList to: self dbYellow; set: #customWindowColor for: #PreferenceBrowser to: self dbBlue; set: #customWindowColor for: #SMLoader to: self dbOrange; set: #customWindowColor for: #SMLoaderPlus to: self dbOrange; set: #customWindowColor for: #SMReleaseBrowser to: self dbOrange; + set: #customWindowColor for: #ScriptingDomain to: self dbYellow duller; - set: #customWindowColor for: #ScriptingDomain to: self dbYellow; set: #customWindowColor for: #SelectorBrowser to: self dbBlue; + set: #customWindowColor for: #StringHolder to: self dbGray; - set: #customWindowColor for: #StringHolder to: self dbYellow; set: #customWindowColor for: #TestRunner to: self dbOrange; + set: #customWindowColor for: #TranscriptStream to: self dbGray; + set: #customWindowColor for: #VersionsBrowser to: self dbPurple; + set: #customWindowColor for: #Workspace to: self dbGray.! - set: #customWindowColor for: #TranscriptStream to: self dbOrange; - set: #customWindowColor for: #VersionsBrowser to: self dbPurple.! Item was changed: ----- Method: CommunityTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak'). theme name: name. - "General morph stuff." theme + set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.5 brightness: 0.25); + set: #keyboardFocusWidth for: #Morph to: 2; + set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); - set: #keyboardFocusColor for: #Morph to: Color white; - set: #keyboardFocusWidth for: #Morph to: 1; - set: #softShadowColor for: #Morph to: (Color white alpha: 0.03); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); + set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); - set: #hardShadowColor for: #Morph to: (Color white alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1@1. - self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. - theme]! Item was changed: + ----- Method: CommunityTheme class>>dbAqua (in category 'colors') ----- - ----- Method: CommunityTheme class>>dbAqua (in category 'colors by purpose') ----- dbAqua ^ Color r: 0.2 g: 0.4 b: 0.4! Item was changed: ----- Method: CommunityTheme class>>dbBackground (in category 'colors by purpose') ----- + dbBackground + "Emptiness." + ^Color r: 0.1 g: 0.1 b: 0.1! - dbBackground - ^Color r: 0.113 g: 0.121 b: 0.129 - ! Item was added: + ----- Method: CommunityTheme class>>dbBedrock (in category 'colors by purpose') ----- + dbBedrock + "Basic syntactical matter which users cannot change." + ^ self dbForeground! Item was changed: + ----- Method: CommunityTheme class>>dbBlue (in category 'colors') ----- - ----- Method: CommunityTheme class>>dbBlue (in category 'colors by purpose') ----- dbBlue ^Color r: 0.406 g: 0.535 b: 0.645! Item was added: + ----- Method: CommunityTheme class>>dbClass (in category 'colors by purpose') ----- + dbClass + ^ self dbBlue! Item was changed: ----- Method: CommunityTheme class>>dbComment (in category 'colors by purpose') ----- + dbComment + "The code should speak for itself. Where it cannot, any comments should just be subtle, clarifying whispers." + ^ Color gray darker! - dbComment - ^Color r: 0.588 g: 0.596 b: 0.588 - ! Item was added: + ----- Method: CommunityTheme class>>dbConstant (in category 'colors by purpose') ----- + dbConstant + "Let unparameterized constants stand out in red." + ^ self dbRed! Item was removed: - ----- Method: CommunityTheme class>>dbCurrentLine (in category 'colors by purpose') ----- - dbCurrentLine - ^Color r:0.156 g: 0.164 b: 0.181! Item was changed: ----- Method: CommunityTheme class>>dbForeground (in category 'colors by purpose') ----- + dbForeground + "Not too bright." + ^Color r: 0.764 g: 0.776 b: 0.768! - dbForeground - ^Color r: 0.772 g: 0.784 b: 0.776! Item was added: + ----- Method: CommunityTheme class>>dbGray (in category 'colors') ----- + dbGray + ^ Color gray slightlyDarker! Item was changed: + ----- Method: CommunityTheme class>>dbGreen (in category 'colors') ----- - ----- Method: CommunityTheme class>>dbGreen (in category 'colors by purpose') ----- dbGreen ^(Color r: 0.33 g: 0.542 b: 0.287)! Item was added: + ----- Method: CommunityTheme class>>dbInvalid (in category 'colors by purpose') ----- + dbInvalid + "Purposefully bright, so that it conflicts with the rest of the palette, visually indicative of a problem." + ^ Color magenta twiceDarker! Item was added: + ----- Method: CommunityTheme class>>dbLocal (in category 'colors by purpose') ----- + dbLocal + "Local variables can be descriptive, sometimes saving the need for a comment." + ^ self dbPink! Item was added: + ----- Method: CommunityTheme class>>dbMessage (in category 'colors by purpose') ----- + dbMessage + "Green is the universal color for okay, positive, go. In Squeak, sending messages are what make objects 'go'." + ^ self dbGreen + adjustSaturation: 0.05 + brightness: 0.10! Item was changed: + ----- Method: CommunityTheme class>>dbOrange (in category 'colors') ----- - ----- Method: CommunityTheme class>>dbOrange (in category 'colors by purpose') ----- dbOrange + ^Color r: 0.871 g: 0.577 b: 0.372! - ^Color r: 0.4 g: 0.2666 b: 0.172! Item was added: + ----- Method: CommunityTheme class>>dbPink (in category 'colors') ----- + dbPink + ^ (Color r: 0.739 g: 0.552 b: 0.652)! Item was changed: + ----- Method: CommunityTheme class>>dbPurple (in category 'colors') ----- - ----- Method: CommunityTheme class>>dbPurple (in category 'colors by purpose') ----- dbPurple ^Color r: 0.698 g: 0.581 b: 0.733! Item was changed: + ----- Method: CommunityTheme class>>dbRed (in category 'colors') ----- - ----- Method: CommunityTheme class>>dbRed (in category 'colors by purpose') ----- dbRed ^Color r: 0.6 g: 0.3 b: 0.3! Item was added: + ----- Method: CommunityTheme class>>dbReference (in category 'colors by purpose') ----- + dbReference + "References to other objects. Yellow like gold." + ^ self dbYellow! Item was changed: ----- Method: CommunityTheme class>>dbSelection (in category 'colors by purpose') ----- + dbSelection + "Selections are transient, like electricity, so a good neon color. The arguments passed to methods and blocks could be considered as much, 'selections', as those made from a list or menu." + ^ self dbAqua adjustSaturation: 0.10 brightness: 0.10! - dbSelection - ^Color r: 0.216 g: 0.232 b: 0.255! Item was changed: + ----- Method: CommunityTheme class>>dbYellow (in category 'colors') ----- - ----- Method: CommunityTheme class>>dbYellow (in category 'colors by purpose') ----- dbYellow + ^ (Color r: 0.675 g: 0.632 b: 0.16)! - ^ (Color r: 0.554 g: 0.488 b: 0.134)! From commits at source.squeak.org Fri Aug 5 04:46:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 04:46:44 2016 Subject: [squeak-dev] The Trunk: Morphic-cmm.1230.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1230.mcz ==================== Summary ==================== Name: Morphic-cmm.1230 Author: cmm Time: 4 August 2016, 11:45:46.19494 pm UUID: 75ecc9d2-3132-4933-ba03-98810bd1e903 Ancestors: Morphic-pre.1229 Community Dark Theme. =============== Diff against Morphic-pre.1229 =============== Item was changed: ----- Method: BalloonMorph class>>string:for:corner: (in category 'instance creation') ----- string: str for: morph corner: cornerName "Make up and return a balloon for morph. Find the quadrant that clips the text the least, using cornerName as a tie-breaker. tk 9/12/97" + | text vertices balloon | + balloon := self new. + text := self - | tm vertices | - tm := self getTextMorph: (str asString withNoLineLongerThan: Preferences maxBalloonHelpLineLength) for: morph. + balloon userInterfaceTheme textColor ifNotNil: + [:col | text color: col]. + balloon userInterfaceTheme font ifNotNil: [ : font | text font: font ]. + vertices := self getVertices: text bounds. - vertices := self getVertices: tm bounds. vertices := self + getBestLocation: vertices + for: morph + corner: cornerName. + ^ balloon + color: morph balloonColor ; + setVertices: vertices ; + addMorph: text ; - getBestLocation: vertices - for: morph - corner: cornerName. - ^ self new color: morph balloonColor; - setVertices: vertices; - addMorph: tm; setTarget: morph! Item was changed: ----- Method: BalloonMorph>>defaultBorderColor (in category 'initialization') ----- defaultBorderColor + ^ self userInterfaceTheme borderColor ifNil: [self defaultColor muchDarker]! - "answer the default border color/fill style for the receiver" - ^ self defaultColor muchDarker"Color black"! Item was changed: ----- Method: BalloonMorph>>defaultBorderWidth (in category 'initialization') ----- defaultBorderWidth + ^ self userInterfaceTheme borderWidth ifNil: [0]! - "0 is appropriate for balloons because they are transient and wispy, not a solid object deserving a border." - ^ 0! Item was changed: ----- Method: BalloonMorph>>defaultColor (in category 'initialization') ----- defaultColor "answer the default color/fill style for the receiver" + ^ self userInterfaceTheme color ifNil: [self class balloonColor]! - ^ self class balloonColor! Item was changed: ----- Method: BalloonMorph>>popUp (in category 'initialization') ----- popUp - | w worldBounds | - target ifNil: [^ self]. target isInWorld ifFalse: [^ self]. - w := target world. + self prepareToOpen. + "So that if the translation below makes it overlap the receiver, it won't interfere with the rootMorphsAt: logic and hence cause flashing. Without this, flashing happens, believe me!!" - - self lock. - self fullBounds. "force layout" - self setProperty: #morphicLayerNumber toValue: self morphicLayerNumber. - "So that if the translation below makes it overlap the receiver, it won't - interfere with the rootMorphsAt: logic and hence cause flashing. Without - this, flashing happens, believe me!!" ((worldBounds := w bounds) containsRect: self bounds) ifFalse: [self bounds: (self bounds translatedToBeWithin: worldBounds)]. - self openInWorld. w activeHand addBalloonHelp: self. ! Item was changed: ----- Method: BalloonMorph>>popUpForHand: (in category 'initialization') ----- popUpForHand: aHand "Pop up the receiver as balloon help for the given hand" | worldBounds | + self prepareToOpen. - - self lock. - self fullBounds. "force layout" - self setProperty: #morphicLayerNumber toValue: self morphicLayerNumber. aHand world addMorphFront: self. "So that if the translation below makes it overlap the receiver, it won't interfere with the rootMorphsAt: logic and hence cause flashing. Without this, flashing happens, believe me!!" ((worldBounds := aHand world bounds) containsRect: self bounds) ifFalse: [self bounds: (self bounds translatedToBeWithin: worldBounds)]. aHand resetBalloonHelp: self. ! Item was added: + ----- Method: BalloonMorph>>prepareToOpen (in category 'private') ----- + prepareToOpen + "Override the color if not already set." + self userInterfaceTheme color ifNotNil: [ : col | self color: col]. + self + lock ; + fullBounds ; + setProperty: #morphicLayerNumber + toValue: self morphicLayerNumber! Item was changed: ----- Method: MenuItemMorph>>isEnabled: (in category 'accessing') ----- + isEnabled: aBoolean - isEnabled: aBoolean - isEnabled = aBoolean ifTrue: [^ self]. isEnabled := aBoolean. + self color: + (self userInterfaceTheme perform: + (aBoolean + ifTrue: [#textColor] + ifFalse: [#disabledTextColor]))! - self color: (aBoolean ifTrue: [Color black] ifFalse: [Color lightGray]). - ! Item was changed: ----- Method: PluggableTextMorph>>drawFrameAdornment:on: (in category 'drawing') ----- drawFrameAdornment: aColor on: aCanvas "Indicate edit status for the text editor" self class simpleFrameAdornments ifTrue: [ aCanvas frameRectangle: self innerBounds + width: (self userInterfaceTheme frameAdornmentWidth ifNil: [1]) - width: 1 color: aColor. aCanvas frameRectangle: (self innerBounds insetBy: 1) + width: (self userInterfaceTheme frameAdornmentWidth ifNil: [1]) - width: 1 color: (aColor alpha: aColor alpha / 3.0) ] ifFalse: [ | form | "Class-side adornment cache is currently using pre-multiplied alpha, so we need to use rule 34 which works for < 32bpp, too." form := self class adornmentWithColor: aColor. aCanvas image: form at: self innerBounds topRight - (form width @ 0) sourceRect: form boundingBox rule: 34 ]! Item was changed: ----- Method: SearchBar>>scratchPad (in category 'accessing') ----- scratchPad ^ scratchPad ifNil: [ scratchPad := TextMorphForEditView new. "we should be able to use TextMorph here; fix later" scratchPad " on: #keyboardFocusChange send: #removeScratchPad to: self ;" on: #mouseLeave send: #removeScratchPad to: self ; on: #keyStroke send: #handleScratchPadKey: to: self ; margins: (5@0 corner: 5@0); backgroundColor: (BalloonMorph balloonColor alpha: 1.0) ; setEditView: PluggableTextMorph new ; "dummy" autoFit: true ; wrapFlag: true ; newContents: '--scratch area--' ; font: ((UserInterfaceTheme current get: #font for: #PluggableTextMorph) ifNil: [TextStyle defaultFont]); textColor: ((UserInterfaceTheme current get: #textColor for: #PluggableTextMorph) ifNil: [Color black]); caretColor: ((UserInterfaceTheme current get: #caretColor for: #PluggableTextMorph) ifNil: [Color red]); + selectionColor: ((UserInterfaceTheme current get: #selectionColor for: #PluggableTextMorph) ifNil: [Color blue muchDarker] ifNotNil: [ : col | col twiceLighter ]); - selectionColor: ((UserInterfaceTheme current get: #selectionColor for: #PluggableTextMorph) ifNil: [Color blue]) muchDarker; yourself. self layoutScratchPad. Preferences menuAppearance3d ifTrue: [ scratchPad addDropShadow ]. scratchPad ]! From commits at source.squeak.org Fri Aug 5 05:01:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 05:01:52 2016 Subject: [squeak-dev] The Trunk: System-cmm.864.mcz Message-ID: Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.864.mcz ==================== Summary ==================== Name: System-cmm.864 Author: cmm Time: 5 August 2016, 12:01:20.43151 am UUID: e6f24858-8b39-4658-8dcd-881caedfa6e4 Ancestors: System-cmm.863 Use #dbBackground logical color instead of hard-coded color. =============== Diff against System-cmm.863 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkScrollables: (in category 'instance creation') ----- addDarkScrollables: aUserInterfaceTheme "self createDark apply." "Scroll bars" aUserInterfaceTheme set: #thumbColor for: #ScrollBar to: self dbGray; set: #thumbBorderColor for: #ScrollBar to: self dbGray twiceDarker. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." aUserInterfaceTheme + set: #color for: #ScrollPane to: self dbBackground. - set: #color for: #ScrollPane to: (Color gray: 0.1). "List widgets" aUserInterfaceTheme set: #textColor for: #PluggableListMorph to: (Color gray: 0.9); set: #selectionColor for: #PluggableListMorph to: self dbSelection; derive: #selectionTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.5); derive: #filterTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker ] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker alpha: 0.5 ] ]. "Tree widgets" aUserInterfaceTheme set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; set: #lineColor for: #SimpleHierarchicalListMorph to: Color gray. "Text widgets" aUserInterfaceTheme set: #textColor for: #PluggableTextMorph to: (Color gray: 0.9); set: #caretColor for: #PluggableTextMorph to: Color orange darker; set: #selectionColor for: #PluggableTextMorph to: (self dbSelection darker duller); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | c duller] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: self dbPurple; set: #adornmentRefuse for: #PluggableTextMorph to: self dbBlue; set: #adornmentConflict for: #PluggableTextMorph to: self dbRed; set: #adornmentDiff for: #PluggableTextMorph to: self dbGreen; set: #adornmentNormalEdit for: #PluggableTextMorph to: self dbOrange; set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow; set: #frameAdornmentWidth for: PluggableTextMorph to: 2. aUserInterfaceTheme set: #balloonTextColor for: #PluggableTextMorphPlus to: Color lightGray! Item was changed: ----- Method: CommunityTheme class>>dbBackground (in category 'colors by purpose') ----- dbBackground "Emptiness." + ^Color gray: 0.1! - ^Color r: 0.1 g: 0.1 b: 0.1! From commits at source.squeak.org Fri Aug 5 06:51:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 06:51:45 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1231.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1231.mcz ==================== Summary ==================== Name: Morphic-mt.1231 Author: mt Time: 5 August 2016, 8:51:01.425358 am UUID: 82f5a015-c062-9d4d-b6cd-fec7ca11a239 Ancestors: Morphic-cmm.1230 Fix use of theme properties #disabledTextColor in menus and #frameAdornmentWidth in text fields. =============== Diff against Morphic-cmm.1230 =============== Item was changed: ----- Method: MenuItemMorph class>>themeProperties (in category 'preferences') ----- themeProperties ^ super themeProperties, { { #font. 'Fonts'. 'Font for menu items.' }. { #textColor. 'Colors'. 'Color for the menu item''s labels.' }. + { #disabledTextColor. 'Colors'. 'Color to use for disabled menu item labels.' }. { #selectionColor. 'Colors'. 'Color used for items when hovering or selecting them.' }. { #selectionTextColor. 'Colors'. 'Color used for label when hovering or selecting them.' }. { #subMenuMarker. 'Forms'. 'The form to be used to indicate a submenu.' }. }! Item was changed: ----- Method: MenuItemMorph>>isEnabled: (in category 'accessing') ----- + isEnabled: aBoolean + + | colorToUse | - isEnabled: aBoolean isEnabled = aBoolean ifTrue: [^ self]. isEnabled := aBoolean. + + colorToUse := isEnabled + ifTrue: [self userInterfaceTheme textColor ifNil: [Color black]] + ifFalse: [self userInterfaceTheme disabledTextColor ifNil: [Color gray]]. + + self color: colorToUse.! - self color: - (self userInterfaceTheme perform: - (aBoolean - ifTrue: [#textColor] - ifFalse: [#disabledTextColor]))! Item was changed: ----- Method: PluggableTextMorph class>>themeProperties (in category 'preferences') ----- themeProperties ^ super themeProperties, { { #font. 'Fonts'. 'Font for text if not styled.' }. { #textColor. 'Colors'. 'Color for text if not styled.' }. { #caretColor. 'Colors'. 'The color of the text cursor.' }. { #selectionColor. 'Colors'. 'The color of the text selection.' }. { #unfocusedSelectionModifier. 'Colors'. 'How to derive the text selection color if not focused.' }. { #adornmentReadOnly. 'Color'. 'How to indicate read-only contents.' }. { #adornmentRefuse. 'Color'. 'How to indicate that the model refuses to accept.' }. { #adornmentConflict. 'Color'. 'How to indicate that there are editing conflicts.' }. { #adornmentDiff. 'Color'. 'How to indicate that the model wants diff feedback.' }. { #adornmentNormalEdit. 'Color'. 'How to indicate that there are unaccepted edits.' }. { #adornmentDiffEdit. 'Color'. 'How to indicate that there are unaccepted edits in a diff view.' }. { #wrapBorderColorModifier. 'Color'. 'How to indicate a specific wrap border.' }. + { #frameAdornmentWidth. 'Geometry'. 'Width of simple frame adornments.' }. }! Item was changed: ----- Method: PluggableTextMorph>>drawFrameAdornment:on: (in category 'drawing') ----- drawFrameAdornment: aColor on: aCanvas "Indicate edit status for the text editor" self class simpleFrameAdornments ifTrue: [ aCanvas frameRectangle: self innerBounds + width: (self valueOfProperty: #frameAdornmentWidth ifAbsent: [1]) - width: (self userInterfaceTheme frameAdornmentWidth ifNil: [1]) color: aColor. aCanvas frameRectangle: (self innerBounds insetBy: 1) + width: (self valueOfProperty: #frameAdornmentWidth ifAbsent: [1]) - width: (self userInterfaceTheme frameAdornmentWidth ifNil: [1]) color: (aColor alpha: aColor alpha / 3.0) ] ifFalse: [ | form | "Class-side adornment cache is currently using pre-multiplied alpha, so we need to use rule 34 which works for < 32bpp, too." form := self class adornmentWithColor: aColor. aCanvas image: form at: self innerBounds topRight - (form width @ 0) sourceRect: form boundingBox rule: 34 ]! Item was changed: ----- Method: PluggableTextMorph>>setDefaultParameters (in category 'initialization') ----- setDefaultParameters super setDefaultParameters. self font: (self userInterfaceTheme font ifNil: [TextStyle defaultFont]); setTextColor: (self userInterfaceTheme textColor ifNil: [Color black]). self wrapBorderColor: ((self userInterfaceTheme wrapBorderColorModifier ifNil: [ [:c | c muchLighter alpha: 0.3] ]) value: self borderColor). self setProperty: #adornmentReadOnly toValue: (self userInterfaceTheme adornmentReadOnly ifNil: [Color black]); setProperty: #adornmentRefuse toValue: (self userInterfaceTheme adornmentRefuse ifNil: [Color tan]); setProperty: #adornmentConflict toValue: (self userInterfaceTheme adornmentConflict ifNil: [Color red]); setProperty: #adornmentDiff toValue: (self userInterfaceTheme adornmentDiff ifNil: [Color green]); setProperty: #adornmentNormalEdit toValue: (self userInterfaceTheme adornmentNormalEdit ifNil: [Color orange]); setProperty: #adornmentDiffEdit toValue: (self userInterfaceTheme adornmentDiffEdit ifNil: [Color yellow]). + + self + setProperty: #frameAdornmentWidth + toValue: (self userInterfaceTheme frameAdornmentWidth ifNil: [1]). textMorph caretColor: (self userInterfaceTheme caretColor ifNil: [Color red]); selectionColor: (self userInterfaceTheme selectionColor ifNil: [TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.2]); unfocusedSelectionColor: ((self userInterfaceTheme unfocusedSelectionModifier ifNil: [ [:c | Color gray: 0.9] ]) value: textMorph selectionColor).! From commits at source.squeak.org Fri Aug 5 06:54:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 06:54:20 2016 Subject: [squeak-dev] The Trunk: System-mt.865.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.865.mcz ==================== Summary ==================== Name: System-mt.865 Author: mt Time: 5 August 2016, 8:53:50.188358 am UUID: 11d47b5b-9af6-ca46-859d-f57957cb482c Ancestors: System-cmm.864 Apply latest theme additions (#disabledTextColor for menus and #frameAdornmentWidth for text fields) to all themes. =============== Diff against System-cmm.864 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkScrollables: (in category 'instance creation') ----- addDarkScrollables: aUserInterfaceTheme "self createDark apply." "Scroll bars" aUserInterfaceTheme set: #thumbColor for: #ScrollBar to: self dbGray; set: #thumbBorderColor for: #ScrollBar to: self dbGray twiceDarker. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." aUserInterfaceTheme set: #color for: #ScrollPane to: self dbBackground. "List widgets" aUserInterfaceTheme set: #textColor for: #PluggableListMorph to: (Color gray: 0.9); set: #selectionColor for: #PluggableListMorph to: self dbSelection; derive: #selectionTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.5); derive: #filterTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker ] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker alpha: 0.5 ] ]. "Tree widgets" aUserInterfaceTheme set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; set: #lineColor for: #SimpleHierarchicalListMorph to: Color gray. "Text widgets" aUserInterfaceTheme set: #textColor for: #PluggableTextMorph to: (Color gray: 0.9); set: #caretColor for: #PluggableTextMorph to: Color orange darker; set: #selectionColor for: #PluggableTextMorph to: (self dbSelection darker duller); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | c duller] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: self dbPurple; set: #adornmentRefuse for: #PluggableTextMorph to: self dbBlue; set: #adornmentConflict for: #PluggableTextMorph to: self dbRed; set: #adornmentDiff for: #PluggableTextMorph to: self dbGreen; set: #adornmentNormalEdit for: #PluggableTextMorph to: self dbOrange; set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow; + set: #frameAdornmentWidth for: #PluggableTextMorph to: 2. - set: #frameAdornmentWidth for: PluggableTextMorph to: 2. aUserInterfaceTheme set: #balloonTextColor for: #PluggableTextMorphPlus to: Color lightGray! Item was changed: ----- Method: MonokaiTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- addDarkMenusAndDockingBars: theme "self createDark apply." theme set: #borderWidth for: #MenuMorph to: 1; set: #borderColor for: #MenuMorph to: self invisibleColor; set: #color for: #MenuMorph to: self backgroundColor; set: #titleTextColor for: #MenuMorph to: self yellow; set: #lineColor for: #MenuMorph to: self invisibleColor; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. theme set: #textColor for: #MenuItemMorph to: self foregroundColor; + set: #disabledTextColor for: #MenuItemMorph to: self grayLight; set: #selectionColor for: #MenuItemMorph to: self invisibleColor; set: #selectionTextColor for: #MenuItemMorph to: self yellow. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." theme set: #color for: #DockingBarMorph to: self invisibleColor; set: #selectionColor for: #DockingBarItemMorph to: self grayLight; set: #logoColor for: #TheWorldMainDockingBar to: self foregroundColor; set: #selectionLogoColor for: #TheWorldMainDockingBar to: self yellow.! Item was changed: ----- Method: SolarizedTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- addDarkMenusAndDockingBars: theme "self createDark apply." theme set: #borderWidth for: #MenuMorph to: 1; set: #borderColor for: #MenuMorph to: self darkBackgroundHighlights; set: #color for: #MenuMorph to: self darkBackground; set: #titleTextColor for: #MenuMorph to: self darkContentEmphasizedMore; set: #lineColor for: #MenuMorph to: self darkBackgroundHighlights; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. theme set: #textColor for: #MenuItemMorph to: self darkContentEmphasized; + set: #disabledTextColor for: #MenuItemMorph to: self darkContentSecondary; set: #selectionColor for: #MenuItemMorph to: self darkBackgroundHighlights; set: #selectionTextColor for: #MenuItemMorph to: self darkContentEmphasizedMore. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." theme set: #color for: #DockingBarMorph to: self darkBackgroundHighlights; set: #selectionColor for: #DockingBarItemMorph to: self darkContentSecondary; set: #logoColor for: #TheWorldMainDockingBar to: self darkContentEmphasized; set: #selectionLogoColor for: #TheWorldMainDockingBar to: self darkContentEmphasizedMore.! Item was changed: ----- Method: SolarizedTheme class>>addLightMenusAndDockingBars: (in category 'instance creation') ----- addLightMenusAndDockingBars: theme "self createLight apply." theme set: #borderWidth for: #MenuMorph to: 1; set: #borderColor for: #MenuMorph to: self lightBackgroundHighlights; set: #color for: #MenuMorph to: self lightBackground; set: #titleTextColor for: #MenuMorph to: self lightContentEmphasizedMore; set: #lineColor for: #MenuMorph to: self lightBackgroundHighlights; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. theme set: #textColor for: #MenuItemMorph to: self lightContentEmphasized; + set: #disabledTextColor for: #MenuItemMorph to: self lightContentSecondary; set: #selectionColor for: #MenuItemMorph to: self lightBackgroundHighlights; set: #selectionTextColor for: #MenuItemMorph to: self lightContentEmphasizedMore. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." theme set: #color for: #DockingBarMorph to: self lightBackgroundHighlights; set: #selectionColor for: #DockingBarItemMorph to: self lightContentSecondary; set: #logoColor for: #TheWorldMainDockingBar to: self lightContentEmphasized; set: #selectionLogoColor for: #TheWorldMainDockingBar to: self lightContentEmphasizedMore.! Item was changed: ----- Method: SolarizedTheme class>>addLightScrollables: (in category 'instance creation') ----- addLightScrollables: theme "self createLight apply." "Scroll bars" theme set: #thumbColor for: #ScrollBar to: self lightBackground; set: #thumbBorderColor for: #ScrollBar to: self lightBackground; set: #thumbBorderWidth for: #ScrollBar to: 1; set: #thumbColorModifier for: #ScrollBar to: [ [:c | c adjustBrightness: -0.1] ]; set: #pagingAreaColorModifier for: #ScrollBar to: [ [:c | Color transparent ] ]; set: #borderColorModifier for: #ScrollBar to: [ [:c | c adjustBrightness: -0.1] ]. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." theme set: #borderWidth for: #ScrollPane to: 0; " set: #borderColor for: #ScrollPane to: Color transparent;" set: #color for: #ScrollPane to: self lightBackground. "List widgets" theme set: #textColor for: #PluggableListMorph to: self lightContentEmphasized; set: #selectionColor for: #PluggableListMorph to: self lightBackgroundHighlights; set: #selectionTextColor for: #PluggableListMorph to: self lightContentEmphasizedMore; + derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c darker]; set: #filterColor for: #PluggableListMorph to: self yellow; set: #filterTextColor for: #PluggableListMorph to: self lightBackground; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c darker alpha: 0.5 ] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c darker alpha: 0.5 ] ]. "Tree widgets" theme set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self yellow lighter lighter; set: #lineColor for: #SimpleHierarchicalListMorph to: self lightContentSecondary. "Text widgets" theme set: #textColor for: #PluggableTextMorph to: self lightContentPrimary; set: #caretColor for: #PluggableTextMorph to: self lightContentEmphasizedMore; set: #selectionColor for: #PluggableTextMorph to: self lightBackgroundHighlights; set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | (Color r: 0.933 g: 0.909 b: 0.835) "light background highlights"] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: self magenta; set: #adornmentRefuse for: #PluggableTextMorph to: self cyan; set: #adornmentConflict for: #PluggableTextMorph to: self red; set: #adornmentDiff for: #PluggableTextMorph to: self green; set: #adornmentNormalEdit for: #PluggableTextMorph to: self orange; set: #adornmentDiffEdit for: #PluggableTextMorph to: self yellow. theme set: #balloonTextColor for: #PluggableTextMorphPlus to: self lightContentSecondary.! Item was changed: ----- Method: SqueakTheme class>>addMenusAndDockingBars: (in category 'instance creation') ----- addMenusAndDockingBars: theme theme set: #borderColor for: #MenuMorph to: Color gray; set: #borderWidth for: #MenuMorph to: 1; set: #borderStyle for: #MenuMorph to: BorderStyle default; set: #color for: #MenuMorph to: (Color gray: 0.9); set: #titleBorderColor for: #MenuMorph to: (Color r: 0.6 g: 0.7 b: 1); set: #titleBorderWidth for: #MenuMorph to: 0; set: #titleBorderStyle for: #MenuMorph to: BorderStyle default; set: #titleColor for: #MenuMorph to: Color transparent; set: #titleFont for: #MenuMorph to: [Preferences windowTitleFont]; set: #titleTextColor for: #MenuMorph to: Color black; set: #lineColor for: #MenuMorph to: (Color gray: 0.9); set: #lineStyle for: #MenuMorph to: BorderStyle inset; set: #lineWidth for: #MenuMorph to: 2. theme set: #font for: #MenuItemMorph to: [Preferences standardMenuFont]; set: #textColor for: #MenuItemMorph to: Color black; + set: #disabledTextColor for: #MenuItemMorph to: Color gray; set: #selectionColor for: #MenuItemMorph to: (Color r: 0.4 g: 0.5 b: 0.7); set: #selectionTextColor for: #MenuItemMorph to: Color white; set: #subMenuMarker for: #MenuItemMorph to: nil. "Use hard-coded default. See MenuItemMorph." "Derive some stuff for the docking bar morph, which looks mostly like a menu morph." theme set: #borderWidth for: #DockingBarMorph to: 0; derive: #borderColor for: #DockingBarMorph from: #MenuMorph; derive: #borderStyle for: #DockingBarMorph from: #MenuMorph; derive: #color for: #DockingBarMorph from: #MenuMorph; derive: #lineColor for: #DockingBarMorph from: #MenuMorph; derive: #lineStyle for: #DockingBarMorph from: #MenuMorph; derive: #lineWidth for: #DockingBarMorph from: #MenuMorph. "The world main docking bar." theme derive: #font for: #TheWorldMainDockingBar from: #MenuItemMorph; derive: #textColor for: #TheWorldMainDockingBar from: #MenuItemMorph; set: #logoColor for: #TheWorldMainDockingBar to: Color black; set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color white.! Item was changed: ----- Method: SqueakTheme class>>addScrollables: (in category 'instance creation') ----- addScrollables: theme "self create apply" "Sliders" theme set: #borderColor for: #Slider to: Color gray; set: #borderWidth for: #Slider to: 1; set: #color for: #Slider to: Color lightGray; set: #thumbBorderColor for: #Slider to: [Color gray: 0.6]; set: #thumbBorderWidth for: #Slider to: 0; set: #thumbColor for: #Slider to: Color veryVeryLightGray; set: #thumbShadowModifier for: #Slider to: [ [:c | c alpha: 0.7] ]. "Scroll bars" theme set: #thumbBorderWidth for: #ScrollBar to: 1; set: #thumbColorModifier for: #ScrollBar to: [ [:c | c] ]; set: #pagingAreaColorModifier for: #ScrollBar to: [ [:c | c darker alpha: 0.35] ]; set: #borderColorModifier for: #ScrollBar to: [ [:c | c adjustBrightness: -0.3] ]. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." theme set: #borderColor for: #ScrollPane to: (Color gray: 0.6); set: #borderWidth for: #ScrollPane to: 1; set: #borderStyle for: #ScrollPane to: BorderStyle default; set: #color for: #ScrollPane to: Color white. "List widgets" theme set: #font for: #PluggableListMorph to: [Preferences standardListFont]; set: #textColor for: #PluggableListMorph to: Color black; set: #selectionColor for: #PluggableListMorph to: (Color r: 0.72 g: 0.72 b: 0.9); derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c lighter]; set: #selectionTextColor for: #PluggableListMorph to: Color black; set: #filterColor for: #PluggableListMorph to: Color yellow paler; set: #filterTextColor for: #PluggableListMorph to: Color black; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | Color gray: 0.9] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c darker alpha: 0.3] ]. "Tree widgets" theme derive: #font for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #textColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #selectionColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #selectionTextColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #filterColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #filterTextColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #hoverSelectionModifier for: #SimpleHierarchicalListMorph from: #PluggableListMorph; set: #higlightTextColor for: #SimpleHierarchicalListMorph to: Color red; set: #lineColor for: #SimpleHierarchicalListMorph to: Color veryLightGray. "Text widgets" theme set: #font for: #PluggableTextMorph to: [Preferences standardDefaultTextFont]; set: #textColor for: #PluggableTextMorph to: Color black; set: #caretColor for: #PluggableTextMorph to: Color red; set: #selectionColor for: #PluggableTextMorph to: (TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.2); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | Color gray: 0.9] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: Color black; set: #adornmentRefuse for: #PluggableTextMorph to: Color tan; set: #adornmentConflict for: #PluggableTextMorph to: Color red; set: #adornmentDiff for: #PluggableTextMorph to: Color green; set: #adornmentNormalEdit for: #PluggableTextMorph to: Color orange; + set: #adornmentDiffEdit for: #PluggableTextMorph to: Color yellow; + set: #frameAdornmentWidth for: #PluggableTextMorph to: 1. - set: #adornmentDiffEdit for: #PluggableTextMorph to: Color yellow. theme set: #balloonTextColor for: #PluggableTextMorphPlus to: (Color gray: 0.7); derive: #balloonTextFont for: #PluggableTextMorphPlus from: #PluggableTextMorph at: #font.! From commits at source.squeak.org Fri Aug 5 07:22:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 07:22:54 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1232.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1232.mcz ==================== Summary ==================== Name: Morphic-mt.1232 Author: mt Time: 5 August 2016, 9:22:12.860358 am UUID: 2ba4947f-a05c-8545-95e4-5d6b8b470a52 Ancestors: Morphic-mt.1231 Old-style balloon morph should be themeable, too. I heard so. :-) =============== Diff against Morphic-mt.1231 =============== Item was changed: ----- Method: BalloonMorph class>>balloonColor (in category 'preferences') ----- balloonColor self flag: #remove. "mt: We should remove this additional getter in the future and use UI themes instead:" + ^ (UserInterfaceTheme current get: #color for: #BalloonMorph) ifNil: [(TranslucentColor r: 0.92 g: 0.92 b: 0.706 alpha: 0.749)]! - ^ (UserInterfaceTheme current get: #color for: #NewBalloonMorph) ifNil: [(TranslucentColor r: 0.92 g: 0.92 b: 0.706 alpha: 0.749)]! Item was changed: ----- Method: BalloonMorph class>>balloonColor: (in category 'preferences') ----- balloonColor: aColor self flag: #remove. "mt: We should remove this additional setter in the future and use UI themes instead:" + UserInterfaceTheme current set: #color for: #BalloonMorph to: aColor.! - UserInterfaceTheme current set: #color for: #NewBalloonMorph to: aColor.! Item was changed: ----- Method: BalloonMorph class>>balloonFont (in category 'utility') ----- balloonFont self flag: #remove. "mt: We should remove this additional getter in the future and use UI themes instead:" + ^ (UserInterfaceTheme current get: #font for: #BalloonMorph) ifNil: [TextStyle defaultFont]! - ^ (UserInterfaceTheme current get: #font for: #NewBalloonMorph) ifNil: [TextStyle defaultFont]! Item was added: + ----- Method: BalloonMorph class>>balloonTextColor (in category 'preferences') ----- + balloonTextColor + + self flag: #remove. "mt: We should remove this additional getter in the future and use UI themes instead:" + ^ (UserInterfaceTheme current get: #textColor for: #BalloonMorph) ifNil: [Color black]! Item was added: + ----- Method: BalloonMorph class>>balloonTextColor: (in category 'preferences') ----- + balloonTextColor: aColor + + self flag: #remove. "mt: We should remove this additional setter in the future and use UI themes instead:" + UserInterfaceTheme current set: #textColor for: #BalloonMorph to: aColor.! Item was changed: ----- Method: BalloonMorph class>>getTextMorph:for: (in category 'private') ----- getTextMorph: aStringOrMorph for: balloonOwner "Construct text morph." | m text | aStringOrMorph isMorph ifTrue: [m := aStringOrMorph] ifFalse: [BalloonFont ifNil: [text := aStringOrMorph] + ifNotNil: [text := aStringOrMorph asText + addAttribute: (TextFontReference toFont: balloonOwner balloonFont); + addAttribute: (TextColor color: self balloonTextColor)]. - ifNotNil: [text := Text - string: aStringOrMorph - attribute: (TextFontReference toFont: balloonOwner balloonFont)]. m := (TextMorph new contents: text) centered]. m setToAdhereToEdge: #adjustedCenter. ^ m! Item was changed: ----- Method: BalloonMorph class>>setBalloonFontTo: (in category 'utility') ----- setBalloonFontTo: aFont self flag: #remove. "mt: We should remove this additional setter in the future and use UI themes instead:" + UserInterfaceTheme current set: #font for: #BalloonMorph to: aFont.! - UserInterfaceTheme current set: #font for: #NewBalloonMorph to: aFont.! Item was added: + ----- Method: BalloonMorph class>>themeProperties (in category 'preferences') ----- + themeProperties + + ^ super themeProperties, { + { #borderColor. 'Colors'. 'Color of the balloon''s border.' }. + { #borderWidth. 'Borders'. 'Width of the balloon''s border.' }. + { #color. 'Colors', 'Color for the balloon background.' }. + { #font. 'Fonts'. 'Font for balloon text if not overridden by text attributes.' }. + { #textColor. 'Colors'. 'Color for the balloon text if not overridden by text attributes.' }. + }! Item was added: + ----- Method: BalloonMorph>>applyUserInterfaceTheme (in category 'updating') ----- + applyUserInterfaceTheme + + super applyUserInterfaceTheme. + self setDefaultParameters.! Item was removed: - ----- Method: BalloonMorph>>defaultBorderColor (in category 'initialization') ----- - defaultBorderColor - ^ self userInterfaceTheme borderColor ifNil: [self defaultColor muchDarker]! Item was removed: - ----- Method: BalloonMorph>>defaultBorderWidth (in category 'initialization') ----- - defaultBorderWidth - ^ self userInterfaceTheme borderWidth ifNil: [0]! Item was removed: - ----- Method: BalloonMorph>>defaultColor (in category 'initialization') ----- - defaultColor - "answer the default color/fill style for the receiver" - ^ self userInterfaceTheme color ifNil: [self class balloonColor]! Item was changed: ----- Method: BalloonMorph>>initialize (in category 'initialization') ----- initialize "initialize the state of the receiver" super initialize. "" self beSmoothCurve. + offsetFromTarget := 0 @ 0. + + self setDefaultParameters.! - offsetFromTarget := 0 @ 0! Item was added: + ----- Method: BalloonMorph>>setDefaultParameters (in category 'initialization') ----- + setDefaultParameters + + self + borderWidth: (self userInterfaceTheme borderWidth ifNil: [0]); + borderColor: (self userInterfaceTheme borderColor ifNil: [Color black]); + color: (self userInterfaceTheme color ifNil: [TranslucentColor r: 0.92 g: 0.92 b: 0.706 alpha: 0.749]).! From commits at source.squeak.org Fri Aug 5 07:24:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 07:24:42 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1233.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1233.mcz ==================== Summary ==================== Name: Morphic-mt.1233 Author: mt Time: 5 August 2016, 9:23:54.647358 am UUID: be26790a-5bb5-0e4e-ab1d-7bbf50cd334c Ancestors: Morphic-mt.1232 Fixes a bug in dialog windows that occured when setting a keyboard shortcut for buttons whose labels begin with the same letters. =============== Diff against Morphic-mt.1232 =============== Item was changed: ----- Method: DialogWindow>>registerKeyboardShortcutFor: (in category 'constructing') ----- registerKeyboardShortcutFor: button "Take the first alpha-numeric character that is not already used as a shortcut, and use it as a shortcut." (button valueOfProperty: #normalLabel) asString in: [:normalLabel | normalLabel do: [:char | char isAlphaNumeric ifTrue: [ keyMap at: char asLowercase + ifPresent: [:ea | "Ignore"] - ifPresent: [] ifAbsent: [ button setProperty: #normalLabel toValue: ('{1} ({2})' format: {normalLabel. char asLowercase}). button label: (button valueOfProperty: #normalLabel). ^ keyMap at: char asLowercase put: button ] ] ] ]! From commits at source.squeak.org Fri Aug 5 07:26:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 07:27:01 2016 Subject: [squeak-dev] The Trunk: System-mt.866.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.866.mcz ==================== Summary ==================== Name: System-mt.866 Author: mt Time: 5 August 2016, 9:26:35.798358 am UUID: 48a9806f-335c-2b40-bd05-90d5baf3afb9 Ancestors: System-mt.865 Harmonize and clean-up theme creation code for old-style and new-style balloon morphs. =============== Diff against System-mt.865 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkDialogs: (in category 'instance creation') ----- addDarkDialogs: aUserInterfaceTheme "self createDark apply." aUserInterfaceTheme set: #borderColor for: #DialogWindow to: Color darkGray; set: #color for: #DialogWindow to: Color gray; set: #titleColor for: #DialogWindow to: Color darkGray; set: #titleTextColor for: #DialogWindow to: Color white; set: #textColor for: #DialogWindow to: (Color gray: 0.9); set: #okColor for: #DialogWindow to: self dbGreen; set: #cancelColor for: #DialogWindow to: self dbOrange; set: #buttonColor for: #DialogWindow to: Color darkGray; set: #selectionModifier for: #DialogWindow to: [ [:c | self dbSelection twiceDarker ] ]. "The List Chooser is a dialog, too." aUserInterfaceTheme set: #addColor for: #ListChooser to: self dbBlue; set: #disabledColor for: #ListChooser to: Color transparent. "And the system progress bar." aUserInterfaceTheme set: #color for: #SystemProgressBarMorph to: Color transparent; set: #barColor for: #SystemProgressBarMorph to: self dbSelection. "And the balloon morphs." aUserInterfaceTheme + set: #borderColor for: #NewBalloonMorph to: Color transparent ; + set: #color for: #NewBalloonMorph to: (self dbOrange twiceDarker alpha: 0.9) ; + set: #textColor for: #NewBalloonMorph to: Color white .! - set: #borderColor for: #BalloonMorph to: Color transparent ; - set: #color for: #BalloonMorph to: (self dbOrange twiceDarker alpha: 0.9) ; - set: #textColor for: #BalloonMorph to: Color white ; - set: #font for: #BalloonMorph to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis italic emphasisCode) ; - derive: #borderColor for: #NewBalloonMorph from: #BalloonMorph at: #borderColor ; - derive: #color for: #NewBalloonMorph from: #BalloonMorph at: #color! Item was changed: ----- Method: SqueakTheme class>>addDialogs: (in category 'instance creation') ----- addDialogs: theme + "self create apply." + - theme set: #borderColor for: #DialogWindow to: Color gray; set: #borderWidth for: #DialogWindow to: 1; set: #borderStyle for: #DialogWindow to: BorderStyle default; set: #color for: #DialogWindow to: Color white; set: #titleBorderColor for: #DialogWindow to: Color gray; set: #titleBorderWidth for: #DialogWindow to: 0; set: #titleBorderStyle for: #DialogWindow to: BorderStyle default; set: #titleColor for: #DialogWindow to: (Color r: 0.658 g: 0.678 b: 0.78); set: #titleFont for: #DialogWindow to: [Preferences windowTitleFont]; set: #titleTextColor for: #DialogWindow to: Color black; set: #font for: #DialogWindow to: [Preferences standardSystemFont]; set: #textColor for: #DialogWindow to: Color black; set: #okColor for: #DialogWindow to: (Color r: 0.49 g: 0.749 b: 0.49); set: #cancelColor for: #DialogWindow to: (Color r: 1 g: 0.6 b: 0.588); set: #buttonColor for: #DialogWindow to: (Color r: 0.658 g: 0.678 b: 0.78) twiceLighter; set: #selectionModifier for: #DialogWindow to: [ [:c | Color orange muchLighter ] ]. "The List Chooser is a dialog, too." theme derive: #okColor for: #ListChooser from: #DialogWindow; derive: #cancelColor for: #ListChooser from: #DialogWindow; set: #addColor for: #ListChooser to: Color blue muchLighter; set: #disabledColor for: #ListChooser to: Color gray. "And the mulitple list chooser." theme derive: #okColor for: #ListMultipleChooser from: #DialogWindow; derive: #cancelColor for: #ListMultipleChooser from: #DialogWindow. "And the system progress bar." theme derive: #borderColor for: #SystemProgressMorph from: #MenuMorph; derive: #borderWidth for: #SystemProgressMorph from: #MenuMorph; derive: #borderStyle for: #SystemProgressMorph from: #MenuMorph; derive: #color for: #SystemProgressMorph from: #MenuMorph; derive: #font for: #SystemProgressMorph from: #MenuItemMorph; derive: #textColor for: #SystemProgressMorph from: #MenuItemMorph; set: #borderColor for: #SystemProgressBarMorph to: Color transparent; set: #borderWidth for: #SystemProgressBarMorph to: 0; set: #borderStyle for: #SystemProgressBarMorph to: BorderStyle default; set: #color for: #SystemProgressBarMorph to: (Color r: 0.977 g: 0.977 b: 0.977); set: #barColor for: #SystemProgressBarMorph to: (Color r: 0.72 g: 0.72 b: 0.9). "And the balloon morphs." theme set: #borderColor for: #NewBalloonMorph to: (Color r: 0.46 g: 0.46 b: 0.353); set: #borderWidth for: #NewBalloonMorph to: 1; set: #color for: #NewBalloonMorph to:(Color r: 0.92 g: 0.92 b: 0.706); set: #font for: #NewBalloonMorph to: [Preferences standardBalloonHelpFont]; + derive: #textColor for: #NewBalloonMorph from: #PluggableButtonMorph. + + theme + derive: #borderColor for: #BalloonMorph from: #NewBalloonMorph; + set: #borderWidth for: #BalloonMorph to: 0; + derive: #color for: #BalloonMorph from: #NewBalloonMorph; + derive: #font for: #BalloonMorph from: #NewBalloonMorph; + derive: #textColor for: #BalloonMorph from: #NewBalloonMorph.! - derive: #textColor for: #NewBalloonMorph from: #PluggableButtonMorph.! From commits at source.squeak.org Fri Aug 5 07:31:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 07:31:12 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.179.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.179.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.179 Author: mt Time: 5 August 2016, 9:31:04.483358 am UUID: 3b1fd0fb-2b96-a94a-af2b-06c5623f0617 Ancestors: ToolBuilder-Morphic-mt.178 Fixes a bug that prevented the creation of message categories in ProtoObject. =============== Diff against ToolBuilder-Morphic-mt.178 =============== Item was changed: ----- Method: ListChooser>>selectedIndex (in category 'accessing') ----- selectedIndex + ^ selectedIndex ifNil: [ self items size min: 1 ]! - ^ selectedIndex ifNil: [ 1 ]! From commits at source.squeak.org Fri Aug 5 07:34:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 07:34:19 2016 Subject: [squeak-dev] The Trunk: System-mt.867.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.867.mcz ==================== Summary ==================== Name: System-mt.867 Author: mt Time: 5 August 2016, 9:33:53.020358 am UUID: a76b6a94-8e22-c34f-93fa-38425216e114 Ancestors: System-mt.866 Make disabled buttons in Solarized theme a little bit more subtle. =============== Diff against System-mt.866 =============== Item was changed: ----- Method: SolarizedTheme class>>addDarkButtons: (in category 'instance creation') ----- addDarkButtons: theme "self createDark apply." theme set: #borderColor for: #PluggableButtonMorph to: self darkBackground; set: #color for: #PluggableButtonMorph to: self darkBackgroundHighlights; set: #textColor for: #PluggableButtonMorph to: self darkContentEmphasizedMore; set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. "And the plus-version." + theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: self darkContentSecondary. - theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: self darkContentEmphasized. ! Item was changed: ----- Method: SolarizedTheme class>>addLightButtons: (in category 'instance creation') ----- addLightButtons: theme + "self createLight apply." - "self createDark apply." theme set: #borderColor for: #PluggableButtonMorph to: self lightBackground; set: #color for: #PluggableButtonMorph to: self lightBackgroundHighlights; set: #textColor for: #PluggableButtonMorph to: self lightContentEmphasizedMore; set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. "And the plus-version." + theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: self lightContentSecondary. - theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: self lightContentEmphasized. ! From Marcel.Taeumel at hpi.de Fri Aug 5 06:53:20 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 5 07:38:36 2016 Subject: [squeak-dev] Accidential interning of symbols via the world's search bar? Not here... Message-ID: <1470380000398-4909727.post@n4.nabble.com> Hi, there. In the last board meeting, Tim reported that our search bar interns search strings as symbols automatically. I cannot confirm that. Does anybody else have this issue? Bset, Marcel -- View this message in context: http://forum.world.st/Accidential-interning-of-symbols-via-the-world-s-search-bar-Not-here-tp4909727.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Aug 5 07:48:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 07:49:00 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.102.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.102.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.102 Author: mt Time: 5 August 2016, 9:48:53.027358 am UUID: bc3bad64-ecbb-c347-adda-d7193c3fbefc Ancestors: ToolBuilder-Kernel-mt.101 Due to popular request, provide support for dialogs to behave more like pop-up menus, that is, dismiss them if you click outside their bounds. =============== Diff against ToolBuilder-Kernel-mt.101 =============== Item was changed: PluggableCompositeSpec subclass: #PluggableDialogSpec + instanceVariableNames: 'title message extent buttons closeAction exclusive autoCancel' - instanceVariableNames: 'title message extent buttons closeAction' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! Item was added: + ----- Method: PluggableDialogSpec>>autoCancel (in category 'accessing') ----- + autoCancel + ^ autoCancel! Item was added: + ----- Method: PluggableDialogSpec>>autoCancel: (in category 'accessing') ----- + autoCancel: aBoolean + autoCancel := aBoolean.! Item was added: + ----- Method: PluggableDialogSpec>>exclusive (in category 'accessing') ----- + exclusive + ^ exclusive! Item was added: + ----- Method: PluggableDialogSpec>>exclusive: (in category 'accessing') ----- + exclusive: aBoolean + exclusive := aBoolean.! Item was changed: + ----- Method: PluggableDialogSpec>>horizontalResizing (in category 'layout hints') ----- - ----- Method: PluggableDialogSpec>>horizontalResizing (in category 'as yet unclassified') ----- horizontalResizing ^ #rigid! Item was changed: + ----- Method: PluggableDialogSpec>>verticalResizing (in category 'layout hints') ----- - ----- Method: PluggableDialogSpec>>verticalResizing (in category 'as yet unclassified') ----- verticalResizing ^ #rigid! From commits at source.squeak.org Fri Aug 5 07:50:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 07:50:10 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.180.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.180.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.180 Author: mt Time: 5 August 2016, 9:50:02.050358 am UUID: 31288670-0ff0-cd4f-9ef3-ca5b88c2fe00 Ancestors: ToolBuilder-Morphic-mt.179 Due to popular request, provide support for dialogs to behave more like pop-up menus, that is, dismiss them if you click outside their bounds. Apply this pop-up-menu behavior to all list-choosing dialogs. =============== Diff against ToolBuilder-Morphic-mt.179 =============== Item was changed: ----- Method: ListChooser>>buildWith: (in category 'building') ----- buildWith: builder | dialogSpec searchBarHeight listSpec fieldSpec | searchBarHeight := Preferences standardDefaultTextFont height * 2. dialogSpec := builder pluggableDialogSpec new model: self; title: #title; closeAction: #closed; extent: self initialExtent; + autoCancel: true; "behave like a pop-up menu" children: OrderedCollection new; buttons: OrderedCollection new; yourself. listSpec := builder pluggableListSpec new. listSpec model: self; list: #items; getIndex: #selectedIndex; setIndex: #selectedIndex:; doubleClick: #accept; "keystrokePreview: #keyStrokeFromList:;" autoDeselect: false; name: #list; frame: (LayoutFrame fractions: (0@0 corner: 1@1) offsets: (0@searchBarHeight corner: 0@0)). dialogSpec children add: listSpec. fieldSpec := builder pluggableInputFieldSpec new. fieldSpec model: self; getText: #searchText; editText: #searchText:; setText: #acceptText:; selection: #textSelection; menu: nil; indicateUnacceptedChanges: false; askBeforeDiscardingEdits: false; help: 'Type a string to filter down the listed items'; frame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0@searchBarHeight)). dialogSpec children add: fieldSpec. "Buttons" dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: #acceptLabel; action: #accept; enabled: #canAcceptOrAdd; color: #acceptColor). dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: 'Cancel'; action: #cancel; color: #cancelColor). dialogMorph := builder build: dialogSpec. dialogMorph addKeyboardCaptureFilter: self. listMorph := builder widgetAt: #list. listMorph allowEmptyFilterResult: true. ^ dialogMorph! Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableDialog: (in category 'widgets optional') ----- buildPluggableDialog: aSpec | widget | widget := self dialogClass new. self register: widget id: aSpec name. widget model: aSpec model. "Set child dependent layout properties. The pane morph holds the special contents." widget paneMorph wantsPaneSplitters: (aSpec wantsResizeHandles ifNil: [true]). self setLayoutHintsFor: widget paneMorph spec: aSpec. widget paneMorph layoutInset: (aSpec padding ifNil: [ProportionalSplitterMorph gripThickness]). widget paneMorph cellInset: (aSpec spacing ifNil: [ProportionalSplitterMorph gripThickness]). widget paneMorph wantsPaneSplitters ifTrue: [widget paneMorph addCornerGrips"addEdgeGrips"]. "Now create the children." panes := OrderedCollection new. aSpec children isSymbol ifTrue: [ widget getChildrenSelector: aSpec children. widget update: aSpec children] ifFalse: [ self buildAll: aSpec children in: widget paneMorph]. "Now create the buttons." aSpec buttons isSymbol ifTrue: [ widget getButtonsSelector: aSpec buttons. widget update: aSpec buttons] ifFalse: [ self buildAll: aSpec buttons in: widget buttonRowMorph. widget updateButtonProperties]. aSpec title ifNotNil: [:label | label isSymbol ifTrue:[widget getTitleSelector: label; update: label] ifFalse:[widget title: label]]. aSpec message ifNotNil: [:label | label isSymbol ifTrue:[widget getMessageSelector: label; update: label] ifFalse:[widget message: label]]. + + "Interaction behavior." + aSpec autoCancel ifNotNil: [:b | widget autoCancel: b]. + aSpec exclusive ifNotNil: [:b | widget exclusive: b]. widget closeDialogSelector: aSpec closeAction. self buildHelpFor: widget spec: aSpec. "Everything is shrink-wrapped around the pane morph." widget paneMorph extent: (aSpec extent ifNil:[widget initialExtent]). ^ widget! Item was changed: ----- Method: MorphicUIManager>>chooseFrom:lines:title: (in category 'ui requests') ----- chooseFrom: aList lines: linesArray title: aString "Choose an item from the given list. Answer the index of the selected item." aList size <= 7 ifTrue: [ | dialog | dialog := DialogWindow new title: 'Please Choose'; message: aString; filterEnabled: true; + autoCancel: true; yourself. aList doWithIndex: [:ea :index | dialog createButton: ea value: index]. dialog selectedButtonIndex: 1. ^ dialog getUserResponseAtHand ifNil: [0]]. ^ ListChooser chooseFrom: aList title: aString! From commits at source.squeak.org Fri Aug 5 07:51:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 07:51:19 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1234.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1234.mcz ==================== Summary ==================== Name: Morphic-mt.1234 Author: mt Time: 5 August 2016, 9:50:39.938358 am UUID: f9e6aac9-cfa2-2a45-b4e8-7af937d0d306 Ancestors: Morphic-mt.1233 Due to popular request, provide support for dialogs to behave more like pop-up menus, that is, dismiss them if you click outside their bounds. =============== Diff against Morphic-mt.1233 =============== Item was changed: Morph subclass: #DialogWindow + instanceVariableNames: 'titleMorph messageMorph paneMorph buttonRow result selectedButton cancelButton timeout preferredPosition keyMap exclusive filter filterEnabled filterMorph autoCancel' - instanceVariableNames: 'titleMorph messageMorph paneMorph buttonRow result selectedButton cancelButton timeout preferredPosition keyMap exclusive filter filterEnabled filterMorph' classVariableNames: 'GradientDialog RoundedDialogCorners UseWiggleAnimation' poolDictionaries: '' category: 'Morphic-Windows'! !DialogWindow commentStamp: '' prior: 0! A DialogBoxMorph is Morph used in simple yes/no/confirm dialogs. Strongly modal.! Item was added: + ----- Method: DialogWindow>>autoCancel (in category 'accessing') ----- + autoCancel + "Whether to automatically cancel and close this dialog if the user clicks outside it. Like dismissing a pop-up menu." + + ^ autoCancel! Item was added: + ----- Method: DialogWindow>>autoCancel: (in category 'accessing') ----- + autoCancel: aBoolean + + autoCancel := aBoolean.! Item was changed: ----- Method: DialogWindow>>initialize (in category 'initialization') ----- initialize super initialize. self changeTableLayout; listDirection: #topToBottom; hResizing: #shrinkWrap; vResizing: #shrinkWrap; setProperty: #indicateKeyboardFocus toValue: #never. self createTitle: 'Dialog'. self createBody. self setDefaultParameters. keyMap := Dictionary new. exclusive := true. + autoCancel := false. preferredPosition := ActiveWorld center.! Item was changed: ----- Method: DialogWindow>>mouseDown: (in category 'events') ----- mouseDown: event self stopAutoTrigger. "Always bring me to the front since I am modal" self comeToFront. + (self containsPoint: event position) ifFalse: [ + ^ self autoCancel + ifTrue: [self cancelDialog] + ifFalse: [self flash]]. - (self containsPoint: event position) - ifFalse:[^ self flash]. event hand waitForClicksOrDrag: self event: event selectors: { nil. nil. nil. #startDrag: } threshold: HandMorph dragThreshold.! From commits at source.squeak.org Fri Aug 5 08:02:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 08:02:10 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.181.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.181.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.181 Author: mt Time: 5 August 2016, 10:01:55.176358 am UUID: a6c5824c-2256-224a-9920-73aa1cf1ca16 Ancestors: ToolBuilder-Morphic-mt.180 Improve help text for list choosers that allow adding new items such as the dialog for adding a new message category does. =============== Diff against ToolBuilder-Morphic-mt.180 =============== Item was changed: ----- Method: ListChooser>>addAllowed (in category 'accessing') ----- addAllowed + ^ addAllowed ifNil: [false]! - ^ addAllowed! Item was changed: ----- Method: ListChooser>>buildWith: (in category 'building') ----- buildWith: builder | dialogSpec searchBarHeight listSpec fieldSpec | searchBarHeight := Preferences standardDefaultTextFont height * 2. dialogSpec := builder pluggableDialogSpec new model: self; title: #title; closeAction: #closed; extent: self initialExtent; autoCancel: true; "behave like a pop-up menu" children: OrderedCollection new; buttons: OrderedCollection new; yourself. listSpec := builder pluggableListSpec new. listSpec model: self; list: #items; getIndex: #selectedIndex; setIndex: #selectedIndex:; doubleClick: #accept; "keystrokePreview: #keyStrokeFromList:;" autoDeselect: false; name: #list; frame: (LayoutFrame fractions: (0@0 corner: 1@1) offsets: (0@searchBarHeight corner: 0@0)). dialogSpec children add: listSpec. fieldSpec := builder pluggableInputFieldSpec new. fieldSpec model: self; getText: #searchText; editText: #searchText:; setText: #acceptText:; selection: #textSelection; menu: nil; indicateUnacceptedChanges: false; askBeforeDiscardingEdits: false; + help: (self addAllowed ifTrue: ['Type new or filter existing...' translated] ifFalse: ['Type to filter existing...' translated]); - help: 'Type a string to filter down the listed items'; frame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0@searchBarHeight)). dialogSpec children add: fieldSpec. "Buttons" dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: #acceptLabel; action: #accept; enabled: #canAcceptOrAdd; color: #acceptColor). dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: 'Cancel'; action: #cancel; color: #cancelColor). dialogMorph := builder build: dialogSpec. dialogMorph addKeyboardCaptureFilter: self. listMorph := builder widgetAt: #list. listMorph allowEmptyFilterResult: true. ^ dialogMorph! From Das.Linux at gmx.de Fri Aug 5 08:09:34 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Fri Aug 5 08:09:39 2016 Subject: [squeak-dev] Accidential interning of symbols via the world's search bar? Not here... In-Reply-To: <1470380000398-4909727.post@n4.nabble.com> References: <1470380000398-4909727.post@n4.nabble.com> Message-ID: <72DC230B-6D5A-4B2F-BC20-EDE672E2BFDF@gmx.de> On 05.08.2016, at 08:53, marcel.taeumel wrote: > Hi, there. > > In the last board meeting, Tim reported that our search bar interns search > strings as symbols automatically. > > I cannot confirm that. Does anybody else have this issue? it may be the MessageFinder, right? Or anybody sending #asSymbol ? > > Bset, > Marcel From smalltalker2 at mac.com Fri Aug 5 08:11:26 2016 From: smalltalker2 at mac.com (John Pfersich) Date: Fri Aug 5 08:11:31 2016 Subject: [squeak-dev] Raspberry Pi info Message-ID: <759AE397-DFAE-4333-81B5-0222E469A1E2@mac.com> I noticed that the Raspberry Pi page SDK section on Wikipedia has no mention of Squeak or Scratch on it. The url is https://en.m.wikipedia.org/wiki/Raspberry_Pi#Software_development_tools. I'd add something myself but figured Tim would probably do a better job of it. Sent from my iPad -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160805/93f20f60/attachment.htm From commits at source.squeak.org Fri Aug 5 08:21:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 08:21:51 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.64.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.64.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.64 Author: mt Time: 5 August 2016, 10:21:41.942358 am UUID: a2cd25be-24e5-c743-bc43-928c959fb71e Ancestors: PreferenceBrowser-mt.63 Fixes some usability issues saving/loading sets of preferences. Improve wording to not use "theme" for sets of preferences anymore to not confuse the user in the face of the new UI themes. (Yes, UI themes could, theoretically, store any preference. This is just a minor trade-off for now.) =============== Diff against PreferenceBrowser-mt.63 =============== Item was changed: ----- Method: PreferenceBrowser>>defaultSelected (in category 'preferences search') ----- defaultSelected + + (UIManager default + confirm: 'Do you really want to restorethe default\preferences?\\If you want to keep the current state,\you have to save it first.' translated withCRs + title: 'Restore Preferences') ifFalse: [^ self]. + + Preferences chooseInitialSettings! Item was changed: ----- Method: PreferenceBrowser>>loadFromDiskSelected (in category 'preferences search') ----- loadFromDiskSelected + + (UIManager default + confirm: 'Do you really want to restore your\personal preferences from disk?\\The file ''my.prefs'' will be loaded.' translated withCRs + title: 'Restore Preferences from Disk') ifFalse: [^ self]. + preferences restorePreferencesFromDisk! Item was changed: ----- Method: PreferenceBrowser>>loadSelected (in category 'preferences search') ----- loadSelected + + (UIManager default + confirm: 'Do you really want to restore\your personal preferences?' translated withCRs + title: 'Restore Preferences') ifFalse: [^ self]. + + preferences restorePersonalPreferences.! - preferences restorePersonalPreferences ! Item was changed: ----- Method: PreferenceBrowser>>saveSelected (in category 'preferences search') ----- saveSelected + + (UIManager default + confirm: 'Do you really want to overwrite\your personal preferences?' translated withCRs + title: 'Save Preferences') ifFalse: [^ self]. + + preferences savePersonalPreferences.! - preferences savePersonalPreferences ! Item was changed: ----- Method: PreferenceBrowser>>saveToDiskSelected (in category 'preferences search') ----- saveToDiskSelected + + (UIManager default + confirm: 'Do you really want to overwrite your\personal preferences on disk?\\The file ''my.prefs'' will be updated.' translated withCRs + title: 'Save Preferences to Disk') ifFalse: [^ self]. + preferences storePreferencesToDisk! Item was changed: ----- Method: PreferenceBrowserMorph>>themeButton (in category 'submorphs - buttons') ----- themeButton ^themeButton ifNil: [themeButton := self basicButton + label: 'more ...' translated; - label: 'theme...' translated; action: #themeSelected; + setBalloonText: 'Presents you with a menu of sets or preferences; each item''s balloon-help will tell you about the particular set. If you choose one, many different preferences that come along are set at the same time; you can subsequently change any settings by using a Preferences Panel' translated].! - setBalloonText: - 'Numerous "Preferences" govern many things about the ', - 'way Squeak looks and behaves. Set individual preferences ', - 'using a "Preferences" panel. Set an entire "theme" of many ', - 'Preferences all at the same time by pressing this "change ', - 'theme" button and choosing a theme to install. Look in ', - 'category "themes" in Preferences class to see what each ', - 'theme does; add your own methods to the "themes" ', - 'category and they will show up in the list of theme ', - 'choices.' translated].! From commits at source.squeak.org Fri Aug 5 08:23:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 08:23:03 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1235.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1235.mcz ==================== Summary ==================== Name: Morphic-mt.1235 Author: mt Time: 5 August 2016, 10:22:23.493358 am UUID: 43b23bfb-3c3e-8744-82f5-649eac497e1b Ancestors: Morphic-mt.1234 Improve wording to not use "theme" for sets of preferences anymore to not confuse the user in the face of the new UI themes. (Yes, UI themes could, theoretically, store any preference. This is just a minor trade-off for now.) =============== Diff against Morphic-mt.1234 =============== Item was changed: ----- Method: TheWorldMenu>>appearanceMenu (in category 'construction') ----- appearanceMenu "Build the appearance menu for the world." ^self fillIn: (self menu: 'appearance...') from: { {'preferences...' . { self . #openPreferencesBrowser} . 'Opens a "Preferences Browser" which allows you to alter many settings' } . + {'choose set of preferences...' . { Preferences . #offerThemesMenu} . 'Presents you with a menu of sets or preferences; each item''s balloon-help will tell you about the particular set. If you choose one, many different preferences that come along are set at the same time; you can subsequently change any settings by using a Preferences Panel'} . - {'choose theme...' . { Preferences . #offerThemesMenu} . 'Presents you with a menu of themes; each item''s balloon-help will tell you about the theme. If you choose a theme, many different preferences that come along with that theme are set at the same time; you can subsequently change any settings by using a Preferences Panel'} . nil . {'system fonts...' . { self . #standardFontDo} . 'Choose the standard fonts to use for code, lists, menus, window titles, etc.'}. {'text highlight color...' . { Preferences . #chooseTextHighlightColor} . 'Choose which color should be used for text highlighting in Morphic.'}. {'insertion point color...' . { Preferences . #chooseInsertionPointColor} . 'Choose which color to use for the text insertion point in Morphic.'}. {'keyboard focus color' . { Preferences . #chooseKeyboardFocusColor} . 'Choose which color to use for highlighting which pane has the keyboard focus'}. nil. {#menuColorString . { self . #toggleMenuColorPolicy} . 'Governs whether menu colors should be derived from the desktop color.'}. {#roundedCornersString . { self . #toggleRoundedCorners} . 'Governs whether morphic windows and menus should have rounded corners.'}. nil. {'full screen on' . { DisplayScreen . #fullScreenOn} . 'puts you in full-screen mode, if not already there.'}. {'full screen off' . { DisplayScreen . #fullScreenOff} . 'if in full-screen mode, takes you out of it.'}. nil. {'set display depth...' . {self. #setDisplayDepth} . 'choose how many bits per pixel.'}. {'set desktop color...' . {self. #changeBackgroundColor} . 'choose a uniform color to use as desktop background.'}. {'set gradient color...' . {self. #setGradientColor} . 'choose second color to use as gradient for desktop background.'}. {'use texture background' . { #myWorld . #setStandardTexture} . 'apply a graph-paper-like texture background to the desktop.'}. nil. {'clear turtle trails from desktop' . { #myWorld . #clearTurtleTrails} . 'remove any pigment laid down on the desktop by objects moving with their pens down.'}. {'pen-trail arrowhead size...' . { Preferences. #setArrowheads} . 'choose the shape to be used in arrowheads on pen trails.'}. }! From commits at source.squeak.org Fri Aug 5 08:23:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 08:24:00 2016 Subject: [squeak-dev] The Trunk: System-mt.868.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.868.mcz ==================== Summary ==================== Name: System-mt.868 Author: mt Time: 5 August 2016, 10:23:34.104358 am UUID: 581dff6a-09b1-fb49-9dda-cc569326f2db Ancestors: System-mt.867 Improve wording to not use "theme" for sets of preferences anymore to not confuse the user in the face of the new UI themes. (Yes, UI themes could, theoretically, store any preference. This is just a minor trade-off for now.) =============== Diff against System-mt.867 =============== Item was changed: ----- Method: Preferences class>>offerThemesMenu (in category 'themes - tools') ----- offerThemesMenu "Put up a menu offering the user a choice of themes. Each theme is represented by a method in category #themes in Preferences class. The comment at the front of each method is used as the balloon help for the theme" "Preferences offerThemesMenu" | selectors aMenu | selectors := self class allMethodsInCategory: #themes. selectors := selectors select: [:sel | sel numArgs = 0]. aMenu := MenuMorph new defaultTarget: self. + aMenu addTitle: 'Choose a set of preferences to install' translated. - aMenu addTitle: 'Choose a theme to install' translated. selectors do: [:sel | aMenu add: sel target: self selector: #installTheme: argument: sel. aMenu balloonTextForLastItem: (self class firstCommentAt: sel)]. aMenu addLine. + aMenu add: 'browse details...' translated target: self action: #browseThemes. + aMenu balloonTextForLastItem: 'Puts up a tool that will allow you to view and edit the code underlying all of the available preference sets' translated. - aMenu add: 'browse themes' translated target: self action: #browseThemes. - aMenu balloonTextForLastItem: 'Puts up a tool that will allow you to view and edit the code underlying all of the available themes' translated. aMenu popUpInWorld. "(Workspace new contents: 'here is an example of a new window with your new theme installed' translated) openLabel: 'Testing one two three'"! From commits at source.squeak.org Fri Aug 5 09:06:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 09:06:05 2016 Subject: [squeak-dev] The Trunk: System-mt.869.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.869.mcz ==================== Summary ==================== Name: System-mt.869 Author: mt Time: 5 August 2016, 11:05:27.804358 am UUID: a8aff4d5-244a-1746-a623-3f40d2c405f7 Ancestors: System-mt.868 Custom project background for the standard Squeak theme. (Thanks Tobias!) =============== Diff against System-mt.868 =============== Item was changed: ----- Method: SqueakTheme class>>create (in category 'instance creation') ----- create "This is the default theme for Squeak. self create. " ^ (self named: 'Squeak') in: [:theme | "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: (TranslucentColor r: 0.3 g: 0.5 b: 0.5 alpha: 0.5); set: #keyboardFocusWidth for: #Morph to: 3; set: #softShadowColor for: #Morph to: (Color black alpha: 0.01); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (Color black alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1@1. + theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self linenblue). + self addFonts: theme; addWindowColors: theme; addSyntaxHighlighting: theme; addMenusAndDockingBars: theme; addDialogs: theme; addButtons: theme; addScrollables: theme. theme]! Item was added: + ----- Method: SqueakTheme class>>linenblue (in category 'images') ----- (excessive size, no diff calculated) From commits at source.squeak.org Fri Aug 5 09:08:56 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 09:08:58 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1236.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1236.mcz ==================== Summary ==================== Name: Morphic-mt.1236 Author: mt Time: 5 August 2016, 11:08:10.113358 am UUID: 04c11a0e-41ce-6947-85fb-dc2f7d340ff0 Ancestors: Morphic-mt.1235 Due to popular request, make the background for Morphic projects also part of the UI theme -- unless the user did set a custom background. Still propagate the current (custom) background to freshly opened Morphic projects. =============== Diff against Morphic-mt.1235 =============== Item was added: + ----- Method: MorphicProject class>>themeProperties (in category 'preferences') ----- + themeProperties + + ^ super themeProperties, { + { #background. 'Colors'. 'Color or fill-style for projects. Use-defined background will not be overwritten.' }. + }! Item was added: + ----- Method: MorphicProject>>applyUserInterfaceTheme (in category 'updating') ----- + applyUserInterfaceTheme + + super applyUserInterfaceTheme. + self setWorldBackground: false.! Item was added: + ----- Method: MorphicProject>>canApplyUserInterfaceTheme (in category 'updating') ----- + canApplyUserInterfaceTheme + + ^ true! Item was changed: ----- Method: MorphicProject>>initialize (in category 'initialize') ----- initialize "Initialize a new Morphic Project" super initialize. world := PasteUpMorph newWorldForProject: self. + self setWorldBackground: true. - world fillStyle: (Project current isMorphic ifTrue: [Project current world fillStyle] ifFalse: [self class defaultFill]). Locale switchToID: CurrentProject localeID. Preferences useVectorVocabulary ifTrue: [world installVectorVocabulary]! Item was changed: ----- Method: MorphicProject>>installPasteUpAsWorld: (in category 'initialize') ----- installPasteUpAsWorld: pasteUpMorph "(ProjectViewMorph newMorphicProjectOn: aPasteUpMorph) openInWorld." + world := pasteUpMorph beWorldForProject: self. + self setWorldBackground: true.! - world := pasteUpMorph beWorldForProject: self! Item was changed: ----- Method: MorphicProject>>setAsBackground: (in category 'utilities') ----- setAsBackground: aForm "Set aForm as a background image." | thisWorld newColor | thisWorld := self currentWorld. newColor := InfiniteForm with: aForm. aForm rememberCommand: (Command new cmdWording: 'set background to a picture' translated; undoTarget: thisWorld selector: #color: argument: thisWorld color; redoTarget: thisWorld selector: #color: argument: newColor). + thisWorld color: newColor. + thisWorld setProperty: #hasCustomBackground toValue: true. - thisWorld color: newColor ! Item was added: + ----- Method: MorphicProject>>setWorldBackground: (in category 'initialize') ----- + setWorldBackground: force + + ((world hasProperty: #hasCustomBackground) and: [force not]) + ifTrue: [^ self]. + + "If the user has a custom background, propagate it into the new project." + ((Project current ~~ self and: [Project current isMorphic]) and: [Project current world hasProperty: #hasCustomBackground]) + ifTrue: [ + world fillStyle: Project current world fillStyle. + world setProperty: #hasCustomBackground toValue: true] + ifFalse: [ + world removeProperty: #hasCustomBackground. + world fillStyle: (self userInterfaceTheme background ifNil: [self class defaultFill])].! From commits at source.squeak.org Fri Aug 5 09:14:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 09:14:54 2016 Subject: [squeak-dev] The Trunk: System-mt.870.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.870.mcz ==================== Summary ==================== Name: System-mt.870 Author: mt Time: 5 August 2016, 11:14:23.955358 am UUID: 7799c610-8cbd-2044-9262-c9368e8a33b8 Ancestors: System-mt.869 On aggressive clean-up, which the release builder does, remove all UI themes and recreate the basic ones. =============== Diff against System-mt.869 =============== Item was added: + ----- Method: UserInterfaceTheme class>>cleanUp: (in category 'initialize-release') ----- + cleanUp: aggressive + + aggressive ifTrue: [ + All := nil. + SqueakTheme create; createDuller; createClassic. + SolarizedTheme createDark; createLight. + MonokaiTheme createDark. + CommunityTheme createDark].! From commits at source.squeak.org Fri Aug 5 09:16:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 09:16:21 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.141.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.141.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.141 Author: mt Time: 5 August 2016, 11:16:12.294358 am UUID: 30cc15fe-c58a-1d43-96e0-632749fea4b1 Ancestors: ReleaseBuilder-mt.140 Choose Squeak's default theme for the release. =============== Diff against ReleaseBuilder-mt.140 =============== Item was changed: ----- Method: ReleaseBuilder class>>configureDesktop (in category 'scripts') ----- configureDesktop "Open tools, multimedia content, etc." self setDisplayExtent: 800 @ 600. self setProjectBackground: Color darkGray. + (UserInterfaceTheme named: 'Squeak') apply. + - self deleteAllWindows. "Replace docking bar instance in case its code has changed." Project current removeMainDockingBar. TheWorldMainDockingBar updateInstances. self openWelcomeWorkspaces.! Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. ToolBuilder openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. Preferences insertionPointColor: Color red. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsActiveOnlyOnTop: true. Model windowActiveOnFirstClick: false. "Not good for 800x600" Preferences disable: #showSplitterHandles; enable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false. ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; disable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 6. SystemWindow roundedWindowCorners: false. + DialogWindow roundedDialogCorners: false. - PluggableButtonMorph roundedButtonCorners: false. - FillInTheBlankMorph roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. + PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." - ScrollBar gradientScrollBar: false. SystemWindow gradientWindow: false. + DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. + ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. + Morph useSoftDropShadow: true. - Morph useSoftDropShadow: true.. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! Item was changed: ----- Method: ReleaseBuilder class>>setProjectBackground: (in category 'scripts - support') ----- setProjectBackground: aFormOrColorOrFillStyle MorphicProject defaultFill: (aFormOrColorOrFillStyle isForm ifTrue: [InfiniteForm with: aFormOrColorOrFillStyle] ifFalse: [aFormOrColorOrFillStyle isColor ifTrue: [SolidFillStyle color: aFormOrColorOrFillStyle] ifFalse: [aFormOrColorOrFillStyle]]). + ActiveWorld fillStyle: MorphicProject defaultFill. + ActiveWorld removeProperty: #hasCustomBackground.! - ActiveWorld fillStyle: MorphicProject defaultFill.! From commits at source.squeak.org Fri Aug 5 09:21:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 09:21:11 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.142.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.142.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.142 Author: mt Time: 5 August 2016, 11:21:02.878358 am UUID: 648b2806-04d9-714b-b92c-3792d3dfe4a6 Ancestors: ReleaseBuilder-mt.141 More fixes/updates for the default preferences. =============== Diff against ReleaseBuilder-mt.141 =============== Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. ToolBuilder openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. + + HandMorph sendMouseWheelToKeyboardFocus: false. + HandMorph synthesizeMouseWheelEvents: true. + - "Text input." TextEditor autoEnclose: true ; autoIndent: true ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. - Preferences - insertionPointColor: Color red. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. + SystemWindow windowsRaiseOnClick: true. + SystemWindow windowTitleActiveOnFirstClick: true. - SystemWindow windowsActiveOnlyOnTop: true. Model windowActiveOnFirstClick: false. "Not good for 800x600" Preferences disable: #showSplitterHandles; + disable: #fastDragWindowForMorphic. - enable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false. ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; disable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 6. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From Marcel.Taeumel at hpi.de Fri Aug 5 08:59:52 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 5 09:45:09 2016 Subject: [squeak-dev] Re: Accidential interning of symbols via the world's search bar? Not here... In-Reply-To: <72DC230B-6D5A-4B2F-BC20-EDE672E2BFDF@gmx.de> References: <1470380000398-4909727.post@n4.nabble.com> <72DC230B-6D5A-4B2F-BC20-EDE672E2BFDF@gmx.de> Message-ID: <1470387592334-4909756.post@n4.nabble.com> Tobias Pape wrote > On 05.08.2016, at 08:53, marcel.taeumel < > Marcel.Taeumel@ > > wrote: > >> Hi, there. >> >> In the last board meeting, Tim reported that our search bar interns >> search >> strings as symbols automatically. >> >> I cannot confirm that. Does anybody else have this issue? > > it may be the MessageFinder, right? > Or anybody sending #asSymbol ? > >> >> Bset, >> Marcel Could not find any suspicious code... -- View this message in context: http://forum.world.st/Accidential-interning-of-symbols-via-the-world-s-search-bar-Not-here-tp4909727p4909756.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Aug 5 14:12:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 14:12:06 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1237.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1237.mcz ==================== Summary ==================== Name: Morphic-mt.1237 Author: mt Time: 5 August 2016, 4:11:08.782141 pm UUID: a38f409a-f401-b445-b275-55ae8c8ae0e0 Ancestors: Morphic-mt.1236 Make #defaultColor fallback in SystemWindow work again. =============== Diff against Morphic-mt.1236 =============== Item was changed: ----- Method: SystemWindow>>paneColor (in category 'colors') ----- paneColor | cc | (cc := self valueOfProperty: #paneColor) ifNotNil: [^cc]. + (model respondsTo: #windowColorToUse) ifTrue: [cc := model windowColorToUse]. - model notNil ifTrue: [cc := model windowColorToUse]. cc ifNil: [cc := paneMorphs isEmptyOrNil ifFalse: [paneMorphs first color]]. cc ifNil: [cc := self defaultColor]. self paneColor: cc. ^cc! From tim at rowledge.org Fri Aug 5 16:11:01 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 5 16:11:02 2016 Subject: [squeak-dev] Raspberry Pi info In-Reply-To: <759AE397-DFAE-4333-81B5-0222E469A1E2@mac.com> References: <759AE397-DFAE-4333-81B5-0222E469A1E2@mac.com> Message-ID: > On 05-08-2016, at 1:11 AM, John Pfersich wrote: > > I noticed that the Raspberry Pi page SDK section on Wikipedia has no mention of Squeak or Scratch on it. The url is https://en.m.wikipedia.org/wiki/Raspberry_Pi#Software_development_tools. I'd add something myself but figured Tim would probably do a better job of it. Good catch. I?ll see if I can make any improvements. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: PWB: Put to Waste Basket From tim at rowledge.org Fri Aug 5 16:36:11 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 5 16:36:17 2016 Subject: [squeak-dev] Accidential interning of symbols via the world's search bar? Not here... In-Reply-To: <72DC230B-6D5A-4B2F-BC20-EDE672E2BFDF@gmx.de> References: <1470380000398-4909727.post@n4.nabble.com> <72DC230B-6D5A-4B2F-BC20-EDE672E2BFDF@gmx.de> Message-ID: > On 05-08-2016, at 1:09 AM, Tobias Pape wrote: > > > On 05.08.2016, at 08:53, marcel.taeumel wrote: > >> Hi, there. >> >> In the last board meeting, Tim reported that our search bar interns search >> strings as symbols automatically. As a quick test open an image (my example is a #16174 update) use search bar to lookup ?fooble? ?fooble? appears in the message finder list in a workspace Symbol lookup: ?fooble? -> #fooble Symbol allSymbols includes: ?fooble? -> true I?m pretty sure it?s SearchBar>>smartSearch:in: causing this since it uses ?input asSymbol? about halfway down. Not sure of the cleanest way to avoid this though. Maybe it would be best to see if the input is a symbol first? Or, better yet IMO, simply drop that entire clause since searching for something I think starts with ?blorp? and annoyingly finding there is also an exact match for ?blorp? when a message list opens is? annoying. Much nicer to get the usual search thingy. Err, wait a minute; that method looks royally messed up. Can anyone see how the last four lines might ever get executed? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Any sufficiently advanced bug is indistinguishable from a feature. From eliot.miranda at gmail.com Fri Aug 5 16:44:18 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Fri Aug 5 16:44:24 2016 Subject: [squeak-dev] The Trunk: System-eem.835.mcz In-Reply-To: <20160708231148.GA64229@shell.msen.com> References: <55908F41-749C-4FAE-A00D-2F6CBF0B9064@gmx.de> <3712B695-BAE6-4AB5-BC56-2B2675558F40@gmx.de> <20160708231148.GA64229@shell.msen.com> Message-ID: Hi David, On Fri, Jul 8, 2016 at 4:11 PM, David T. Lewis wrote: > On Fri, Jul 08, 2016 at 03:35:35PM -0700, Eliot Miranda wrote: > > Hi Tobias, > > > > On Wed, Jul 6, 2016 at 12:23 AM, Tobias Pape wrote: > > > > > > > > On 06.07.2016, at 08:17, Eliot Miranda > wrote: > > > > > > > On Tue, Jul 5, 2016 at 10:21 PM, Tobias Pape > wrote: > > > > > > > > On 06.07.2016, at 01:13, commits@source.squeak.org wrote: > > > > > > > > > Eliot Miranda uploaded a new version of System to project The > Trunk: > > > > > http://source.squeak.org/trunk/System-eem.835.mcz > > > > > > > > > > ==================== Summary ==================== > > > > > > > > > > Name: System-eem.835 > > > > > Author: eem > > > > > Time: 5 July 2016, 6:13:25.980763 pm > > > > > UUID: 44354df1-cecb-414c-a705-daa84b7388dd > > > > > Ancestors: System-eem.834 > > > > > > > > > > Fix reading methods from DataStreams on Spur. Old code used > pre-Spur > > > numLits header format, and was not 64-bit aware. > > > > > > > > > > > > > Does that mean that pre-Spur methods on datastreams cannot be read in > > > Spur images? > > > > That would be a bummer??? > > > > > > > > It needs some kind of version stamp on the stream. Point me to some > > > such and we can switch hit. > > > > > > There is none. > > > I would say, we store the data in the format DataStream already know > > > (which happens to be > > > the Pre-Spur version) and adapt on read. That would ensure backward- > and > > > forward-compatibility: > > > > > > - We could still read CMs serialized in pre-spur. > > > - We could also read Spur-CMs in pre-spur images. > > > > > > Ok. -- break -- > > > I just realized that what you changed was the read part. so no > > > problem here. We could change the part to do things differently > > > when running on spur or non-spur. > > > > > > > The thing is that the two header formats are incompatible. The old one > > allows up to 2^9-1 literals, the new one up to 2^15-1. So staying with > the > > old format limits us. We need some kind of version stamp. Right now > > DataStream and ImageSegment are extremely version-dependent and hence > > restrictive formats. It would be good for someone to revisit them and > try > > and add some kind of versioning information, preferably supporting > backward > > compatibility. > > > > While a bit ad-hoc, but we do have an image format number that is used > for a similar purpose in the saved image files. Would that provide enough > information to serve as a version stamp? > Works for me. The current known formats are maintained in package ImageFormat in the > http://source.squeak.org/VMMaker repository. It is small and independent > of VMMaker, so we could consider moving it into the image if it is of > more general utility. > +1 Dave > _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160805/5ed01664/attachment.htm From bert at freudenbergs.de Fri Aug 5 17:42:25 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Fri Aug 5 17:42:28 2016 Subject: [squeak-dev] Raspberry Pi info In-Reply-To: References: <759AE397-DFAE-4333-81B5-0222E469A1E2@mac.com> Message-ID: On Fri, Aug 5, 2016 at 6:11 PM, tim Rowledge wrote: > > > On 05-08-2016, at 1:11 AM, John Pfersich wrote: > > > > I noticed that the Raspberry Pi page SDK section on Wikipedia has no > mention of Squeak or Scratch on it. The url is https://en.m.wikipedia.org/ > wiki/Raspberry_Pi#Software_development_tools. I'd add something myself > but figured Tim would probably do a better job of it. > > Good catch. I?ll see if I can make any improvements. > You should link to the Pi Foundation's blog post as a citation - that way it's less likely to be debated. - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160805/f8b63711/attachment.htm From tim at rowledge.org Fri Aug 5 18:31:44 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 5 18:31:49 2016 Subject: [squeak-dev] Raspberry Pi info In-Reply-To: References: <759AE397-DFAE-4333-81B5-0222E469A1E2@mac.com> Message-ID: > On 05-08-2016, at 10:42 AM, Bert Freudenberg wrote: > > On Fri, Aug 5, 2016 at 6:11 PM, tim Rowledge wrote: > > > On 05-08-2016, at 1:11 AM, John Pfersich wrote: > > > > I noticed that the Raspberry Pi page SDK section on Wikipedia has no mention of Squeak or Scratch on it. The url is https://en.m.wikipedia.org/wiki/Raspberry_Pi#Software_development_tools. I'd add something myself but figured Tim would probably do a better job of it. > > Good catch. I?ll see if I can make any improvements. > > You should link to the Pi Foundation's blog post as a citation - that way it's less likely to be debated. Wow. That was an unpleasant experience in user interface implementation. I couldn?t add external links using their ?visual editor? stuff at all. Couldn?t make a cite either! Eventually got it done in the amazingly awful plain text editor, which has no assistance at all. I won?t be putting a lot of time into updating wikipedia pages? Still, minor improvement achieved eventually. I suppose somebody else ought to create/link to a page all about how magnificent I am for making Scratch so much better ;-) tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Utinam barbari spatium proprium tuum invadant! = May barbarians invade your personal space! From tim at rowledge.org Fri Aug 5 18:37:53 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 5 18:37:59 2016 Subject: [squeak-dev] Raspberry Pi info In-Reply-To: References: <759AE397-DFAE-4333-81B5-0222E469A1E2@mac.com> Message-ID: > On 05-08-2016, at 11:31 AM, tim Rowledge wrote: > > Still, minor improvement achieved eventually. And oh my goodness, that wikipedia Scratch page. So much awfulness in one place. And the Squeak page could do with a lot of work too. Not least updating to refer to Squeak 5! tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- Calls people to ask them their phone number. From Marcel.Taeumel at hpi.de Fri Aug 5 19:34:54 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 5 20:20:13 2016 Subject: [squeak-dev] Re: Accidential interning of symbols via the world's search bar? Not here... In-Reply-To: References: <1470380000398-4909727.post@n4.nabble.com> <72DC230B-6D5A-4B2F-BC20-EDE672E2BFDF@gmx.de> Message-ID: <1470425694402-4909792.post@n4.nabble.com> tim Rowledge wrote >> On 05-08-2016, at 1:09 AM, Tobias Pape < > Das.Linux@ > > wrote: >> >> >> On 05.08.2016, at 08:53, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >> >>> Hi, there. >>> >>> In the last board meeting, Tim reported that our search bar interns >>> search >>> strings as symbols automatically. > > As a quick test > open an image (my example is a #16174 update) > use search bar to lookup ?fooble? > ?fooble? appears in the message finder list > in a workspace > Symbol lookup: ?fooble? -> #fooble > Symbol allSymbols includes: ?fooble? -> true > > I?m pretty sure it?s SearchBar>>smartSearch:in: causing this since it uses > ?input asSymbol? about halfway down. Not sure of the cleanest way to avoid > this though. Maybe it would be best to see if the input is a symbol first? > Or, better yet IMO, simply drop that entire clause since searching for > something I think starts with ?blorp? and annoyingly finding there is also > an exact match for ?blorp? when a message list opens is? annoying. Much > nicer to get the usual search thingy. > > Err, wait a minute; that method looks royally messed up. Can anyone see > how the last four lines might ever get executed? > > > tim > -- > tim Rowledge; > tim@ > ; http://www.rowledge.org/tim > Any sufficiently advanced bug is indistinguishable from a feature. Hi Tim, I think I copied most of that over from the former SearchBarMorph. Yeah, that #asSymbol is wrong. And the last 4 lines are dead code. Best, Marcel -- View this message in context: http://forum.world.st/Accidential-interning-of-symbols-via-the-world-s-search-bar-Not-here-tp4909727p4909792.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Aug 5 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 5 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160805215502.26246.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068426.html Name: System-cmm.863 Ancestors: System-mt.862 Community Dark Theme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068427.html Name: Morphic-cmm.1230 Ancestors: Morphic-pre.1229 Community Dark Theme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068428.html Name: System-cmm.864 Ancestors: System-cmm.863 Use #dbBackground logical color instead of hard-coded color. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068429.html Name: Morphic-mt.1231 Ancestors: Morphic-cmm.1230 Fix use of theme properties #disabledTextColor in menus and #frameAdornmentWidth in text fields. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068430.html Name: System-mt.865 Ancestors: System-cmm.864 Apply latest theme additions (#disabledTextColor for menus and #frameAdornmentWidth for text fields) to all themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068431.html Name: Morphic-mt.1232 Ancestors: Morphic-mt.1231 Old-style balloon morph should be themeable, too. I heard so. :-) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068432.html Name: Morphic-mt.1233 Ancestors: Morphic-mt.1232 Fixes a bug in dialog windows that occured when setting a keyboard shortcut for buttons whose labels begin with the same letters. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068433.html Name: System-mt.866 Ancestors: System-mt.865 Harmonize and clean-up theme creation code for old-style and new-style balloon morphs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068434.html Name: ToolBuilder-Morphic-mt.179 Ancestors: ToolBuilder-Morphic-mt.178 Fixes a bug that prevented the creation of message categories in ProtoObject. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068435.html Name: System-mt.867 Ancestors: System-mt.866 Make disabled buttons in Solarized theme a little bit more subtle. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068436.html Name: ToolBuilder-Kernel-mt.102 Ancestors: ToolBuilder-Kernel-mt.101 Due to popular request, provide support for dialogs to behave more like pop-up menus, that is, dismiss them if you click outside their bounds. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068437.html Name: ToolBuilder-Morphic-mt.180 Ancestors: ToolBuilder-Morphic-mt.179 Due to popular request, provide support for dialogs to behave more like pop-up menus, that is, dismiss them if you click outside their bounds. Apply this pop-up-menu behavior to all list-choosing dialogs. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068438.html Name: Morphic-mt.1234 Ancestors: Morphic-mt.1233 Due to popular request, provide support for dialogs to behave more like pop-up menus, that is, dismiss them if you click outside their bounds. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068439.html Name: ToolBuilder-Morphic-mt.181 Ancestors: ToolBuilder-Morphic-mt.180 Improve help text for list choosers that allow adding new items such as the dialog for adding a new message category does. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068440.html Name: PreferenceBrowser-mt.64 Ancestors: PreferenceBrowser-mt.63 Fixes some usability issues saving/loading sets of preferences. Improve wording to not use "theme" for sets of preferences anymore to not confuse the user in the face of the new UI themes. (Yes, UI themes could, theoretically, store any preference. This is just a minor trade-off for now.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068441.html Name: Morphic-mt.1235 Ancestors: Morphic-mt.1234 Improve wording to not use "theme" for sets of preferences anymore to not confuse the user in the face of the new UI themes. (Yes, UI themes could, theoretically, store any preference. This is just a minor trade-off for now.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068442.html Name: System-mt.868 Ancestors: System-mt.867 Improve wording to not use "theme" for sets of preferences anymore to not confuse the user in the face of the new UI themes. (Yes, UI themes could, theoretically, store any preference. This is just a minor trade-off for now.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068443.html Name: System-mt.869 Ancestors: System-mt.868 Custom project background for the standard Squeak theme. (Thanks Tobias!) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068444.html Name: Morphic-mt.1236 Ancestors: Morphic-mt.1235 Due to popular request, make the background for Morphic projects also part of the UI theme -- unless the user did set a custom background. Still propagate the current (custom) background to freshly opened Morphic projects. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068445.html Name: System-mt.870 Ancestors: System-mt.869 On aggressive clean-up, which the release builder does, remove all UI themes and recreate the basic ones. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068446.html Name: ReleaseBuilder-mt.141 Ancestors: ReleaseBuilder-mt.140 Choose Squeak's default theme for the release. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068447.html Name: ReleaseBuilder-mt.142 Ancestors: ReleaseBuilder-mt.141 More fixes/updates for the default preferences. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068448.html Name: Morphic-mt.1237 Ancestors: Morphic-mt.1236 Make #defaultColor fallback in SystemWindow work again. ============================================= From commits at source.squeak.org Sat Aug 6 06:35:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 6 06:35:51 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.39.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.39.mcz ==================== Summary ==================== Name: 51Deprecated-mt.39 Author: mt Time: 6 August 2016, 8:35:43.543437 am UUID: c60f52f8-29e0-4b45-a72f-ab3caefcc112 Ancestors: 51Deprecated-mt.38 Fix typo. =============== Diff against 51Deprecated-mt.38 =============== Item was changed: ----- Method: Preferences class>>setWindowColorFor:to: (in category '*51Deprecated-window colors') ----- setWindowColorFor: modelSymbol to: incomingColor | aColor | self deprecated: 'Configure UI themes directly.'. aColor := incomingColor asNontranslucentColor. (aColor = ColorPickerMorph perniciousBorderColor or: [aColor = Color black]) ifTrue: [^ self]. + UserInterfaceTheme current set: #customWindowColor for: modelSymbol to: aColor. ! - UserInterfaceTheme set: #customWindowColor for: modelSymbol to: aColor. ! From commits at source.squeak.org Sat Aug 6 07:29:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 6 07:29:46 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1238.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1238.mcz ==================== Summary ==================== Name: Morphic-mt.1238 Author: mt Time: 6 August 2016, 9:29:03.062437 am UUID: f2447b81-24f0-fa4b-bb72-557b1ae594d3 Ancestors: Morphic-mt.1237 Fixes a regression in "query symbol" autocompletion in text fields, triggered via CMD+Q. It now also cycles through all symbols including message categories again. There will be spaces inserted for messages just like in Squeak 5.0. Still, the text cursor will always remain at the end of the completed symbol due to the mechanis of the text editor command history. Undoing after cycling through many suggestions will revert to the initial input. =============== Diff against Morphic-mt.1237 =============== Item was changed: ----- Method: TextEditor>>querySymbol: (in category 'typing/selecting keys') ----- querySymbol: aKeyboardEvent "Invoked by Ctrl-q to query the Symbol table and display alternate symbols." | hintText lastOffering offering | self isTypingIn ifFalse: [ self selectPrecedingIdentifier. hintText := self selection string] ifTrue: [ self history current type = #query ifFalse: [ self closeTypeIn. self selectPrecedingIdentifier. hintText := self selection string] ifTrue: [ self history hasPrevious ifFalse: [morph flash. self closeTypeIn. ^ true]. - hintText := self history previous contentsAfter string. hintText := hintText copyFrom: (hintText lastIndexOfAnyOf: Character separators, '#' startingAt: hintText size ifAbsent: [0])+1 to: hintText size. + self selectInvisiblyFrom: self history current intervalBefore first to: self stopIndex-1. + lastOffering := self selection string. + lastOffering := (lastOffering copyReplaceAll: ': ' with: ':') withBlanksTrimmed.]]. + + offering := (Symbol thatStarts: hintText skipping: lastOffering) ifNil: [hintText]. + offering := offering copyReplaceAll: ':' with: ': '. + offering last = Character space ifTrue: [offering := offering allButLast]. - - self selectPrecedingIdentifier. - lastOffering := self selection string]]. - offering := '-'. - [offering allSatisfy: [:ea | ea tokenish]] whileFalse: [ - offering := (Symbol thatStarts: hintText skipping: lastOffering) ifNil: [hintText]. - lastOffering := offering]. - self openTypeInFor: #query. self typeAhead nextPutAll: offering. ^ false! From commits at source.squeak.org Sat Aug 6 07:33:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 6 07:33:25 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1239.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1239.mcz ==================== Summary ==================== Name: Morphic-mt.1239 Author: mt Time: 6 August 2016, 9:32:44.887437 am UUID: 5de15dcd-7f64-bb41-9268-ee842ffe5d52 Ancestors: Morphic-mt.1238 Give all existing applications the chance to NOT be themed by the new UI theming mechanism. For example, you can use pluggable buttons and set #noUserInterfaceTheme. Then you can just configure #color, #borderWidth, etc. as usual. Note that this affects primarily morphs that applications use without making specific subclasses such as PluggableButtonMorph, PluggableListMorph, etc. Via subclassing, one can always override Morph >> #canApplyUserInterfaceTheme. =============== Diff against Morphic-mt.1238 =============== Item was changed: ----- Method: Morph>>canApplyUserInterfaceTheme (in category 'visual properties') ----- canApplyUserInterfaceTheme + ^ self isInWorld and: [(self hasProperty: #noUserInterfaceTheme) not]! - ^ self isInWorld! From commits at source.squeak.org Sat Aug 6 09:06:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 6 09:06:53 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1240.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1240.mcz ==================== Summary ==================== Name: Morphic-mt.1240 Author: mt Time: 6 August 2016, 11:06:18.098798 am UUID: f0f2f997-dd26-7544-9175-7ca9e0bebb78 Ancestors: Morphic-mt.1239 Fixes the search bar to not intern search terms as symbols by accident. Add preference to turn off the "smart" in the search bar. It's remains on by default. =============== Diff against Morphic-mt.1239 =============== Item was changed: Model subclass: #SearchBar instanceVariableNames: 'originatingWidget searchTerm selection resultsWidget workspace scratchPad' + classVariableNames: 'UseScratchPad UseSmartSearch' - classVariableNames: 'UseScratchPad' poolDictionaries: '' category: 'Morphic-Menus-DockingBar'! Item was added: + ----- Method: SearchBar class>>useSmartSearch (in category 'preferences') ----- + useSmartSearch + + ^ UseSmartSearch ifNil: [ true ]! Item was added: + ----- Method: SearchBar class>>useSmartSearch: (in category 'preferences') ----- + useSmartSearch: aBoolean + UseSmartSearch := aBoolean.! Item was changed: ----- Method: SearchBar>>smartSearch:in: (in category 'searching') ----- smartSearch: text in: morph "Take the user input and perform an appropriate search" | input newContents | self removeResultsWidget. input := text asString ifEmpty:[^self]. + self class useSmartSearch ifFalse: [^ ToolSet default browseMessageNames: input]. + + "If it is a global or a full class name, browse that class." (Smalltalk bindingOf: input) ifNotNil:[:assoc| | global | - "It's a global or a class" global := assoc value. + ^ToolSet browse: (global isBehavior ifTrue:[global] ifFalse:[global class]) selector: nil]. - ^ToolSet browse: (global isBehavior ifTrue:[global] ifFalse:[global class]) selector: nil. - ]. - (SystemNavigation new allImplementorsOf: input asSymbol) ifNotEmpty:[:list| - ^SystemNavigation new - browseMessageList: list - name: 'Implementors of ' , input - ]. - input first isUppercase ifTrue:[ - (UIManager default classFromPattern: input withCaption: '') ifNotNil:[:aClass| - ^ToolSet browse: aClass selector: nil. - ]. - ] ifFalse:[ - ^ToolSet default browseMessageNames: input - ]. - newContents := input, ' -- not found.'. + "If it is a symbol and there are implementors of it, browse those implementors." + (Symbol lookup: input) ifNotNil: [:selector | + (SystemNavigation new allImplementorsOf: selector) ifNotEmpty:[:list| + ^SystemNavigation new + browseMessageList: list + name: 'Implementors of ' , input]]. + + "If it starts uppercase, browse classes if any. Otherwise, just search for messages." + input first isUppercase + ifTrue: [ + (UIManager default classFromPattern: input withCaption: '') + ifNotNil:[:aClass| ^ToolSet browse: aClass selector: nil] + ifNil: [ + newContents := input, ' -- not found.'. + self searchTerm: newContents. + self selection: (input size+1 to: newContents size). + self currentHand newKeyboardFocus: morph textMorph. + ^ self]] + ifFalse: [ + ToolSet default browseMessageNames: input].! - self searchTerm: newContents. - self selection: (input size+1 to: newContents size). - self currentHand newKeyboardFocus: morph textMorph.! From nicolas.cellier.aka.nice at gmail.com Sat Aug 6 21:29:58 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sat Aug 6 21:30:04 2016 Subject: [squeak-dev] Smallapack In-Reply-To: References: Message-ID: Hi Yoshiki, thanks for reporting, I'll try better... 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima : > I see you have some changes but it appears that evaluating the > Installer do it goes into an infinite loop of #moduleName and > #masOsxModuleName. > > (Thanks again!) > > On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima > wrote: > > But some of TestLapackMatrix tests fail. A few external functions > > cannot be found, it looks like. > > > > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima > > wrote: > >> Great! > >> > >> Before (I got into a meeting and then entered the "Friday mode", I was > >> going down the path of trying to call the Framework functions but > >> copying files anyway was a simpler solution for now. > >> > >> Yes, I got all tests green. Thank you! > >> > >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier > >> wrote: > >>> OK, what I did on my Mac: > >>> > >>> 1) look under the Squeak app and edit the Contents/Info.plist > >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No" > >>> otherwise library loading is restricted to the Squeak app bundle > >>> 3) copy the veclib framework library files (dylib) in same directory as > >>> squeak image > >>> 4) launch Squeak > >>> 5) install Smallapack > >>> follow instruction from > >>> https://github.com/nicolas-cellier-aka-nice/smallapack/ > wiki/SmallapackSqueak > >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' -> > 'libBlas.dylib' > >>> nowadays, cblas and blas are in the same dylib... > >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' -> > >>> 'libLapack.dylib' > >>> idem > >>> 8) re-initialize the cache (I know, I know, there are too many...) > >>> CBlasLibrary install. CLapackLibrary install. LapackMatrix > >>> resetBlasInterfaces; resetLapackInterfaces. > >>> 9) run the TestCBlas suite > >>> > >>> It should be green > >>> I will commit the changes later, and will probably implement > moduleNames as > >>> a Preference (pragma oriented). > >>> No need to override code anymore :) > >>> > >>> I think step 3) is necessary because of ioLoadModuleRaw() in > >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m > >>> https://github.com/OpenSmalltalk/opensmalltalk- > vm/blob/Cog/platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m > >>> It would only look those frameworks: > >>> > >>> static char *frameworks[]= > >>> { > >>> "", > >>> "/CoreServices.framework/Frameworks", > >>> "/ApplicationServices.framework/Frameworks", > >>> "/Carbon.framework/Frameworks", > >>> 0 > >>> }; > >>> > >>> But I did step 3) before I tried 1) + 2), adn did not retry, so maybe > I'm > >>> wrong... > >>> Scanning all the frameworks is not a solution. And what if we want a > >>> specific version? > >>> It would be far better to be able to specify the path to the library > from > >>> within the image like VW... > >>> > >>> > >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier > >>> : > >>>> > >>>> > >>>> > >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier > >>>> : > >>>>> > >>>>> > >>>>> > >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima >: > >>>>>> > >>>>>> First question: > >>>>>> > >>>>>> The Mac OS comes with Accelerate.Framework and that contains BLAS. > >>>>>> But probably I still should compile those libraries, right? > >>>>>> > >>>>> > >>>>> No, it's better to link to accelerated library. > >>>>> I don't have a Mac handy here to verify how to link to it though. > >>>>> I'll be able to check latter in the evening > >>>>> > >>>> > >>>> > >>>> I've downloaded the code, and I see it now: the library names are > >>>> hardcoded (see implementors of moduleName). > >>>> For Mac it is libblas.dylib and libcblas.dylib > >>>> Also note that there is a preference for switching to cblas (blas > >>>> functions with C interface). > >>>> This should be faster because we pass some parameters by value rather > than > >>>> allocating them and pass reference... > >>>> > >>>> Module names could also be replaced by Preferences eventually, but by > now, > >>>> you'll have to override... > >>>> > >>>>>> > >>>>>> > >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima > >>>>>> wrote: > >>>>>> > Thanks! > >>>>>> > > >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier > >>>>>> > wrote: > >>>>>> >> Hi Yoshiki, > >>>>>> >> > >>>>>> >> Thanks for inquiring about Smallapack. > >>>>>> >> > >>>>>> >> This problem has been solved in 2011 as the post tells. > >>>>>> >> Moreover, it was about alignment of squeak objects that was on > >>>>>> >> multiple of 4 > >>>>>> >> on SqueakV3 memory. > >>>>>> >> Spur is 8 byte aligned, so the problem would have also vanished > >>>>>> >> without any > >>>>>> >> patch for those being patient :) > >>>>>> >> > >>>>>> >> For the 15 arguments limit, Smallapack comes with it's own > compiler, > >>>>>> >> so it's > >>>>>> >> a non issue. > >>>>>> >> Maybe I should make the documentation more clear on > >>>>>> >> > >>>>>> >> https://github.com/nicolas-cellier-aka-nice/smallapack/ > wiki/SmallapackSqueak > >>>>>> >> ? > >>>>>> >> > >>>>>> >> Unfortunately, there's no Sparse Matrix representation in Lapack. > >>>>>> >> If you know of a good package for that, it could be integrated. > >>>>>> >> > >>>>>> >> If you have other questions, don't hesitate to ask. > >>>>>> >> > >>>>>> >> cheers > >>>>>> >> > >>>>>> >> Nicolas > >>>>>> >> > >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima < > Yoshiki.Ohshima@acm.org>: > >>>>>> >>> > >>>>>> >>> I am trying to do a bit of linear algebra stuff that involves to > >>>>>> >>> solve > >>>>>> >>> a sparse 2D matrix (for a variation of doing least square fit). > >>>>>> >>> > >>>>>> >>> There was a message from Nicolas: > >>>>>> >>> > >>>>>> >>> > >>>>>> >>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2011- > August/161113.html > >>>>>> >>> > >>>>>> >>> Is this where it stands today, too? It looks like that arg > count > >>>>>> >>> problem is still there in 5.0, but is it in a way non-issue as > it is > >>>>>> >>> still FFI based? > >>>>>> >>> > >>>>>> >>> Thanks! > >>>>>> >>> > >>>>>> >>> -- > >>>>>> >>> -- Yoshiki > >>>>>> >>> > >>>>>> >> > >>>>>> >> > >>>>>> >> > >>>>>> >> > >>>>>> > > >>>>>> > > >>>>>> > > >>>>>> > -- > >>>>>> > -- Yoshiki > >>>>>> > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> -- Yoshiki > >>>>>> > >>>>> > >>>> > >>> > >>> > >>> > >>> > >> > >> > >> > >> -- > >> -- Yoshiki > > > > > > > > -- > > -- Yoshiki > > > > -- > -- Yoshiki > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160806/955e0a79/attachment-0001.htm From commits at source.squeak.org Sat Aug 6 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 6 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160806215502.21192.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068449.html Name: 51Deprecated-mt.39 Ancestors: 51Deprecated-mt.38 Fix typo. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068450.html Name: Morphic-mt.1238 Ancestors: Morphic-mt.1237 Fixes a regression in "query symbol" autocompletion in text fields, triggered via CMD+Q. It now also cycles through all symbols including message categories again. There will be spaces inserted for messages just like in Squeak 5.0. Still, the text cursor will always remain at the end of the completed symbol due to the mechanis of the text editor command history. Undoing after cycling through many suggestions will revert to the initial input. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068451.html Name: Morphic-mt.1239 Ancestors: Morphic-mt.1238 Give all existing applications the chance to NOT be themed by the new UI theming mechanism. For example, you can use pluggable buttons and set #noUserInterfaceTheme. Then you can just configure #color, #borderWidth, etc. as usual. Note that this affects primarily morphs that applications use without making specific subclasses such as PluggableButtonMorph, PluggableListMorph, etc. Via subclassing, one can always override Morph >> #canApplyUserInterfaceTheme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068452.html Name: Morphic-mt.1240 Ancestors: Morphic-mt.1239 Fixes the search bar to not intern search terms as symbols by accident. Add preference to turn off the "smart" in the search bar. It's remains on by default. ============================================= From nicolas.cellier.aka.nice at gmail.com Sat Aug 6 23:56:33 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sat Aug 6 23:56:47 2016 Subject: [squeak-dev] Smallapack In-Reply-To: References: Message-ID: This should be fixed in ConfigurationOfSmallapack-nice.18 BTW, I think you can provide the absolute path to the .dylib instead of copying in local repository... 2016-08-06 23:29 GMT+02:00 Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com>: > Hi Yoshiki, > thanks for reporting, I'll try better... > > > 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima : > >> I see you have some changes but it appears that evaluating the >> Installer do it goes into an infinite loop of #moduleName and >> #masOsxModuleName. >> >> (Thanks again!) >> >> On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima >> wrote: >> > But some of TestLapackMatrix tests fail. A few external functions >> > cannot be found, it looks like. >> > >> > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima >> > wrote: >> >> Great! >> >> >> >> Before (I got into a meeting and then entered the "Friday mode", I was >> >> going down the path of trying to call the Framework functions but >> >> copying files anyway was a simpler solution for now. >> >> >> >> Yes, I got all tests green. Thank you! >> >> >> >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier >> >> wrote: >> >>> OK, what I did on my Mac: >> >>> >> >>> 1) look under the Squeak app and edit the Contents/Info.plist >> >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No" >> >>> otherwise library loading is restricted to the Squeak app bundle >> >>> 3) copy the veclib framework library files (dylib) in same directory >> as >> >>> squeak image >> >>> 4) launch Squeak >> >>> 5) install Smallapack >> >>> follow instruction from >> >>> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/ >> SmallapackSqueak >> >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' -> >> 'libBlas.dylib' >> >>> nowadays, cblas and blas are in the same dylib... >> >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' -> >> >>> 'libLapack.dylib' >> >>> idem >> >>> 8) re-initialize the cache (I know, I know, there are too many...) >> >>> CBlasLibrary install. CLapackLibrary install. LapackMatrix >> >>> resetBlasInterfaces; resetLapackInterfaces. >> >>> 9) run the TestCBlas suite >> >>> >> >>> It should be green >> >>> I will commit the changes later, and will probably implement >> moduleNames as >> >>> a Preference (pragma oriented). >> >>> No need to override code anymore :) >> >>> >> >>> I think step 3) is necessary because of ioLoadModuleRaw() in >> >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >> >>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/ >> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >> >>> It would only look those frameworks: >> >>> >> >>> static char *frameworks[]= >> >>> { >> >>> "", >> >>> "/CoreServices.framework/Frameworks", >> >>> "/ApplicationServices.framework/Frameworks", >> >>> "/Carbon.framework/Frameworks", >> >>> 0 >> >>> }; >> >>> >> >>> But I did step 3) before I tried 1) + 2), adn did not retry, so maybe >> I'm >> >>> wrong... >> >>> Scanning all the frameworks is not a solution. And what if we want a >> >>> specific version? >> >>> It would be far better to be able to specify the path to the library >> from >> >>> within the image like VW... >> >>> >> >>> >> >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier >> >>> : >> >>>> >> >>>> >> >>>> >> >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier >> >>>> : >> >>>>> >> >>>>> >> >>>>> >> >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima > >: >> >>>>>> >> >>>>>> First question: >> >>>>>> >> >>>>>> The Mac OS comes with Accelerate.Framework and that contains BLAS. >> >>>>>> But probably I still should compile those libraries, right? >> >>>>>> >> >>>>> >> >>>>> No, it's better to link to accelerated library. >> >>>>> I don't have a Mac handy here to verify how to link to it though. >> >>>>> I'll be able to check latter in the evening >> >>>>> >> >>>> >> >>>> >> >>>> I've downloaded the code, and I see it now: the library names are >> >>>> hardcoded (see implementors of moduleName). >> >>>> For Mac it is libblas.dylib and libcblas.dylib >> >>>> Also note that there is a preference for switching to cblas (blas >> >>>> functions with C interface). >> >>>> This should be faster because we pass some parameters by value >> rather than >> >>>> allocating them and pass reference... >> >>>> >> >>>> Module names could also be replaced by Preferences eventually, but >> by now, >> >>>> you'll have to override... >> >>>> >> >>>>>> >> >>>>>> >> >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima >> >>>>>> wrote: >> >>>>>> > Thanks! >> >>>>>> > >> >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier >> >>>>>> > wrote: >> >>>>>> >> Hi Yoshiki, >> >>>>>> >> >> >>>>>> >> Thanks for inquiring about Smallapack. >> >>>>>> >> >> >>>>>> >> This problem has been solved in 2011 as the post tells. >> >>>>>> >> Moreover, it was about alignment of squeak objects that was on >> >>>>>> >> multiple of 4 >> >>>>>> >> on SqueakV3 memory. >> >>>>>> >> Spur is 8 byte aligned, so the problem would have also vanished >> >>>>>> >> without any >> >>>>>> >> patch for those being patient :) >> >>>>>> >> >> >>>>>> >> For the 15 arguments limit, Smallapack comes with it's own >> compiler, >> >>>>>> >> so it's >> >>>>>> >> a non issue. >> >>>>>> >> Maybe I should make the documentation more clear on >> >>>>>> >> >> >>>>>> >> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/ >> SmallapackSqueak >> >>>>>> >> ? >> >>>>>> >> >> >>>>>> >> Unfortunately, there's no Sparse Matrix representation in >> Lapack. >> >>>>>> >> If you know of a good package for that, it could be integrated. >> >>>>>> >> >> >>>>>> >> If you have other questions, don't hesitate to ask. >> >>>>>> >> >> >>>>>> >> cheers >> >>>>>> >> >> >>>>>> >> Nicolas >> >>>>>> >> >> >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima < >> Yoshiki.Ohshima@acm.org>: >> >>>>>> >>> >> >>>>>> >>> I am trying to do a bit of linear algebra stuff that involves >> to >> >>>>>> >>> solve >> >>>>>> >>> a sparse 2D matrix (for a variation of doing least square fit). >> >>>>>> >>> >> >>>>>> >>> There was a message from Nicolas: >> >>>>>> >>> >> >>>>>> >>> >> >>>>>> >>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2011- >> August/161113.html >> >>>>>> >>> >> >>>>>> >>> Is this where it stands today, too? It looks like that arg >> count >> >>>>>> >>> problem is still there in 5.0, but is it in a way non-issue as >> it is >> >>>>>> >>> still FFI based? >> >>>>>> >>> >> >>>>>> >>> Thanks! >> >>>>>> >>> >> >>>>>> >>> -- >> >>>>>> >>> -- Yoshiki >> >>>>>> >>> >> >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> > >> >>>>>> > >> >>>>>> > >> >>>>>> > -- >> >>>>>> > -- Yoshiki >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> -- >> >>>>>> -- Yoshiki >> >>>>>> >> >>>>> >> >>>> >> >>> >> >>> >> >>> >> >>> >> >> >> >> >> >> >> >> -- >> >> -- Yoshiki >> > >> > >> > >> > -- >> > -- Yoshiki >> >> >> >> -- >> -- Yoshiki >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160807/2f1d5828/attachment.htm From commits at source.squeak.org Sun Aug 7 10:09:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 7 10:09:36 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.40.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.40.mcz ==================== Summary ==================== Name: 51Deprecated-mt.40 Author: mt Time: 7 August 2016, 12:09:28.342538 pm UUID: 02c1a7d4-f3a1-6849-8cdf-78bc1af646e4 Ancestors: 51Deprecated-mt.39 After the clean-up of 50Deprecated, forgot to actually unload it. =============== Diff against 51Deprecated-mt.39 =============== Item was changed: (PackageInfo named: '51Deprecated') postscript: 'PBWindowColorPreferenceView unload. + WindowColorRegistry refresh. + (MCPackage named: #''50Deprecated'') unload.'! - WindowColorRegistry refresh.'! From nicolaihess at gmail.com Sun Aug 7 13:57:07 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Sun Aug 7 13:57:11 2016 Subject: [squeak-dev] Windows Time millisecondClockValue (system start vs. image start) Message-ID: Hi, a call to Time millisecondClockValue gives the current milliseconds since the image started. Did this change ? I have a windows squeak 4.4 VM where it gave the uptime of the system (on windows). Background: HandMorph generates some MouseOver and/or MouseMove events, and if the timeStamp value is not set, it sets it to Time millisecondClockValue, but the "real" events have a time stamp of "milliseconds since system was booted". So, now it can happen that you have a real event (mouse click) at timeStamp (msecs since boot up) 3000000 and afterwards a generated mouseOver event with a time stamp since image startup 2000000 (if the image started ~15 min after system boot). That is, a later event as a lower time stamp. This will disturb the event handling in HandMorph>>#handleEvent: from: Somehow, (after having the image running for a long time ? I don't know). The time stamp for the generated events is allways much bigger than for the system events, and this will make it impossible to detect double-click events. see issue https://pharo.fogbugz.com/f/cases/18859 and http://stackoverflow.com/questions/38700587/double-click-highlight-selection-in-pharo-5-0 thanks nicolai -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160807/021d5510/attachment.htm From henrik.nergaard at uia.no Sun Aug 7 15:18:45 2016 From: henrik.nergaard at uia.no (Henrik Nergaard) Date: Sun Aug 7 15:18:50 2016 Subject: [squeak-dev] Windows Time millisecondClockValue (system start vs. image start) In-Reply-To: References: Message-ID: Hmm. ActiveHand lastEvent ?"[(798@340) mouseOver SHIFT nil nil]" ActiveHand instVarNamed: #lastEventBuffer "#(1 148008281 659 126 0 0 1 1)" ?Timestamp is there, second element? I cannot see that the stamp is ever 0 from a raw event polled, and I guess that will (should) never happen? Ie; in HandMorph >> generateMouseEvent: line 15 ?stamp = 0 ifTrue: [ stamp := Time milisecondClockValue ]? is dead/wrong code? So I guess that somewhere along the event dispatching/processing (after he event has been moved from the raw buffer into a MorphicEvent subclass object) things are copied/translated without keeping the original timestamp intact. I found at least two places that causes the timestamp to be lost: MouseEvent >> asMoueMove (sets a new timestamp using Time) MouseEvent >> asMouseOver I think there are two bugs here 1) VM clock can differ from Image clock 2) Translating one event from another do not keep the original timestamp Best regards, Henrik From: squeak-dev-bounces@lists.squeakfoundation.org [mailto:squeak-dev-bounces@lists.squeakfoundation.org] On Behalf Of Nicolai Hess Sent: Sunday, August 7, 2016 3:57 PM To: Pharo Development List ; The general-purpose Squeak developers list Subject: [squeak-dev] Windows Time millisecondClockValue (system start vs. image start) Hi, a call to Time millisecondClockValue gives the current milliseconds since the image started. Did this change ? I have a windows squeak 4.4 VM where it gave the uptime of the system (on windows). Background: HandMorph generates some MouseOver and/or MouseMove events, and if the timeStamp value is not set, it sets it to Time millisecondClockValue, but the "real" events have a time stamp of "milliseconds since system was booted". So, now it can happen that you have a real event (mouse click) at timeStamp (msecs since boot up) 3000000 and afterwards a generated mouseOver event with a time stamp since image startup 2000000 (if the image started ~15 min after system boot). That is, a later event as a lower time stamp. This will disturb the event handling in HandMorph>>#handleEvent: from: Somehow, (after having the image running for a long time ? I don't know). The time stamp for the generated events is allways much bigger than for the system events, and this will make it impossible to detect double-click events. see issue https://pharo.fogbugz.com/f/cases/18859 and http://stackoverflow.com/questions/38700587/double-click-highlight-selection-in-pharo-5-0 thanks nicolai -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160807/2170799b/attachment.htm From nicolaihess at gmail.com Sun Aug 7 16:21:45 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Sun Aug 7 16:21:49 2016 Subject: [squeak-dev] Windows Time millisecondClockValue (system start vs. image start) In-Reply-To: References: Message-ID: 2016-08-07 17:18 GMT+02:00 Henrik Nergaard : > Hmm. > > ActiveHand lastEvent ?"[(798@340) mouseOver SHIFT nil nil]" > > ActiveHand instVarNamed: #lastEventBuffer "#(1 148008281 659 126 0 0 1 1)" > ?Timestamp is there, second element? > > > > I cannot see that the stamp is ever 0 from a raw event polled, and I guess > that will (should) never happen? > > Ie; in HandMorph >> generateMouseEvent: line 15 ?stamp = 0 ifTrue: [ stamp > := Time milisecondClockValue ]? is dead/wrong code? > > > > So I guess that somewhere along the event dispatching/processing (after he > event has been moved from the raw buffer into a MorphicEvent subclass > object) things are copied/translated without keeping the original timestamp > intact. > > I found at least two places that causes the timestamp to be lost: > > MouseEvent >> asMoueMove (sets a new timestamp using Time) > > MouseEvent >> asMouseOver > Yes, that is what I meant by generating mousemove/mouseover events. For example, if you put Transcript show:{ evt type. evt timeStamp . firstClickTime} ;cr. at top of method handleEvent:from: and click (just click no movement) on the title pane of a system window, you'll see a alot of #(#mouseMove 9128631 12518171) Transcript entries The entries look like they are new events, but I think they are just generated from the last real event , but with a new time stamp. > > > I think there are two bugs here > > 1) VM clock can differ from Image clock > > 2) Translating one event from another do not keep the original > timestamp > > > > Best regards, > > Henrik > > > > > > *From:* squeak-dev-bounces@lists.squeakfoundation.org [mailto: > squeak-dev-bounces@lists.squeakfoundation.org] *On Behalf Of *Nicolai Hess > *Sent:* Sunday, August 7, 2016 3:57 PM > *To:* Pharo Development List ; The > general-purpose Squeak developers list squeakfoundation.org> > *Subject:* [squeak-dev] Windows Time millisecondClockValue (system start > vs. image start) > > > > Hi, > > a call to > > Time millisecondClockValue > > gives the current milliseconds since the image started. Did this change ? > > I have a windows squeak 4.4 VM where it gave the uptime of the system (on > windows). > > Background: > > HandMorph generates some MouseOver and/or MouseMove events, and if the > > timeStamp value is not set, it sets it to Time millisecondClockValue, but > the "real" events have > > a time stamp of "milliseconds since system was booted". > > > So, now it can happen that you have a real event (mouse click) at > timeStamp (msecs since boot up) > 3000000 > > and afterwards a generated mouseOver event with a time stamp since image > startup > > 2000000 (if the image started ~15 min after system boot). > > That is, a later event as a lower time stamp. This will disturb the event > handling in > > HandMorph>>#handleEvent: from: > > Somehow, (after having the image running for a long time ? I don't know). > The time stamp > > for the generated events is allways much bigger than for the system > events, and this > > will make it impossible to detect double-click events. > > see issue > https://pharo.fogbugz.com/f/cases/18859 > > and > http://stackoverflow.com/questions/38700587/double- > click-highlight-selection-in-pharo-5-0 > > > > thanks > > nicolai > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160807/deccb0ed/attachment.htm From Marcel.Taeumel at hpi.de Sun Aug 7 16:13:31 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Aug 7 16:59:04 2016 Subject: [squeak-dev] Re: Windows Time millisecondClockValue (system start vs. image start) In-Reply-To: References: Message-ID: <1470586411956-4909869.post@n4.nabble.com> Nicolai Hess-3-2 wrote > 2016-08-07 17:18 GMT+02:00 Henrik Nergaard < > henrik.nergaard@ > >: > >> Hmm. >> >> ActiveHand lastEvent ?"[(798@340) mouseOver SHIFT nil nil]" >> >> ActiveHand instVarNamed: #lastEventBuffer "#(1 148008281 659 126 0 0 1 >> 1)" >> ?Timestamp is there, second element? >> >> >> >> I cannot see that the stamp is ever 0 from a raw event polled, and I >> guess >> that will (should) never happen? >> >> Ie; in HandMorph >> generateMouseEvent: line 15 ?stamp = 0 ifTrue: [ >> stamp >> := Time milisecondClockValue ]? is dead/wrong code? >> >> >> >> So I guess that somewhere along the event dispatching/processing (after >> he >> event has been moved from the raw buffer into a MorphicEvent subclass >> object) things are copied/translated without keeping the original >> timestamp >> intact. >> >> I found at least two places that causes the timestamp to be lost: >> >> MouseEvent >> asMoueMove (sets a new timestamp using Time) >> >> MouseEvent >> asMouseOver >> > > Yes, that is what I meant by generating mousemove/mouseover events. > For example, if you put > Transcript show:{ evt type. evt timeStamp . firstClickTime} ;cr. > > at top of method handleEvent:from: > > and click (just click no movement) on the title pane of a system window, > you'll see a alot of > #(#mouseMove 9128631 12518171) > Transcript entries > > The entries look like they are new events, but I think they are just > generated from the last real event , but with a new time stamp. > > >> >> >> I think there are two bugs here >> >> 1) VM clock can differ from Image clock >> >> 2) Translating one event from another do not keep the original >> timestamp >> >> >> >> Best regards, >> >> Henrik >> >> >> >> >> >> *From:* > squeak-dev-bounces@.squeakfoundation > [mailto: >> > squeak-dev-bounces@.squeakfoundation > ] *On Behalf Of *Nicolai Hess >> *Sent:* Sunday, August 7, 2016 3:57 PM >> *To:* Pharo Development List < > pharo-dev@.pharo > >; The >> general-purpose Squeak developers list <squeak-dev@lists. > > squeakfoundation.org> >> *Subject:* [squeak-dev] Windows Time millisecondClockValue (system start >> vs. image start) >> >> >> >> Hi, >> >> a call to >> >> Time millisecondClockValue >> >> gives the current milliseconds since the image started. Did this change ? >> >> I have a windows squeak 4.4 VM where it gave the uptime of the system (on >> windows). >> >> Background: >> >> HandMorph generates some MouseOver and/or MouseMove events, and if the >> >> timeStamp value is not set, it sets it to Time millisecondClockValue, but >> the "real" events have >> >> a time stamp of "milliseconds since system was booted". >> >> >> So, now it can happen that you have a real event (mouse click) at >> timeStamp (msecs since boot up) >> 3000000 >> >> and afterwards a generated mouseOver event with a time stamp since image >> startup >> >> 2000000 (if the image started ~15 min after system boot). >> >> That is, a later event as a lower time stamp. This will disturb the event >> handling in >> >> HandMorph>>#handleEvent: from: >> >> Somehow, (after having the image running for a long time ? I don't know). >> The time stamp >> >> for the generated events is allways much bigger than for the system >> events, and this >> >> will make it impossible to detect double-click events. >> >> see issue >> https://pharo.fogbugz.com/f/cases/18859 >> >> and >> http://stackoverflow.com/questions/38700587/double- >> click-highlight-selection-in-pharo-5-0 >> >> >> >> thanks >> >> nicolai >> >> >> >> Hi Nicolas, event time stamps have been broken in the Windows VM for a long time. See here: http://forum.world.st/win32-Morphic-event-timeStamp-bug-td4824244.html Best, Marcel -- View this message in context: http://forum.world.st/Windows-Time-millisecondClockValue-system-start-vs-image-start-tp4909842p4909869.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sun Aug 7 21:17:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 7 21:17:36 2016 Subject: [squeak-dev] The Trunk: Morphic-cmm.1241.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1241.mcz ==================== Summary ==================== Name: Morphic-cmm.1241 Author: cmm Time: 7 August 2016, 4:16:45.243689 pm UUID: 1b1c9565-a86e-411e-adc3-849fadd9244d Ancestors: Morphic-mt.1240 I don't like making yet another reference NewBalloonMorph, but this temporarily fixes scratchpad color for the release after some other recent new references to NewBalloonMorph were made. =============== Diff against Morphic-mt.1240 =============== Item was changed: ----- Method: SearchBar>>scratchPad (in category 'accessing') ----- scratchPad ^ scratchPad ifNil: [ scratchPad := TextMorphForEditView new. "we should be able to use TextMorph here; fix later" scratchPad " on: #keyboardFocusChange send: #removeScratchPad to: self ;" on: #mouseLeave send: #removeScratchPad to: self ; on: #keyStroke send: #handleScratchPadKey: to: self ; margins: (5@0 corner: 5@0); + backgroundColor: ((UserInterfaceTheme current get: #color for: #NewBalloonMorph) ifNil: [ BalloonMorph balloonColor ]) ; - backgroundColor: (BalloonMorph balloonColor alpha: 1.0) ; setEditView: PluggableTextMorph new ; "dummy" autoFit: true ; wrapFlag: true ; newContents: '--scratch area--' ; font: ((UserInterfaceTheme current get: #font for: #PluggableTextMorph) ifNil: [TextStyle defaultFont]); textColor: ((UserInterfaceTheme current get: #textColor for: #PluggableTextMorph) ifNil: [Color black]); caretColor: ((UserInterfaceTheme current get: #caretColor for: #PluggableTextMorph) ifNil: [Color red]); selectionColor: ((UserInterfaceTheme current get: #selectionColor for: #PluggableTextMorph) ifNil: [Color blue muchDarker] ifNotNil: [ : col | col twiceLighter ]); yourself. self layoutScratchPad. Preferences menuAppearance3d ifTrue: [ scratchPad addDropShadow ]. scratchPad ]! From commits at source.squeak.org Sun Aug 7 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 7 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160807215502.9142.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068453.html Name: 51Deprecated-mt.40 Ancestors: 51Deprecated-mt.39 After the clean-up of 50Deprecated, forgot to actually unload it. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068454.html Name: Morphic-cmm.1241 Ancestors: Morphic-mt.1240 I don't like making yet another reference NewBalloonMorph, but this temporarily fixes scratchpad color for the release after some other recent new references to NewBalloonMorph were made. ============================================= From ma.chris.m at gmail.com Sun Aug 7 22:05:23 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Sun Aug 7 22:06:07 2016 Subject: [squeak-dev] -vm display=X11 -iconic causes clicks to register well *below* where the user clicked Message-ID: Today I noticed that in -iconic launched images, clicks register about 1cm below where I click, rendering the image very difficult to use. To reproduce, take a trunk image, 1) load OSProcess, 2) maximize the window, 3) save and exit the image. Now, from Linux command line, relaunch the image as I do my background worker images: squeak -vm display=X11 -iconic myImage.image & It launches iconic, click the icon in the taskbar to open it. Now click anywhere on the desktop, and notice the events being triggered well below the mouse pointer. Both hand position and clicks, as well... - Chris PS -- Why I ever lauch "-iconic", I have several apps which divide up a large task and launch background Squeak images to tackle, each, a portion of the task. When the background images launch, I don't want them to pop up on top of what I'm working on, but still be there (e.g., not headless) so I can see them come-and-go in the TaskBar or in case there's a problem. From commits at source.squeak.org Mon Aug 8 06:42:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 8 06:42:42 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1242.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1242.mcz ==================== Summary ==================== Name: Morphic-mt.1242 Author: mt Time: 8 August 2016, 8:42:03.151784 am UUID: 53b43eb4-0074-234f-aec8-67c9405877cd Ancestors: Morphic-cmm.1241 Fixes an initialization bug in the three-phase button, that is, our check box or radio button. =============== Diff against Morphic-cmm.1241 =============== Item was changed: ----- Method: ThreePhaseButtonMorph>>preferredExtent (in category 'accessing') ----- preferredExtent | iw ih lw lh | + self currentImage ifNil: [^ 1@1]. iw := self currentImage width. ih := self currentImage height. lw := self font widthOfString: (self label ifNil: ['']). lh := self font height. ^ (iw + 3 + lw) @ (ih max: lh)! From commits at source.squeak.org Mon Aug 8 07:53:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 8 07:53:09 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1243.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1243.mcz ==================== Summary ==================== Name: Morphic-mt.1243 Author: mt Time: 8 August 2016, 9:52:32.572588 am UUID: 31d9bb2c-58ef-c948-81c3-5ac5f150477f Ancestors: Morphic-mt.1242 Two other bug fixes for query-symbols in text editors. =============== Diff against Morphic-mt.1242 =============== Item was changed: ----- Method: TextEditor>>querySymbol: (in category 'typing/selecting keys') ----- querySymbol: aKeyboardEvent "Invoked by Ctrl-q to query the Symbol table and display alternate symbols." | hintText lastOffering offering | + (self isTypingIn not or: [self history current type ~= #query]) - self isTypingIn - ifFalse: [ - self selectPrecedingIdentifier. - hintText := self selection string] ifTrue: [ + self closeTypeIn. + self openTypeIn. + self selectPrecedingIdentifier. + self closeTypeIn]. + + self openTypeInFor: #query. + + hintText := self history current contentsBefore string. + hintText := hintText copyFrom: (hintText + lastIndexOfAnyOf: Character separators, '#' + startingAt: hintText size ifAbsent: [0])+1 to: hintText size. + self selectInvisiblyFrom: self history current intervalBefore first to: self stopIndex-1. + lastOffering := self selection string. + lastOffering := (lastOffering copyReplaceAll: ': ' with: ':') withBlanksTrimmed. + + "Only offer suggestions for not-empty tokens." + hintText ifEmpty: [morph flash. self closeTypeIn. ^ true]. - self history current type = #query - ifFalse: [ - self closeTypeIn. - self selectPrecedingIdentifier. - hintText := self selection string] - ifTrue: [ - self history hasPrevious - ifFalse: [morph flash. self closeTypeIn. ^ true]. - hintText := self history previous contentsAfter string. - hintText := hintText copyFrom: (hintText - lastIndexOfAnyOf: Character separators, '#' - startingAt: hintText size ifAbsent: [0])+1 to: hintText size. - self selectInvisiblyFrom: self history current intervalBefore first to: self stopIndex-1. - lastOffering := self selection string. - lastOffering := (lastOffering copyReplaceAll: ': ' with: ':') withBlanksTrimmed.]]. - offering := (Symbol thatStarts: hintText skipping: lastOffering) ifNil: [hintText]. + offering ifEmpty: [morph flash. self closeTypeIn. ^ true]. + + "Add some nice spacing to the suggestion." offering := offering copyReplaceAll: ':' with: ': '. offering last = Character space ifTrue: [offering := offering allButLast]. + "Insert the suggestions. (Note that due to previous selection, things will be overwritten and not appended.)" - self openTypeInFor: #query. self typeAhead nextPutAll: offering. ^ false! From commits at source.squeak.org Mon Aug 8 07:56:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 8 07:56:23 2016 Subject: [squeak-dev] The Trunk: Tools-mt.712.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.712.mcz ==================== Summary ==================== Name: Tools-mt.712 Author: mt Time: 8 August 2016, 9:56:02.220588 am UUID: b3295a2d-f130-8a44-a2a1-3f330ca50cf9 Ancestors: Tools-mt.711 Fixes an issue with file list tool and UI themes. =============== Diff against Tools-mt.711 =============== Item was changed: ----- Method: FileList>>buildFileListWith: (in category 'toolbuilder') ----- buildFileListWith: builder | buttons listSpec top | top := builder pluggablePanelSpec new. top children: OrderedCollection new. buttons := self buildButtonPaneWith: builder. buttons frame: (self topConstantHeightFrame: self buttonHeight fromLeft: 0 width: 1). top children add: buttons. listSpec := builder pluggableListSpec new. listSpec model: self ; list: #fileList ; getIndex: #fileListIndex ; setIndex: #fileListIndex: ; menu: #fileListMenu: ; keyPress: nil ; frame: (self frameOffsetFromTop: self buttonHeight * 1.1 fromLeft: 0 width: 1 + bottomFraction: 1) . - bottomFraction: 1) ; - color: Color white. SystemBrowser browseWithDragNDrop ifTrue: [ listSpec dragItem: #dragFromFileList: ]. top children add: listSpec. ^ top! From Marcel.Taeumel at hpi.de Mon Aug 8 09:03:08 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Aug 8 09:48:46 2016 Subject: [squeak-dev] Re: -vm display=X11 -iconic causes clicks to register well *below* where the user clicked In-Reply-To: References: Message-ID: <1470646988845-4909969.post@n4.nabble.com> Chris Muller-4 wrote > Today I noticed that in -iconic launched images, clicks register about > 1cm below where I click, rendering the image very difficult to use. > > To reproduce, take a trunk image, 1) load OSProcess, 2) maximize the > window, 3) save and exit the image. > > Now, from Linux command line, relaunch the image as I do my background > worker images: > > squeak -vm display=X11 -iconic myImage.image & > > It launches iconic, click the icon in the taskbar to open it. Now > click anywhere on the desktop, and notice the events being triggered > well below the mouse pointer. Both hand position and clicks, as > well... > > - Chris > > PS -- Why I ever lauch "-iconic", I have several apps which divide up > a large task and launch background Squeak images to tackle, each, a > portion of the task. When the background images launch, I don't want > them to pop up on top of what I'm working on, but still be there > (e.g., not headless) so I can see them come-and-go in the TaskBar or > in case there's a problem. Hi Chris, what's the concept of an application being "iconic"? No windows borders? "Start minimized"? Anyway, this looks like an event coordinate mapping problem in the X11-specific portion in the VM. So, this rather belongs to the "squeak-vm" list. :-) Best, Marcel -- View this message in context: http://forum.world.st/vm-display-X11-iconic-causes-clicks-to-register-well-below-where-the-user-clicked-tp4909904p4909969.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Mon Aug 8 09:55:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 8 09:55:10 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1244.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1244.mcz ==================== Summary ==================== Name: Morphic-mt.1244 Author: mt Time: 8 August 2016, 11:54:34.787593 am UUID: 1a99adda-e47a-1a4e-9fec-9c6c7fb38791 Ancestors: Morphic-mt.1243 Fix keyboard focus indication in pop-up menus with respect to usual keyboard focus indication in the system and UI themes. =============== Diff against Morphic-mt.1243 =============== Item was removed: - ----- Method: MenuMorph>>drawKeyboardFocusIndicationOn: (in category 'drawing') ----- - drawKeyboardFocusIndicationOn: aCanvas - "Draw the menu. Add keyboard-focus feedback if appropriate" - - (self rootMenu hasProperty: #hasUsedKeyboard) - ifTrue: [ - aCanvas - frameRectangle: self innerBounds - width: Preferences menuBorderWidth - color: Preferences keyboardFocusColor].! Item was changed: ----- Method: MenuMorph>>indicateKeyboardFocus (in category 'testing') ----- indicateKeyboardFocus + ^ self rootMenu hasProperty: #hasUsedKeyboard! - ^ true! From lewis at mail.msen.com Mon Aug 8 12:10:13 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Mon Aug 8 12:10:16 2016 Subject: [squeak-dev] -vm display=X11 -iconic causes clicks to register well *below* where the user clicked In-Reply-To: References: Message-ID: <20160808121013.GA8289@shell.msen.com> On Sun, Aug 07, 2016 at 05:05:23PM -0500, Chris Muller wrote: > Today I noticed that in -iconic launched images, clicks register about > 1cm below where I click, rendering the image very difficult to use. > > To reproduce, take a trunk image, 1) load OSProcess, 2) maximize the > window, 3) save and exit the image. > > Now, from Linux command line, relaunch the image as I do my background > worker images: > > squeak -vm display=X11 -iconic myImage.image & > > It launches iconic, click the icon in the taskbar to open it. Now > click anywhere on the desktop, and notice the events being triggered > well below the mouse pointer. Both hand position and clicks, as > well... > > - Chris > > PS -- Why I ever lauch "-iconic", I have several apps which divide up > a large task and launch background Squeak images to tackle, each, a > portion of the task. When the background images launch, I don't want > them to pop up on top of what I'm working on, but still be there > (e.g., not headless) so I can see them come-and-go in the TaskBar or > in case there's a problem. Confirming. I see the same behavior with an interpreter VM and V3 image. This looks like an X11 VM issue, possibly related to incorrectly including the window decoration in the saved window size. Dave From commits at source.squeak.org Mon Aug 8 15:49:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 8 15:49:52 2016 Subject: [squeak-dev] The Trunk: Tests-pre.348.mcz Message-ID: Patrick Rein uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-pre.348.mcz ==================== Summary ==================== Name: Tests-pre.348 Author: pre Time: 8 August 2016, 5:49:40.802858 pm UUID: 5727ac06-7f21-fa42-b2b8-cd0fc0023f05 Ancestors: Tests-mt.347, Tests-pre.347 Fixes tests affected by the change of Morphic widgets and adds a set of expected failures to the compiler tests which are only supposed to work on V3 bytecode images. =============== Diff against Tests-mt.347 =============== Item was changed: ----- Method: BlockLocalTemporariesRemovalTest>>assert:isChangedDuringParsingTo:withRemovalOfTemporariesNamed: (in category 'test helper') ----- assert: someCode isChangedDuringParsingTo: someOtherCode withRemovalOfTemporariesNamed: someTempNames | failBlock | self sourceCode: someCode. failBlock := [ self fail ]. [ self class compile: self sourceCode notifying: self trailer: CompiledMethodTrailer empty ifFail: failBlock ] + on: UnusedVariable + do: + [ : aNotification | [ aNotification openMenuIn: nil ] + valueSupplyingAnswers: (someTempNames + collect: [:tempName | {tempName . true}]) , {{'*' . false }} ]. - on: UnusedVariable - do: - [ : aNotification | aNotification openMenuIn: - [ : options : emptyCollection : someText | aNotification resume: - (someTempNames anySatisfy: - [ : tempName | someText beginsWith: tempName ]) ] ]. self assert: self sourceCode = someOtherCode! Item was changed: ----- Method: ClosureCompilerTest>>expectedFailures (in category 'failures') ----- expectedFailures + + ^#(testDebuggerTempAccess testInjectIntoDecompilations testInjectIntoDecompiledDebugs) , + (({CompiledMethod classPool at: #SecondaryBytecodeSetEncoderClass . + CompiledMethod classPool at: #PrimaryBytecodeSetEncoderClass} + includes: EncoderForV3) + ifFalse: [#(testSourceRangeAccessForBlueBookInjectInto)] + ifTrue: [#()]) + ! - ^#(testDebuggerTempAccess testInjectIntoDecompilations testInjectIntoDecompiledDebugs)! Item was changed: ----- Method: ClosureCompilerTest>>testSourceRangeAccessForBlueBookInjectInto (in category 'tests') ----- testSourceRangeAccessForBlueBookInjectInto "Test debugger source range selection for inject:into: for a version compiled with closures" "self new testSourceRangeAccessForBlueBookInjectInto" | source method | + [source := (Collection sourceCodeAt: #inject:into:) asString. - source := (Collection sourceCodeAt: #inject:into:) asString. method := (Parser new encoderClass: EncoderForV3; parse: source class: Collection) generate: (Collection compiledMethodAt: #inject:into:) trailer. + self supportTestSourceRangeAccessForInjectInto: method source: source.] + on: Error + do: [:e | self fail: e.]! - self supportTestSourceRangeAccessForInjectInto: method source: source! From commits at source.squeak.org Mon Aug 8 15:51:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 8 15:51:19 2016 Subject: [squeak-dev] The Trunk: SystemChangeNotification-Tests-pre.26.mcz Message-ID: Patrick Rein uploaded a new version of SystemChangeNotification-Tests to project The Trunk: http://source.squeak.org/trunk/SystemChangeNotification-Tests-pre.26.mcz ==================== Summary ==================== Name: SystemChangeNotification-Tests-pre.26 Author: pre Time: 8 August 2016, 5:51:13.361858 pm UUID: 3f06ebc7-a756-3b4b-bd7a-c00293e3493f Ancestors: SystemChangeNotification-Tests-pre.25 Fixes a test case for the system change notifications. =============== Diff against SystemChangeNotification-Tests-pre.25 =============== Item was changed: SystemChangeTestRoot subclass: #ChangeHooksTest + instanceVariableNames: 'previousChangeSet testsChangeSet capturedEvents generatedTestClass generatedTestClassX generatedTestClassC2 createdMethodName createdMethod doItExpression' - instanceVariableNames: 'previousChangeSet testsChangeSet capturedEvents generatedTestClass generatedTestClassX createdMethodName createdMethod doItExpression' classVariableNames: '' poolDictionaries: '' category: 'SystemChangeNotification-Tests'! !ChangeHooksTest commentStamp: 'bp 12/4/2009 10:37' prior: 0! This class implements unit tests to verify that when the system changes, notification messages are sent around correctly. Therefore the test messages make a system change, after registering to receive an event after the change occured. In this event (sent immediately after the change), the actual assertions take place. Note that the system changes are *really* made to the system, but in a change set that is created in the setUp method, while the previous one is restored in the tearDown method.! Item was changed: ----- Method: ChangeHooksTest>>addSingleEvent: (in category 'Private') ----- addSingleEvent: anEvent + capturedEvents isEmpty ifFalse: [self fail]. - capturedEvents isEmpty ifFalse: [self assert: false]. capturedEvents add: anEvent! Item was added: + ----- Method: ChangeHooksTest>>generateTestClassCategory2 (in category 'Private-Generation') ----- + generateTestClassCategory2 + + generatedTestClassC2 := Object + subclass: self generatedTestClassCategory2Name + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: self categoryForTestName2.! Item was added: + ----- Method: ChangeHooksTest>>generatedTestClassCategory2Name (in category 'Private-Generation') ----- + generatedTestClassCategory2Name + + ^#'AutoGeneratedClassC2ForTestingSystemChanges'! Item was changed: ----- Method: ChangeHooksTest>>setUp (in category 'Running') ----- setUp previousChangeSet := ChangeSet current. testsChangeSet := ChangeSet new. ChangeSet newChanges: testsChangeSet. capturedEvents := OrderedCollection new. self generateTestClass. self generateTestClassX. + self generateTestClassCategory2. super setUp! Item was changed: ----- Method: ChangeHooksTest>>tearDown (in category 'Running') ----- tearDown + super tearDown. self removeGeneratedTestClasses. ChangeSet newChanges: previousChangeSet. ChangesOrganizer removeChangeSet: testsChangeSet. previousChangeSet := nil. testsChangeSet := nil. capturedEvents := nil. createdMethod := nil. + SystemOrganization removeMissingClasses. "To make sure we do only try to unload recent classes." (PackageOrganizer default packages select: [:packageInfo | {self categoryForTestName1 . self categoryForTestName2} includes: packageInfo packageName ]) + do: [:packageInfo | packageInfo workingCopy unload].! - do: [:packageInfo | packageInfo workingCopy unload]. - super tearDown! Item was changed: ----- Method: ChangeHooksTest>>testClassRecategorizedEvent1 (in category 'Testing-Classes') ----- testClassRecategorizedEvent1 - Object - subclass: generatedTestClass name - instanceVariableNames: '' - classVariableNames: '' - poolDictionaries: '' - category: self categoryForTestName1. self systemChangeNotifier notify: self ofAllSystemChangesUsing: #classRecategorizedEvent:. Object subclass: generatedTestClass name instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: self categoryForTestName2. self checkForOnlySingleEvent! From asqueaker at gmail.com Mon Aug 8 16:00:17 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Aug 8 16:01:01 2016 Subject: [squeak-dev] -vm display=X11 -iconic causes clicks to register well *below* where the user clicked In-Reply-To: <20160808121013.GA8289@shell.msen.com> References: <20160808121013.GA8289@shell.msen.com> Message-ID: Glad to see your name Dave, I hope you're on the mend! I noticed that unmaximizing, then re-maximizing seems to clear up the mis-alignment. However, I've been doing this for more than 10 years and never noticed this offset before... Anyway.. Marcel, yes, -iconic means to start it minimized. It appears as a button in the tint2 taskbar, so its easy to see the multi-processing part of the system working during that time (buttons appearing and disappearing) but without disturbing working in another window if I want. On Mon, Aug 8, 2016 at 7:10 AM, David T. Lewis wrote: > On Sun, Aug 07, 2016 at 05:05:23PM -0500, Chris Muller wrote: >> Today I noticed that in -iconic launched images, clicks register about >> 1cm below where I click, rendering the image very difficult to use. >> >> To reproduce, take a trunk image, 1) load OSProcess, 2) maximize the >> window, 3) save and exit the image. >> >> Now, from Linux command line, relaunch the image as I do my background >> worker images: >> >> squeak -vm display=X11 -iconic myImage.image & >> >> It launches iconic, click the icon in the taskbar to open it. Now >> click anywhere on the desktop, and notice the events being triggered >> well below the mouse pointer. Both hand position and clicks, as >> well... >> >> - Chris >> >> PS -- Why I ever lauch "-iconic", I have several apps which divide up >> a large task and launch background Squeak images to tackle, each, a >> portion of the task. When the background images launch, I don't want >> them to pop up on top of what I'm working on, but still be there >> (e.g., not headless) so I can see them come-and-go in the TaskBar or >> in case there's a problem. > > Confirming. I see the same behavior with an interpreter VM and V3 image. > > This looks like an X11 VM issue, possibly related to incorrectly including > the window decoration in the saved window size. > > Dave > > From commits at source.squeak.org Mon Aug 8 16:13:35 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 8 16:13:36 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1245.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1245.mcz ==================== Summary ==================== Name: Morphic-mt.1245 Author: mt Time: 8 August 2016, 6:12:08.223357 pm UUID: 58e779e2-1663-cb42-9904-4edd8e1cfa80 Ancestors: Morphic-mt.1244 Another fix for query-symbol (thanks Levente!) to support cycling through *all* matches again. =============== Diff against Morphic-mt.1244 =============== Item was changed: ----- Method: TextEditor>>querySymbol: (in category 'typing/selecting keys') ----- querySymbol: aKeyboardEvent "Invoked by Ctrl-q to query the Symbol table and display alternate symbols." | hintText lastOffering offering | (self isTypingIn not or: [self history current type ~= #query]) ifTrue: [ self closeTypeIn. self openTypeIn. self selectPrecedingIdentifier. self closeTypeIn]. self openTypeInFor: #query. hintText := self history current contentsBefore string. hintText := hintText copyFrom: (hintText lastIndexOfAnyOf: Character separators, '#' startingAt: hintText size ifAbsent: [0])+1 to: hintText size. self selectInvisiblyFrom: self history current intervalBefore first to: self stopIndex-1. lastOffering := self selection string. lastOffering := (lastOffering copyReplaceAll: ': ' with: ':') withBlanksTrimmed. "Only offer suggestions for not-empty tokens." hintText ifEmpty: [morph flash. self closeTypeIn. ^ true]. + offering := Symbol thatStarts: hintText skipping: lastOffering. + offering ifNil: [offering := Symbol thatStarts: hintText skipping: nil]. + offering ifNil: [morph flash. self closeTypeIn. ^ true]. - offering := (Symbol thatStarts: hintText skipping: lastOffering) ifNil: [hintText]. - offering ifEmpty: [morph flash. self closeTypeIn. ^ true]. "Add some nice spacing to the suggestion." offering := offering copyReplaceAll: ':' with: ': '. offering last = Character space ifTrue: [offering := offering allButLast]. "Insert the suggestions. (Note that due to previous selection, things will be overwritten and not appended.)" self typeAhead nextPutAll: offering. ^ false! From lewis at mail.msen.com Mon Aug 8 18:24:43 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Mon Aug 8 18:24:46 2016 Subject: [squeak-dev] -vm display=X11 -iconic causes clicks to register well *below* where the user clicked In-Reply-To: References: <20160808121013.GA8289@shell.msen.com> Message-ID: <20160808182443.GA69639@shell.msen.com> On Mon, Aug 08, 2016 at 11:00:17AM -0500, Chris Muller wrote: > Glad to see your name Dave, I hope you're on the mend! > https://www.youtube.com/watch?v=y4p8RYoJ9DQ :-) From nicolaihess at gmail.com Mon Aug 8 21:47:47 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Mon Aug 8 21:47:51 2016 Subject: [squeak-dev] Re: Windows Time millisecondClockValue (system start vs. image start) In-Reply-To: <1470586411956-4909869.post@n4.nabble.com> References: <1470586411956-4909869.post@n4.nabble.com> Message-ID: 2016-08-07 18:13 GMT+02:00 marcel.taeumel : > Nicolai Hess-3-2 wrote > > 2016-08-07 17:18 GMT+02:00 Henrik Nergaard < > > > henrik.nergaard@ > > > >: > > > >> Hmm. > >> > >> ActiveHand lastEvent ?"[(798@340) mouseOver SHIFT nil nil]" > >> > >> ActiveHand instVarNamed: #lastEventBuffer "#(1 148008281 659 126 0 0 1 > >> 1)" > >> ?Timestamp is there, second element? > >> > >> > >> > >> I cannot see that the stamp is ever 0 from a raw event polled, and I > >> guess > >> that will (should) never happen? > >> > >> Ie; in HandMorph >> generateMouseEvent: line 15 ?stamp = 0 ifTrue: [ > >> stamp > >> := Time milisecondClockValue ]? is dead/wrong code? > >> > >> > >> > >> So I guess that somewhere along the event dispatching/processing (after > >> he > >> event has been moved from the raw buffer into a MorphicEvent subclass > >> object) things are copied/translated without keeping the original > >> timestamp > >> intact. > >> > >> I found at least two places that causes the timestamp to be lost: > >> > >> MouseEvent >> asMoueMove (sets a new timestamp using > Time) > >> > >> MouseEvent >> asMouseOver > >> > > > > Yes, that is what I meant by generating mousemove/mouseover events. > > For example, if you put > > Transcript show:{ evt type. evt timeStamp . firstClickTime} ;cr. > > > > at top of method handleEvent:from: > > > > and click (just click no movement) on the title pane of a system window, > > you'll see a alot of > > #(#mouseMove 9128631 12518171) > > Transcript entries > > > > The entries look like they are new events, but I think they are just > > generated from the last real event , but with a new time stamp. > > > > > >> > >> > >> I think there are two bugs here > >> > >> 1) VM clock can differ from Image clock > >> > >> 2) Translating one event from another do not keep the original > >> timestamp > >> > >> > >> > >> Best regards, > >> > >> Henrik > >> > >> > >> > >> > >> > >> *From:* > > > squeak-dev-bounces@.squeakfoundation > > > [mailto: > >> > > > squeak-dev-bounces@.squeakfoundation > > > ] *On Behalf Of *Nicolai Hess > >> *Sent:* Sunday, August 7, 2016 3:57 PM > >> *To:* Pharo Development List < > > > pharo-dev@.pharo > > > >; The > >> general-purpose Squeak developers list <squeak-dev@lists. > > > squeakfoundation.org> > >> *Subject:* [squeak-dev] Windows Time millisecondClockValue (system start > >> vs. image start) > >> > >> > >> > >> Hi, > >> > >> a call to > >> > >> Time millisecondClockValue > >> > >> gives the current milliseconds since the image started. Did this change > ? > >> > >> I have a windows squeak 4.4 VM where it gave the uptime of the system > (on > >> windows). > >> > >> Background: > >> > >> HandMorph generates some MouseOver and/or MouseMove events, and if the > >> > >> timeStamp value is not set, it sets it to Time millisecondClockValue, > but > >> the "real" events have > >> > >> a time stamp of "milliseconds since system was booted". > >> > >> > >> So, now it can happen that you have a real event (mouse click) at > >> timeStamp (msecs since boot up) > >> 3000000 > >> > >> and afterwards a generated mouseOver event with a time stamp since image > >> startup > >> > >> 2000000 (if the image started ~15 min after system boot). > >> > >> That is, a later event as a lower time stamp. This will disturb the > event > >> handling in > >> > >> HandMorph>>#handleEvent: from: > >> > >> Somehow, (after having the image running for a long time ? I don't > know). > >> The time stamp > >> > >> for the generated events is allways much bigger than for the system > >> events, and this > >> > >> will make it impossible to detect double-click events. > >> > >> see issue > >> https://pharo.fogbugz.com/f/cases/18859 > >> > >> and > >> http://stackoverflow.com/questions/38700587/double- > >> click-highlight-selection-in-pharo-5-0 > >> > >> > >> > >> thanks > >> > >> nicolai > >> > >> > >> > >> > > Hi Nicolas, > > event time stamps have been broken in the Windows VM for a long time. See > here: > http://forum.world.st/win32-Morphic-event-timeStamp-bug-td4824244.html > > Best, > Marcel > > Hi, Marcel, yes I saw that thread, we should *bump* it again. You solution was to modify the event time stamp to use the same milliseconds-since-image-start, right? I too was confused about the ioMSecs implementation in sqWin32Windows with timeGetTime() vs. the one from sqWin32Heartbeat.c It seems the windows vm uses the one from the heartbeat, but I couldn't find where this was set, did you find it out? > > > > -- > View this message in context: http://forum.world.st/Windows- > Time-millisecondClockValue-system-start-vs-image-start- > tp4909842p4909869.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160808/244a3245/attachment.htm From commits at source.squeak.org Mon Aug 8 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 8 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160808215503.11675.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068455.html Name: Morphic-mt.1242 Ancestors: Morphic-cmm.1241 Fixes an initialization bug in the three-phase button, that is, our check box or radio button. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068456.html Name: Morphic-mt.1243 Ancestors: Morphic-mt.1242 Two other bug fixes for query-symbols in text editors. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068457.html Name: Tools-mt.712 Ancestors: Tools-mt.711 Fixes an issue with file list tool and UI themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068458.html Name: Morphic-mt.1244 Ancestors: Morphic-mt.1243 Fix keyboard focus indication in pop-up menus with respect to usual keyboard focus indication in the system and UI themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068459.html Name: Tests-pre.348 Ancestors: Tests-mt.347, Tests-pre.347 Fixes tests affected by the change of Morphic widgets and adds a set of expected failures to the compiler tests which are only supposed to work on V3 bytecode images. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068460.html Name: SystemChangeNotification-Tests-pre.26 Ancestors: SystemChangeNotification-Tests-pre.25 Fixes a test case for the system change notifications. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068461.html Name: Morphic-mt.1245 Ancestors: Morphic-mt.1244 Another fix for query-symbol (thanks Levente!) to support cycling through *all* matches again. ============================================= From commits at source.squeak.org Tue Aug 9 01:44:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 01:44:22 2016 Subject: [squeak-dev] The Inbox: ReleaseBuilder-cmm.143.mcz Message-ID: Chris Muller uploaded a new version of ReleaseBuilder to project The Inbox: http://source.squeak.org/inbox/ReleaseBuilder-cmm.143.mcz ==================== Summary ==================== Name: ReleaseBuilder-cmm.143 Author: cmm Time: 8 August 2016, 8:44:19.037434 pm UUID: 83ea1203-93ba-4d38-9161-6f6c1597ab61 Ancestors: ReleaseBuilder-mt.142 - Suggest disable #showBoundsInHalo for this release. - Was allowUnderscoreAsAssignment intended to be unset at some point long ago? =============== Diff against ReleaseBuilder-mt.142 =============== Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. ToolBuilder openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. Model windowActiveOnFirstClick: false. "Not good for 800x600" Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false. ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; disable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 6. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences + disable: #showBoundsInHalo ; - enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner + allowUnderscoreAsAssignment: false; - allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From commits at source.squeak.org Tue Aug 9 02:58:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 02:58:37 2016 Subject: [squeak-dev] The Trunk: System-cmm.871.mcz Message-ID: Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.871.mcz ==================== Summary ==================== Name: System-cmm.871 Author: cmm Time: 8 August 2016, 9:58:01.729579 pm UUID: 835252c8-ee56-40c1-81cd-bbb46022ca45 Ancestors: System-mt.870 Some CommunityTheme #dark tweaks and fixes after an evening working with it: - Dialogs were completely gray, gave them a little color. - A font and dbBackground adjustment for better clarity and contrast with text. - Selected menu items are easier to read (brightened #selectionTextColor). - Softer filter indication provides better contrast in the filter-indication of lists. - Some of the window colors were too bright, darkened them. - The search box delineation was too bright, eliminated it. - Keyboard focus color was too bright, subtlized it. - However, a bolder and brighter dbSelection (dbAqua) has improved stepping through code in the debugger, especially long methods. =============== Diff against System-mt.870 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkDialogs: (in category 'instance creation') ----- addDarkDialogs: aUserInterfaceTheme "self createDark apply." aUserInterfaceTheme + set: #borderColor for: #DialogWindow to: self dbSelection; + set: #color for: #DialogWindow to: (self dbBlue adjustSaturation: -0.20 brightness: -0.30); - set: #borderColor for: #DialogWindow to: Color darkGray; - set: #color for: #DialogWindow to: Color gray; + set: #titleColor for: #DialogWindow to: self dbBlue twiceDarker; + set: #titleTextColor for: #DialogWindow to: Color veryLightGray; - set: #titleColor for: #DialogWindow to: Color darkGray; - set: #titleTextColor for: #DialogWindow to: Color white; set: #textColor for: #DialogWindow to: (Color gray: 0.9); set: #okColor for: #DialogWindow to: self dbGreen; set: #cancelColor for: #DialogWindow to: self dbOrange; set: #buttonColor for: #DialogWindow to: Color darkGray; set: #selectionModifier for: #DialogWindow to: [ [:c | self dbSelection twiceDarker ] ]. "The List Chooser is a dialog, too." aUserInterfaceTheme set: #addColor for: #ListChooser to: self dbBlue; set: #disabledColor for: #ListChooser to: Color transparent. "And the system progress bar." aUserInterfaceTheme set: #color for: #SystemProgressBarMorph to: Color transparent; set: #barColor for: #SystemProgressBarMorph to: self dbSelection. "And the balloon morphs." aUserInterfaceTheme set: #borderColor for: #NewBalloonMorph to: Color transparent ; set: #color for: #NewBalloonMorph to: (self dbOrange twiceDarker alpha: 0.9) ; set: #textColor for: #NewBalloonMorph to: Color white .! Item was changed: ----- Method: CommunityTheme class>>addDarkFonts: (in category 'instance creation') ----- addDarkFonts: aUserInterfaceTheme "Set-up fonts." aUserInterfaceTheme set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis italic emphasisCode); set: #standardButtonFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7); set: #standardCodeFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardDefaultTextFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); + set: #standardFlapFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis bold emphasisCode); - set: #standardFlapFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardListFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardMenuFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardSystemFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); + set: #windowTitleFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9 emphasized: TextEmphasis bold emphasisCode)! - set: #windowTitleFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9)! Item was changed: ----- Method: CommunityTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- addDarkMenusAndDockingBars: aUserInterfaceTheme "self createDark apply." aUserInterfaceTheme set: #borderWidth for: #MenuMorph to: 0; set: #color for: #MenuMorph to: Color darkGray twiceDarker; set: #titleTextColor for: #MenuMorph to: Color white; set: #lineColor for: #MenuMorph to: Color darkGray; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. aUserInterfaceTheme set: #textColor for: #MenuItemMorph to: self dbForeground; set: #selectionColor for: #MenuItemMorph to: self dbSelection; + set: #selectionTextColor for: #MenuItemMorph to: Color white ; - set: #selectionTextColor for: #MenuItemMorph to: self dbForeground ; set: #disabledTextColor for: #MenuItemMorph to: self dbForeground muchDarker. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." aUserInterfaceTheme " set: #color for: #DockingBarMorph to: Color darkGray;" " set: #selectionColor for: #DockingBarItemMorph to: self darkContentSecondary;" set: #logoColor for: #TheWorldMainDockingBar to: Color white; set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color black! Item was changed: ----- Method: CommunityTheme class>>addDarkScrollables: (in category 'instance creation') ----- addDarkScrollables: aUserInterfaceTheme "self createDark apply." "Scroll bars" aUserInterfaceTheme set: #thumbColor for: #ScrollBar to: self dbGray; set: #thumbBorderColor for: #ScrollBar to: self dbGray twiceDarker. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." aUserInterfaceTheme + set: #borderColor for: #ScrollPane to: (Color transparent) ; "So the search box isn't outlined." set: #color for: #ScrollPane to: self dbBackground. "List widgets" aUserInterfaceTheme set: #textColor for: #PluggableListMorph to: (Color gray: 0.9); set: #selectionColor for: #PluggableListMorph to: self dbSelection; derive: #selectionTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; + set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.4); - set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.5); derive: #filterTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker ] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker alpha: 0.5 ] ]. "Tree widgets" aUserInterfaceTheme set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; set: #lineColor for: #SimpleHierarchicalListMorph to: Color gray. "Text widgets" aUserInterfaceTheme set: #textColor for: #PluggableTextMorph to: (Color gray: 0.9); set: #caretColor for: #PluggableTextMorph to: Color orange darker; set: #selectionColor for: #PluggableTextMorph to: (self dbSelection darker duller); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | c duller] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: self dbPurple; set: #adornmentRefuse for: #PluggableTextMorph to: self dbBlue; set: #adornmentConflict for: #PluggableTextMorph to: self dbRed; set: #adornmentDiff for: #PluggableTextMorph to: self dbGreen; set: #adornmentNormalEdit for: #PluggableTextMorph to: self dbOrange; set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow; set: #frameAdornmentWidth for: #PluggableTextMorph to: 2. aUserInterfaceTheme set: #balloonTextColor for: #PluggableTextMorphPlus to: Color lightGray! Item was changed: ----- Method: CommunityTheme class>>addDarkSyntaxHighlighting: (in category 'instance creation') ----- addDarkSyntaxHighlighting: aUserInterfaceTheme "self createDark apply." | normal bold italic underlined darkMap | normal := TextEmphasis normal. bold:=TextEmphasis bold. italic:=TextEmphasis italic. underlined := TextEmphasis underlined. darkMap := StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9. aUserInterfaceTheme set: #default for: #SHTextStylerST80 to: {self dbForeground}; set: #invalid for: #SHTextStylerST80 to: {self dbInvalid}; set: #excessCode for: #SHTextStylerST80 to: {self dbInvalid twiceDarker}; "Descriptive text for humans, italicized." set: #comment for: #SHTextStylerST80 to: {self dbComment. italic}; set: #unfinishedComment for: #SHTextStylerST80 to: {self dbComment darker. italic}; set: #'$' for: #SHTextStylerST80 to: {self dbConstant}; set: #character for: #SHTextStylerST80 to: {self dbConstant}; set: #integer for: #SHTextStylerST80 to: {self dbConstant}; set: #number for: #SHTextStylerST80 to: {self dbConstant}; set: #- for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #= for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #symbol for: #SHTextStylerST80 to: {self dbBedrock}; set: #stringSymbol for: #SHTextStylerST80 to: {self dbBedrock}; set: #literalArray for: #SHTextStylerST80 to: {self dbForeground}; set: #string for: #SHTextStylerST80 to: {self dbConstant}; set: #unfinishedString for: #SHTextStylerST80 to: {self dbConstant darker}; set: #assignment for: #SHTextStylerST80 to: {nil. bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. bold}; set: #literal for: #SHTextStylerST80 to: {nil. bold}; set: #keyword for: #SHTextStylerST80 to: {self dbMessage}; set: #binary for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #unary for: #SHTextStylerST80 to: {self dbMessage}; set: #incompleteKeyword for: #SHTextStylerST80 to: {self dbMessage darker. {underlined. bold}}; set: #incompleteBinary for: #SHTextStylerST80 to: {self dbMessage darker. underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {self dbMessage darker. underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {self dbInvalid}; set: #undefinedBinary for: #SHTextStylerST80 to: {self dbInvalid}; set: #undefinedUnary for: #SHTextStylerST80 to: {self dbInvalid}; "Delineate the selector (good for new users), and make the method look like a mini-document with a title." + set: #patternKeyword for: #SHTextStylerST80 to: {self dbMessage lighter. {bold. underlined}}; - set: #patternKeyword for: #SHTextStylerST80 to: {self dbMessage lighter. underlined. darkMap}; set: #patternBinary for: #SHTextStylerST80 to: {nil. bold}; + set: #patternUnary for: #SHTextStylerST80 to: {self dbMessage lighter. {bold. underlined}}; - set: #patternUnary for: #SHTextStylerST80 to: {self dbMessage lighter. underlined. darkMap}; set: #self for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #super for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #true for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #false for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #nil for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #thisContext for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #return for: #SHTextStylerST80 to: {self dbForeground. bold}; + set: #patternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. "darkMap"}; + set: #methodArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. "darkMap"}; - set: #patternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. darkMap}; - set: #methodArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. darkMap}; set: #blockPatternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #blockArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #argument for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #blockArgColon for: #SHTextStylerST80 to: {self dbBedrock}; set: #leftParenthesis for: #SHTextStylerST80 to: {self dbBedrock}; set: #rightParenthesis for: #SHTextStylerST80 to: {self dbBedrock}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {self dbGreen}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {self dbGreen}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {self dbPurple}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {self dbPurple}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {self dbRed}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {self dbRed}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {self dbGreen}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {self dbGreen}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {self dbOrange}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {self dbOrange}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {self dbPurple}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {self dbPurple}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {self dbBlue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {self dbBlue}; set: #blockStart for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockEnd for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockStart1 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockEnd1 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockStart2 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockEnd2 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockStart3 for: #SHTextStylerST80 to: {self dbRed}; set: #blockEnd3 for: #SHTextStylerST80 to: {self dbRed}; set: #blockStart4 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockEnd4 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockStart5 for: #SHTextStylerST80 to: {self dbOrange}; set: #blockEnd5 for: #SHTextStylerST80 to: {self dbOrange}; set: #blockStart6 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockEnd6 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockStart7 for: #SHTextStylerST80 to: {self dbBlue}; set: #blockEnd7 for: #SHTextStylerST80 to: {self dbBlue}; set: #arrayStart for: #SHTextStylerST80 to: {self dbBedrock}; set: #arrayEnd for: #SHTextStylerST80 to: {self dbBedrock}; set: #arrayStart1 for: #SHTextStylerST80 to: {self dbForeground}; set: #arrayEnd1 for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayStart for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {self dbForeground}; set: #leftBrace for: #SHTextStylerST80 to: {self dbForeground}; set: #rightBrace for: #SHTextStylerST80 to: {self dbForeground}; set: #cascadeSeparator for: #SHTextStylerST80 to: {self dbForeground}; set: #statementSeparator for: #SHTextStylerST80 to: {self dbForeground}; set: #externalCallType for: #SHTextStylerST80 to: {self dbForeground}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {self dbForeground}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {self dbForeground}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #methodTempBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockTempBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockArgsBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #primitive for: #SHTextStylerST80 to: {self dbGreen lighter. bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #module for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #blockTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; + set: #instVar for: #SHTextStylerST80 to: {self dbYellow. normal }; + set: #workspaceVar for: #SHTextStylerST80 to: {self dbLocal. italic}; - set: #instVar for: #SHTextStylerST80 to: {self dbYellow. normal. darkMap}; - set: #workspaceVar for: #SHTextStylerST80 to: {self dbLocal. italic. darkMap}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {self dbInvalid}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {self dbGray. underlined}; set: #tempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #patternTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #poolConstant for: #SHTextStylerST80 to: {self dbConstant }; set: #classVar for: #SHTextStylerST80 to: {self dbReference}; + set: #globalVar for: #SHTextStylerST80 to: {self dbClass. normal}. - set: #globalVar for: #SHTextStylerST80 to: {self dbClass. normal. darkMap}. "And the text differ" aUserInterfaceTheme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor color: self dbRed }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor color: self dbBlue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: CommunityTheme class>>addDarkWindowColors: (in category 'instance creation') ----- addDarkWindowColors: aUserInterfaceTheme "self createDark apply." aUserInterfaceTheme set: #uniformWindowColor for: #Model to: Color darkGray; set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; set: #unfocusedLabelColor for: #SystemWindow to: Color veryLightGray; set: #focusedLabelColor for: #SystemWindow to: Color white; set: #customWindowColor for: #Browser to: self dbBlue; set: #customWindowColor for: #ChangeList to: self dbBlue; set: #customWindowColor for: #ChangeSorter to: self dbBlue; + set: #customWindowColor for: #ChatNotes to: self dbPurple twiceDarker; + set: #customWindowColor for: #ClassCommentVersionsBrowser to: self dbPurple twiceDarker; - set: #customWindowColor for: #ChatNotes to: self dbPurple; - set: #customWindowColor for: #ClassCommentVersionsBrowser to: self dbPurple; set: #customWindowColor for: #Debugger to: self dbRed; + set: #customWindowColor for: #DualChangeSorter to: self dbOrange twiceDarker; - set: #customWindowColor for: #DualChangeSorter to: self dbOrange; set: #customWindowColor for: #FileContentsBrowser to: self dbGray; set: #customWindowColor for: #FileList to: self dbGray; set: #customWindowColor for: #Inspector to: self dbYellow duller; set: #customWindowColor for: #InstanceBrowser to: self dbYellow duller; set: #customWindowColor for: #Lexicon to: self dbGreen; set: #customWindowColor for: #MCTool to: self dbOrange twiceDarker; set: #customWindowColor for: #MessageNames to: self dbGreen; set: #customWindowColor for: #MessageSet to: self dbGreen; set: #customWindowColor for: #ObjectExplorer to: self dbYellow duller; set: #customWindowColor for: #PackagePaneBrowser to: self dbBlue; set: #customWindowColor for: #PluggableFileList to: self dbGray; set: #customWindowColor for: #PreferenceBrowser to: self dbBlue; + set: #customWindowColor for: #ProcesBrowser to: self dbAqua; + set: #customWindowColor for: #SMLoader to: self dbOrange twiceDarker; + set: #customWindowColor for: #SMLoaderPlus to: self dbOrange twiceDarker; + set: #customWindowColor for: #SMReleaseBrowser to: self dbOrange twiceDarker; - set: #customWindowColor for: #SMLoader to: self dbOrange; - set: #customWindowColor for: #SMLoaderPlus to: self dbOrange; - set: #customWindowColor for: #SMReleaseBrowser to: self dbOrange; set: #customWindowColor for: #ScriptingDomain to: self dbYellow duller; set: #customWindowColor for: #SelectorBrowser to: self dbBlue; set: #customWindowColor for: #StringHolder to: self dbGray; + set: #customWindowColor for: #TestRunner to: self dbPink darker; - set: #customWindowColor for: #TestRunner to: self dbOrange; set: #customWindowColor for: #TranscriptStream to: self dbGray; + set: #customWindowColor for: #VersionsBrowser to: self dbPurple twiceDarker; + set: #customWindowColor for: #Workspace to: self dbPink darker.! - set: #customWindowColor for: #VersionsBrowser to: self dbPurple; - set: #customWindowColor for: #Workspace to: self dbGray.! Item was changed: ----- Method: CommunityTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak'). theme name: name. "General morph stuff." theme + set: #borderColor for: #ScrollPane to: (Color transparent) ; + set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.3 brightness: 0.10); - set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.5 brightness: 0.25); set: #keyboardFocusWidth for: #Morph to: 2; + set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.025); - set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #hardShadowOffset for: #Morph to: 1@1. self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: CommunityTheme class>>dbAqua (in category 'colors') ----- + dbAqua + "Suitably saturated to serve as dbSelection." + ^ Color r: 0.1 g: 0.5 b: 0.5! - dbAqua - ^ Color r: 0.2 g: 0.4 b: 0.4! Item was changed: ----- Method: CommunityTheme class>>dbBackground (in category 'colors by purpose') ----- dbBackground "Emptiness." + ^Color black! - ^Color gray: 0.1! Item was changed: ----- Method: CommunityTheme class>>dbSelection (in category 'colors by purpose') ----- dbSelection "Selections are transient, like electricity, so a good neon color. The arguments passed to methods and blocks could be considered as much, 'selections', as those made from a list or menu." + ^ self dbAqua adjustSaturation: 0.10 brightness: 0.08! - ^ self dbAqua adjustSaturation: 0.10 brightness: 0.10! From Marcel.Taeumel at hpi.de Tue Aug 9 06:48:10 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 9 07:33:53 2016 Subject: [squeak-dev] Re: The Inbox: ReleaseBuilder-cmm.143.mcz In-Reply-To: References: Message-ID: <1470725290441-4910092.post@n4.nabble.com> commits-2 wrote > Chris Muller uploaded a new version of ReleaseBuilder to project The > Inbox: > http://source.squeak.org/inbox/ReleaseBuilder-cmm.143.mcz > > ==================== Summary ==================== > > Name: ReleaseBuilder-cmm.143 > Author: cmm > Time: 8 August 2016, 8:44:19.037434 pm > UUID: 83ea1203-93ba-4d38-9161-6f6c1597ab61 > Ancestors: ReleaseBuilder-mt.142 > > - Suggest disable #showBoundsInHalo for this release. > - Was allowUnderscoreAsAssignment intended to be unset at some point long > ago? > > =============== Diff against ReleaseBuilder-mt.142 =============== > > Item was changed: > ----- Method: ReleaseBuilder class>>setPreferences (in category > 'scripts') ----- > setPreferences > "Preferences class defaultValueTableForCurrentRelease" > > " Preferences outOfTheBox." "<-- uncomment after > #defaultValueTableForCurrentRelease is fixed up." > > "General User interaction" > Preferences > enable: #generalizedYellowButtonMenu ; > enable: #swapMouseButtons; > disable: #mouseOverForKeyboardFocus. > Morph indicateKeyboardFocus: true. > ToolBuilder openToolsAttachedToMouseCursor: false. > SearchBar useScratchPad: false. > > HandMorph sendMouseWheelToKeyboardFocus: false. > HandMorph synthesizeMouseWheelEvents: true. > > "Text input." > TextEditor > autoEnclose: true ; > autoIndent: true ; > destructiveBackWord: false ; > blinkingCursor: true ; > dumbbellCursor: false. > PluggableTextMorph simpleFrameAdornments: false. > > "Windows" > SystemWindow reuseWindows: false. > SystemWindow windowsRaiseOnClick: true. > SystemWindow windowTitleActiveOnFirstClick: true. > Model windowActiveOnFirstClick: false. "Not good for 800x600" > > Preferences > disable: #showSplitterHandles; > disable: #fastDragWindowForMorphic. > CornerGripMorph drawCornerResizeHandles: false. > ProportionalSplitterMorph > smartHorizontalSplitters: false ; > smartVerticalSplitters: false. > > "Scroll bars." > Preferences > enable: #scrollBarsNarrow; > enable: #scrollBarsOnRight; > disable: #alwaysHideHScrollbar; > disable: #alwaysShowHScrollbar; > disable: #alwaysShowVScrollbar. > ScrollBar > scrollBarsWithoutArrowButtons: true; > scrollBarsWithoutMenuButton: true. > ScrollPane > useRetractableScrollBars: false. > > "Rounded corners." > Morph preferredCornerRadius: 6. > SystemWindow roundedWindowCorners: false. > DialogWindow roundedDialogCorners: false. > MenuMorph roundedMenuCorners: false. > PluggableButtonMorph roundedButtonCorners: false. > ScrollBar roundedScrollBarLook: false. > > "Gradients." > SystemWindow gradientWindow: false. > DialogWindow gradientDialog: false. > MenuMorph gradientMenu: false. > PluggableButtonMorph gradientButton: false. > ScrollBar gradientScrollBar: false. > > "Shadows" > Preferences enable: #menuAppearance3d. > Morph useSoftDropShadow: true. > > "Lists and Trees" > PluggableListMorph > filterableLists: true; > clearFilterAutomatically: false; > highlightHoveredRow: true; > menuRequestUpdatesSelection: true. > PluggableTreeMorph > filterByLabelsOnly: false; > maximumSearchDepth: 1. > > "Standard Tools" > Workspace shouldStyle: false. > Browser > listClassesHierarchically: true; > showClassIcons: true; > showMessageIcons: true; > sortMessageCategoriesAlphabetically: true. > Preferences enable: #annotationPanes; > enable: #optionalButtons; > enable: #diffsWithPrettyPrint; > enable: #traceMessages; > enable: #alternativeBrowseIt; > enable: #menuWithIcons; > enable: #visualExplorer. > SystemNavigation thoroughSenders: true. > Preferences disable: #debugLogTimestamp. > > "Halo" > Preferences > + disable: #showBoundsInHalo ; > - enable: #showBoundsInHalo ; > disable: #alternateHandlesLook. > > "System" > NetNameResolver enableIPv6: false. > Scanner > + allowUnderscoreAsAssignment: false; > - allowUnderscoreAsAssignment: true; > prefAllowUnderscoreSelectors: true. > > "that's all, folks"! Hi Chris, for out-of-the-box compatibility, I would suggest to leave "allowUnderscoreAsAssignment" enabled. Yes, we should show bounds for the halo, especially for morphs that do not appear rectangular. Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-ReleaseBuilder-cmm-143-mcz-tp4910071p4910092.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Tue Aug 9 07:51:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 07:51:08 2016 Subject: [squeak-dev] The Trunk: System-mt.872.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.872.mcz ==================== Summary ==================== Name: System-mt.872 Author: mt Time: 9 August 2016, 9:50:40.868964 am UUID: 511a4f87-d58e-cd46-ae15-97e9b82e1ab1 Ancestors: System-cmm.871 Fix UI theme creation in the sense that it will merge-in settings from other themes but overwrite existing settings. Makes the adjustment for UI themes for the release easier. You don't have to remove them or clean them up first. =============== Diff against System-cmm.871 =============== Item was changed: ----- Method: CommunityTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | + theme merge: (self named: 'Squeak') overwrite: true. - theme merge: (self named: 'Squeak'). theme name: name. "General morph stuff." theme set: #borderColor for: #ScrollPane to: (Color transparent) ; set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.3 brightness: 0.10); set: #keyboardFocusWidth for: #Morph to: 2; set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.025); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #hardShadowOffset for: #Morph to: 1@1. self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: MonokaiTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Monokai (dark)'. ^ (self named: name) in: [:theme | + theme merge: (self named: 'Squeak') overwrite: true. - theme merge: (self named: 'Squeak'). theme name: name. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1. self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: SolarizedTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Solarized (dark)'. ^ (self named: name) in: [:theme | + theme merge: (self named: 'Squeak') overwrite: true. - theme merge: (self named: 'Squeak'). theme name: name. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self darkContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: SolarizedTheme class>>createLight (in category 'instance creation') ----- createLight "You have to create dark first. self createLight apply." | name | name := 'Solarized (light)'. ^ (self named: 'Solarized (light)') in: [:theme | + theme merge: (self named: 'Solarized (dark)') overwrite: true. - theme merge: (self named: 'Solarized (dark)'). theme name: name. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self lightContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. self addLightFonts: theme; addLightWindowColors: theme; addLightSyntaxHighlighting: theme; addLightScrollables: theme; addLightButtons: theme; addLightDialogs: theme; addLightMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: SqueakTheme class>>createDuller (in category 'instance creation') ----- createDuller "self createDuller apply" | name | name := 'Squeak (duller windows)'. ^ (self named:name) in: [:theme | + theme merge: (self named: 'Squeak') overwrite: true. - theme merge: (self named: 'Squeak'). theme name: name. self addDullerWindowColors: theme. theme]! From commits at source.squeak.org Tue Aug 9 08:05:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 08:05:49 2016 Subject: [squeak-dev] The Trunk: System-mt.873.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.873.mcz ==================== Summary ==================== Name: System-mt.873 Author: mt Time: 9 August 2016, 10:05:18.198688 am UUID: a3845c22-eea2-9d4e-9621-efa1e6355f05 Ancestors: System-mt.872 Add missing background fill for Monokai and Solarized themes. (Which will be used unless overridden by a user's custom background :) =============== Diff against System-mt.872 =============== Item was changed: ----- Method: MonokaiTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Monokai (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1. + theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). + self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. theme]! Item was added: + ----- Method: MonokaiTheme class>>darkBackgroundForm (in category 'instance creation') ----- + darkBackgroundForm + + | ref | + ref := self backgroundColor. + + ^ (SqueakTheme linenblue asFormOfDepth: 32) collectColors: [:c | + Color + h:ref hue + s: ref saturation + v: c brightness + alpha: c alpha]! Item was changed: ----- Method: SolarizedTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Solarized (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self darkContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. + + theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: SolarizedTheme class>>createLight (in category 'instance creation') ----- createLight "You have to create dark first. self createLight apply." | name | name := 'Solarized (light)'. ^ (self named: 'Solarized (light)') in: [:theme | theme merge: (self named: 'Solarized (dark)') overwrite: true. theme name: name. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self lightContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. + + theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self lightBackgroundForm). self addLightFonts: theme; addLightWindowColors: theme; addLightSyntaxHighlighting: theme; addLightScrollables: theme; addLightButtons: theme; addLightDialogs: theme; addLightMenusAndDockingBars: theme. theme]! Item was added: + ----- Method: SolarizedTheme class>>darkBackgroundForm (in category 'instance creation') ----- + darkBackgroundForm + + | ref | + ref := self darkBackground. + + ^ (SqueakTheme linenblue asFormOfDepth: 32) collectColors: [:c | + Color + h:ref hue + s: ref saturation + v: c brightness + alpha: c alpha]! Item was added: + ----- Method: SolarizedTheme class>>lightBackgroundForm (in category 'instance creation') ----- + lightBackgroundForm + + | ref | + ref := self lightBackground. + + ^ (SqueakTheme linenblue asFormOfDepth: 32) collectColors: [:c | + Color + h:ref hue + s: ref saturation + v: 1.0 - c brightness + alpha: c alpha]! From Marcel.Taeumel at hpi.de Tue Aug 9 08:00:28 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 9 08:46:15 2016 Subject: [squeak-dev] Re: Windows Time millisecondClockValue (system start vs. image start) In-Reply-To: References: <1470586411956-4909869.post@n4.nabble.com> Message-ID: <1470729628625-4910102.post@n4.nabble.com> Nicolai Hess-3-2 wrote > 2016-08-07 18:13 GMT+02:00 marcel.taeumel < > Marcel.Taeumel@ > >: > >> Nicolai Hess-3-2 wrote >> > 2016-08-07 17:18 GMT+02:00 Henrik Nergaard < >> >> > henrik.nergaard@ >> >> > >: >> > >> >> Hmm. >> >> >> >> ActiveHand lastEvent ?"[(798@340) mouseOver SHIFT nil nil]" >> >> >> >> ActiveHand instVarNamed: #lastEventBuffer "#(1 148008281 659 126 0 0 1 >> >> 1)" >> >> ?Timestamp is there, second element? >> >> >> >> >> >> >> >> I cannot see that the stamp is ever 0 from a raw event polled, and I >> >> guess >> >> that will (should) never happen? >> >> >> >> Ie; in HandMorph >> generateMouseEvent: line 15 ?stamp = 0 ifTrue: [ >> >> stamp >> >> := Time milisecondClockValue ]? is dead/wrong code? >> >> >> >> >> >> >> >> So I guess that somewhere along the event dispatching/processing >> (after >> >> he >> >> event has been moved from the raw buffer into a MorphicEvent subclass >> >> object) things are copied/translated without keeping the original >> >> timestamp >> >> intact. >> >> >> >> I found at least two places that causes the timestamp to be lost: >> >> >> >> MouseEvent >> asMoueMove (sets a new timestamp using >> Time) >> >> >> >> MouseEvent >> asMouseOver >> >> >> > >> > Yes, that is what I meant by generating mousemove/mouseover events. >> > For example, if you put >> > Transcript show:{ evt type. evt timeStamp . firstClickTime} ;cr. >> > >> > at top of method handleEvent:from: >> > >> > and click (just click no movement) on the title pane of a system >> window, >> > you'll see a alot of >> > #(#mouseMove 9128631 12518171) >> > Transcript entries >> > >> > The entries look like they are new events, but I think they are just >> > generated from the last real event , but with a new time stamp. >> > >> > >> >> >> >> >> >> I think there are two bugs here >> >> >> >> 1) VM clock can differ from Image clock >> >> >> >> 2) Translating one event from another do not keep the original >> >> timestamp >> >> >> >> >> >> >> >> Best regards, >> >> >> >> Henrik >> >> >> >> >> >> >> >> >> >> >> >> *From:* >> >> > squeak-dev-bounces@.squeakfoundation >> >> > [mailto: >> >> >> >> > squeak-dev-bounces@.squeakfoundation >> >> > ] *On Behalf Of *Nicolai Hess >> >> *Sent:* Sunday, August 7, 2016 3:57 PM >> >> *To:* Pharo Development List < >> >> > pharo-dev@.pharo >> >> > >; The >> >> general-purpose Squeak developers list <squeak-dev@lists. >> > > squeakfoundation.org> >> >> *Subject:* [squeak-dev] Windows Time millisecondClockValue (system >> start >> >> vs. image start) >> >> >> >> >> >> >> >> Hi, >> >> >> >> a call to >> >> >> >> Time millisecondClockValue >> >> >> >> gives the current milliseconds since the image started. Did this >> change >> ? >> >> >> >> I have a windows squeak 4.4 VM where it gave the uptime of the system >> (on >> >> windows). >> >> >> >> Background: >> >> >> >> HandMorph generates some MouseOver and/or MouseMove events, and if the >> >> >> >> timeStamp value is not set, it sets it to Time millisecondClockValue, >> but >> >> the "real" events have >> >> >> >> a time stamp of "milliseconds since system was booted". >> >> >> >> >> >> So, now it can happen that you have a real event (mouse click) at >> >> timeStamp (msecs since boot up) >> >> 3000000 >> >> >> >> and afterwards a generated mouseOver event with a time stamp since >> image >> >> startup >> >> >> >> 2000000 (if the image started ~15 min after system boot). >> >> >> >> That is, a later event as a lower time stamp. This will disturb the >> event >> >> handling in >> >> >> >> HandMorph>>#handleEvent: from: >> >> >> >> Somehow, (after having the image running for a long time ? I don't >> know). >> >> The time stamp >> >> >> >> for the generated events is allways much bigger than for the system >> >> events, and this >> >> >> >> will make it impossible to detect double-click events. >> >> >> >> see issue >> >> https://pharo.fogbugz.com/f/cases/18859 >> >> >> >> and >> >> http://stackoverflow.com/questions/38700587/double- >> >> click-highlight-selection-in-pharo-5-0 >> >> >> >> >> >> >> >> thanks >> >> >> >> nicolai >> >> >> >> >> >> >> >> >> >> Hi Nicolas, >> >> event time stamps have been broken in the Windows VM for a long time. See >> here: >> http://forum.world.st/win32-Morphic-event-timeStamp-bug-td4824244.html >> >> Best, >> Marcel >> >> > Hi, Marcel, yes I saw that thread, we should *bump* it again. You solution > was to modify the event time stamp to use the same > milliseconds-since-image-start, right? > > I too was confused about the ioMSecs implementation in sqWin32Windows with > timeGetTime() vs. the one from sqWin32Heartbeat.c > It seems the windows vm uses the one from the heartbeat, but I couldn't > find where this was set, did you find it out? > > >> >> >> >> -- >> View this message in context: http://forum.world.st/Windows- >> Time-millisecondClockValue-system-start-vs-image-start- >> tp4909842p4909869.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Hi Nicolai, Windows' message (MSG) structs provide timestamps relative to OS startup. If we want to have Squeak startup, we have to remember the offset on Squeak startup and then apply it to every keyboard/mouse event timestamp when preparing Squeak's data structures. We should not just use a mixture of ioMicroMSecs() and MSG->time in sqWin32Window.c meaning that we should "normalize" MSG->time because ioMicroMSecs is normalized to Squeak startup time, too. Yes, the Windows VM uses a heartbeat thread. So, there is sqWin32Time.c and sqWin32Heartbeat.c. Both define ioMicroMSecs() and ioMSecs(). sqWin32Time.c has the check "#if !STACKVM", which means the interpreter VM, I think. See, for example "spursrc\vm\interp.h": ... 35 #define STACKVM 1 36 #define SPURVM 1 37 #define COGVM 1 ... So, we have to fix sqWin32Window.c. Look for all "msg->time" and apply the Squeak-Startup-Offset. Sure, we could just use ioMicroMSecs() but it seems awkward since we have the exact time in the MSG* struct provided by the Windows platform. To check if it works, just restart the VM, move the mouse and evaluate "ActiveHand lastEvent timeStamp". It should be only a few seconds, that is a few thousand milliseconds (~5000). Event synthesis *in* Squeak uses "Time eventMilliseconds", which calls ioMSecs(). Not sure why not ioMicroMSecs(). Maybe it is related to the Chronology/Timezone discussion a few weeks/month ago. See senders of #eventMilliseconds and browse EventSensor and HandMorph to find out more about when and why to synthesize user input events in Squeak. Hmm... if you hunt down primitive 135, which is called in Time class >> #eventMillisecondClock, you end up in cointerp.c: ... static void primitiveMillisecondClock(void) { DECL_MAYBE_SQ_GLOBAL_STRUCT sqInt oop; char *sp; /* begin pop:thenPush: */ oop = ((((ioMSecs()) & MillisecondClockMask) << 3) | 1); longAtput((sp = GIV(stackPointer) + ((1 - 1) * BytesPerWord)), oop); GIV(stackPointer) = sp; } ... So, there is "... ((((ioMSecs()) & MillisecondClockMask) << 3) | 1) ..." to be used for Squeak's event synthesis. At the time of writing, there seems to be to single method in sqWin32Heartbeat.c that provides that number? We have: ... long ioMSecs() { return millisecondClock; } long ioMicroMSecs(void) { return microToMilliseconds(ioUTCMicrosecondsNow());} ... to be used in sqWin32Window.c. Hmmm.... Maybe these two are identical? microToMilliseconds(ioUTCMicrosecondsNow()); ((((ioMSecs()) & MillisecondClockMask) << 3) | 1) Anyway, I think there might be two bugs in sqWin32Window.c 1) msg->time needs to apply the Squeak-startup offset or use ioMicroMSecs() ?? 2) recordDragDropEvent(..) should use the same timestamp as all other events ?? Hmmm.... Best, Marcel -- View this message in context: http://forum.world.st/Windows-Time-millisecondClockValue-system-start-vs-image-start-tp4909842p4910102.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Tue Aug 9 13:54:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 13:54:26 2016 Subject: [squeak-dev] The Trunk: System-mt.874.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.874.mcz ==================== Summary ==================== Name: System-mt.874 Author: mt Time: 9 August 2016, 3:53:54.035781 pm UUID: 563db890-1743-8e43-88d2-f2c811cec4bf Ancestors: System-mt.873 Fix clean-up code for Utilities (to remove it from ReleaseBuilder). =============== Diff against System-mt.873 =============== Item was added: + ----- Method: Utilities class>>cleanUp: (in category 'class initialization') ----- + cleanUp: aggressive + aggressive ifTrue: [self setAuthorInitials: String empty].! From commits at source.squeak.org Tue Aug 9 13:55:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 13:55:45 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.644.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.644.mcz ==================== Summary ==================== Name: Monticello-mt.644 Author: mt Time: 9 August 2016, 3:55:30.142781 pm UUID: 0a078079-a14a-ff47-8fea-954d730bc507 Ancestors: Monticello-mt.643 Small fix in HTTP repository clean-up code. =============== Diff against Monticello-mt.643 =============== Item was changed: ----- Method: MCHttpRepository class>>cleanUp: (in category 'class initialization') ----- cleanUp: aggressive + - super cleanUp: aggressive. aggressive ifTrue: [ self clearCredentials ]! From commits at source.squeak.org Tue Aug 9 14:01:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 14:01:12 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.143.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.143.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.143 Author: mt Time: 9 August 2016, 4:00:59.348781 pm UUID: 0df4c0a8-3a25-ce40-aaec-7d4012d61c76 Ancestors: ReleaseBuilder-mt.142 Account for additional repositores such as Squeak's inbox. Additional check for undeclared symbols, which recompiling all source code does not detect. =============== Diff against ReleaseBuilder-mt.142 =============== Item was added: + ----- Method: ReleaseBuilder class>>addAdditionalRepositories (in category 'scripts - support') ----- + addAdditionalRepositories + + MCRepositoryGroup default addRepository: self inboxRepository. + + #( + 'http://www.squeaksource.com/MetacelloRepository' + 'http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/MetacelloRepository' + ) collect: [:url | + MCRepositoryGroup default addRepository: (MCHttpRepository + location: url + user: 'squeak' + password: 'squeak')].! Item was added: + ----- Method: ReleaseBuilder class>>checkForUndeclaredSymbols (in category 'scripts - support') ----- + checkForUndeclaredSymbols + "Parses through all source code in the image and looks for undeclard symbols in those." + + | msgs | + msgs := OrderedCollection new. + + SystemNavigation default allClasses + do: [:cls | + {cls. cls class} do: [:b | b selectorsAndMethodsDo: [:selector :method | + | parser ranges | + parser := SHParserST80 new. + parser parseAMethod: true. + ranges := parser + rangesIn: method getSource + classOrMetaClass: method methodClass + workspace: nil + environment: method methodClass environment. + ranges anySatisfy: [:range | + range type = #undefinedIdentifier]]]] + displayingProgress: [:behavior | 'Checking for undeclared symbols...']. + + msgs ifNotEmpty: [ + SystemNavigation default browseMessageList: msgs name: 'Invalid Messages ', msgs size autoSelect: nil. + Warning signal: 'There is source code with undeclared symbols!!'].! Item was changed: ----- Method: ReleaseBuilder class>>clearCaches (in category 'scripts') ----- clearCaches "Clear caches, discard unused references, free space." Smalltalk cleanUp: true. + Project current resourceManager reset. "Zap eventual resources" self discardUserObjects. MCFileBasedRepository flushAllCaches. - "Clear all user login data." - MCHttpRepository clearCredentials. - Utilities setAuthorInitials: String empty. - Environment allInstancesDo: [ : env | env purgeUndeclared ]. Undeclared removeUnreferencedKeys. Smalltalk garbageCollect.! Item was added: + ----- Method: ReleaseBuilder class>>inboxRepository (in category 'accessing') ----- + inboxRepository + ^ MCRepository inbox! Item was changed: ----- Method: ReleaseBuilder class>>prepareSourceCode (in category 'preparing') ----- prepareSourceCode "Update code. Remove foreign packages." MCMcmUpdater defaultUpdateURL: self buildRepository description. MCMcmUpdater updateMissingPackages: true. MCMcmUpdater enableUpdatesForAllPackages. MCMcmUpdater default doUpdate: false. "non-interactive". self unloadForeignPackages; checkForDirtyPackages; + loadWellKnownPackages; + checkForUndeclaredSymbols. - loadWellKnownPackages. Compiler recompileAll.! From commits at source.squeak.org Tue Aug 9 14:33:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 14:33:34 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.144.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.144.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.144 Author: mt Time: 9 August 2016, 4:33:29.224729 pm UUID: d69d9dfa-eb55-6940-b18c-356b1528cc85 Ancestors: ReleaseBuilder-mt.143 Do not open welcome workspaces yet. =============== Diff against ReleaseBuilder-mt.143 =============== Item was changed: ----- Method: ReleaseBuilder class>>openWelcomeWorkspaces (in category 'scripts - support') ----- openWelcomeWorkspaces + + " |offset | offset:= 50@50. - |offset | offset:= 50@50. #('License Information' 'The Squeak User Interface' 'Working With Squeak' 'Release Notes') with: #(#licenseInformation #squeakUserInterface #workingWithSqueak #releaseNotes) do: [ : eachLabel : eachAccessor | TheWorldMainDockingBar instance showWelcomeText: eachAccessor label: eachLabel in: (offset extent: 500@300). + offset := offset + (30@30)]"! - offset := offset + (30@30)]! From commits at source.squeak.org Tue Aug 9 15:10:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 15:10:49 2016 Subject: [squeak-dev] The Trunk: System-mt.875.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.875.mcz ==================== Summary ==================== Name: System-mt.875 Author: mt Time: 9 August 2016, 5:10:19.663174 pm UUID: 3b385daa-216f-2343-bb2c-c82ff68474b1 Ancestors: System-mt.874 Fix long delay when changing many fonts at once like in the demo mode. =============== Diff against System-mt.874 =============== Item was changed: ----- Method: Preferences class>>attemptToRestoreClassicFonts (in category 'prefs - fonts') ----- attemptToRestoreClassicFonts "If certain fonts formerly used in early versions of Squeak happen to be present in the image, restore them to their corresponding roles. Not called by any other method -- intended to be invoked via do-it, possibly in a postscript" "Preferences attemptToRestoreClassicFonts" + self setDefaultFonts: #( (setButtonFontTo: NewYork 12) - #( (setButtonFontTo: NewYork 12) (setCodeFontTo: NewYork 12) (setFlapsFontTo: ComicBold 16) (setEToysFontTo: ComicBold 16) (setListFontTo: NewYork 12) (setMenuFontTo: NewYork 12) (setWindowTitleFontTo: NewYork 15) + (setSystemFontTo: NewYork 12)) .! - (setSystemFontTo: NewYork 12)) do: - [:triplet | | aTextStyle | - (aTextStyle := TextStyle named: triplet second) ifNotNil: - [self perform: triplet first with: (aTextStyle fontOfSize: triplet third). - Transcript cr; show: triplet second, ' installed as ', (triplet first copyFrom: 4 to: triplet first size - 3)]]! Item was changed: ----- Method: Preferences class>>refreshFontSettings (in category 'prefs - fonts') ----- refreshFontSettings "Try to update all the current font settings to make things consistent." + UserInterfaceTheme current applyAfter: [ + self setFlapsFontTo: (self standardFlapFont); + setEToysFontTo: (self standardEToysFont); + setWindowTitleFontTo: (self windowTitleFont); + setListFontTo: (self standardListFont); + setMenuFontTo: (self standardMenuFont); + setSystemFontTo: (TextStyle defaultFont); + setCodeFontTo: (self standardCodeFont); + setBalloonHelpFontTo: (BalloonMorph balloonFont)]. - self setFlapsFontTo: (self standardFlapFont); - setEToysFontTo: (self standardEToysFont); - setWindowTitleFontTo: (self windowTitleFont); - setListFontTo: (self standardListFont); - setMenuFontTo: (self standardMenuFont); - setSystemFontTo: (TextStyle defaultFont); - setCodeFontTo: (self standardCodeFont); - setBalloonHelpFontTo: (BalloonMorph balloonFont). SystemWindow allSubInstancesDo: [ :s | | rawLabel | rawLabel := s getRawLabel. rawLabel owner vResizing: #spaceFill. rawLabel font: rawLabel font. s setLabel: s label. s replaceBoxes ].! Item was changed: ----- Method: Preferences class>>restoreFontsAfter: (in category 'prefs - fonts') ----- restoreFontsAfter: aBlock "Restore the currently chosen set of standard fonts after evaluating aBlock. Used for tests that modify the default fonts." | standardDefaultTextFont standardListFont standardEToysFont standardMenuFont windowTitleFont standardBalloonHelpFont standardCodeFont standardButtonFont | standardDefaultTextFont := Preferences standardDefaultTextFont. standardListFont := Preferences standardListFont. standardEToysFont := Preferences standardEToysFont. standardMenuFont := Preferences standardMenuFont. windowTitleFont := Preferences windowTitleFont. standardBalloonHelpFont := Preferences standardBalloonHelpFont. standardCodeFont := Preferences standardCodeFont. standardButtonFont := Preferences standardButtonFont. + ^ UserInterfaceTheme current applyAfter: [ + aBlock ensure: [ + Preferences setSystemFontTo: standardDefaultTextFont. + Preferences setListFontTo: standardListFont. + Preferences setEToysFontTo: standardEToysFont. + Preferences setMenuFontTo: standardMenuFont. + Preferences setWindowTitleFontTo: windowTitleFont. + Preferences setBalloonHelpFontTo: standardBalloonHelpFont. + Preferences setCodeFontTo: standardCodeFont. + Preferences setButtonFontTo: standardButtonFont]]. - ^aBlock ensure: [ - Preferences setSystemFontTo: standardDefaultTextFont. - Preferences setListFontTo: standardListFont. - Preferences setEToysFontTo: standardEToysFont. - Preferences setMenuFontTo: standardMenuFont. - Preferences setWindowTitleFontTo: windowTitleFont. - Preferences setBalloonHelpFontTo: standardBalloonHelpFont. - Preferences setCodeFontTo: standardCodeFont. - Preferences setButtonFontTo: standardButtonFont. - ]. ! Item was changed: ----- Method: Preferences class>>setDefaultFonts: (in category 'prefs - fonts') ----- setDefaultFonts: defaultFontsSpec "Since this is called from menus, we can take the opportunity to prompt for missing font styles." | fontNames map emphases | fontNames := defaultFontsSpec collect: [:array | array second]. map := IdentityDictionary new. emphases := IdentityDictionary new. fontNames do: [:originalName | | decoded style | decoded := TextStyle decodeStyleName: originalName. style := map at: originalName put: (TextStyle named: decoded second). emphases at: originalName put: decoded first. style ifNil: [map at: originalName put: TextStyle default]]. + UserInterfaceTheme current applyAfter: [ + defaultFontsSpec do: [:triplet | self + perform: triplet first + with: (((map at: triplet second) fontOfPointSize: triplet third) emphasized: (emphases at: triplet second))]].! - defaultFontsSpec do: [:triplet | self - perform: triplet first - with: (((map at: triplet second) fontOfPointSize: triplet third) emphasized: (emphases at: triplet second))]! Item was changed: Object subclass: #UserInterfaceTheme + instanceVariableNames: 'scope properties name next ignoreApply' - instanceVariableNames: 'scope properties name next' classVariableNames: 'All Current Default' poolDictionaries: '' category: 'System-Support'! !UserInterfaceTheme commentStamp: '' prior: 0! A UserInterfaceTheme is a dictionary of preferred visual-properties; colors, borderStyles, borderWidths, fonts, forms, etc. used to color and style the IDE. Accessing The Theme To access the proper UserInterfaceTheme instance for an object, send it #userInterfaceTheme. The default implementation on Object provides the one instance of that is in-use by the IDE at the current time. Customizing The Theme We can ask the userInterfaceTheme for the value of any visual-property, by name: mySystemWindow userInterfaceTheme closeBoxImage Initially, the above answers nil, which causes the legacy code to use whatever default it's always used. To override various visual-properties of any kind of object, the #set: onAny: to: message can be used. For example, myUserInterfaceTheme set: #closeBoxImage for: SystemWindow to: MenuIcons smallCancelIcon Alternatively, values may be derived based on other values in the theme, as in: myUserInterfaceTheme set: #color for: FillInTheBlankMorph to: { MenuMorph->#color. #twiceDarker } Now, the accessing expression, above, will answer will answer MenuIcons' smallCancelIcon instead of nil. SystemWindow's code can be changed to use the expression above to access elements of the theme. Upgrading Legacy Code Following the introduction of this class, various client code all around the system must be modified to access it. This variety of legacy code uses a variety of methods to specify their visual properties: 1) a hard-coded values. 2) a values derived from some other value. 3) providing local storage for a settable value which can be nil. 4) providing local storage for a settable value which is expected to always have a particular valid value (never nil). The requirement, for each case, is to let the value be overridden. The solution for each of the above should be handled respectively to the above list, as follows: 1) Check the userInterfaceTheme, if that property returns nil, use the legacy hard-coded value. (see example: SystemWindow>>#createCloseBox). 2) Nothing to do -- simply perform the same derivation on the result of (1). 3) Check the local storage, if present, use it. If nil, then check the userInterfaceTheme, if it has this property present, use it, else return nil. 4) Check the userInterfaceTheme, if the property is not nil, use it, otherwise use the local value. Tool Support If a new access to #userInterfaceTheme is added to the code, be sure to add the property and its description to the #themeSettings for that class. See implementors of #themeSettings for examples.! Item was changed: ----- Method: UserInterfaceTheme>>apply (in category 'actions') ----- apply "Apply this theme to all affected objects. Let classes decide on how to iterate and call their instances." + ignoreApply == true ifTrue: [^ self]. + UserInterfaceTheme current: self. self class clientClassesToReapply in: [:cc | cc do: [:eachClass | eachClass applyUserInterfaceTheme]. (cc select: [:eachClass | eachClass canApplyThemeToInstances]) do: [:eachClass | eachClass applyThemeToInstances] displayingProgress: [:eachClass | 'Applying {1} to instances of {2}' format: {self name. eachClass name}] every: 1000 ]. Project current restoreDisplay.! Item was added: + ----- Method: UserInterfaceTheme>>applyAfter: (in category 'actions') ----- + applyAfter: block + + ignoreApply := true. + ^ block ensure: [ignoreApply := false. self apply]! From commits at source.squeak.org Tue Aug 9 15:11:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 15:11:23 2016 Subject: [squeak-dev] The Trunk: SmallLand-ColorTheme-mt.8.mcz Message-ID: Marcel Taeumel uploaded a new version of SmallLand-ColorTheme to project The Trunk: http://source.squeak.org/trunk/SmallLand-ColorTheme-mt.8.mcz ==================== Summary ==================== Name: SmallLand-ColorTheme-mt.8 Author: mt Time: 9 August 2016, 5:11:15.740174 pm UUID: 0d23fc79-6fdf-bc49-8c3b-70af909b7b54 Ancestors: SmallLand-ColorTheme-mt.7 Fix long delay when changing many fonts at once like in the demo mode. =============== Diff against SmallLand-ColorTheme-mt.7 =============== Item was changed: ----- Method: Preferences class>>smallLandBigFonts (in category '*SmallLand-ColorTheme') ----- smallLandBigFonts "private - change the fonts to small-land's choices" " Preferences smallLandBigFonts. " + Preferences setDefaultFonts: #( - #( (setButtonFontTo: #BitstreamVeraSansMono 15) (setListFontTo: #BitstreamVeraSans 15) (setMenuFontTo: #BitstreamVeraSans 15) (setSystemFontTo: #BitstreamVeraSans 15) (setWindowTitleFontTo: #BitstreamVeraSans 15) (setCodeFontTo: #BitstreamVeraSerif 15) (setFlapsFontTo: #KomikaText 24) (setEToysFontTo: #KomikaText 24) (setHaloLabelFontTo: #KomikaText 24) (setEToysTitleFontTo: #KomikaText 36) + ). - ) - do: [:triplet | - Preferences - perform: triplet first - with: (StrikeFont familyName: triplet second pointSize: triplet third) - ]. BalloonMorph setBalloonFontTo: (StrikeFont familyName: #BitstreamVeraSans pointSize: 15). ! Item was changed: ----- Method: Preferences class>>smallLandSmallFonts (in category '*SmallLand-ColorTheme') ----- smallLandSmallFonts "private - change the fonts to small-land's choices" " Preferences smallLandFonts. " + Preferences setDefaultFonts: #( - #( (setButtonFontTo: #BitstreamVeraSansMono 12) (setListFontTo: #BitstreamVeraSans 12) (setMenuFontTo: #BitstreamVeraSans 12) (setSystemFontTo: #BitstreamVeraSans 12) (setWindowTitleFontTo: #BitstreamVeraSans 15) (setCodeFontTo: #BitstreamVeraSerif 12) (setFlapsFontTo: #KomikaText 15) (setEToysFontTo: #KomikaText 15) (setHaloLabelFontTo: #KomikaText 15) (setEToysTitleFontTo: #KomikaText 24) + ). - ) - do: [:triplet | - Preferences - perform: triplet first - with: (StrikeFont familyName: triplet second pointSize: triplet third) - ]. BalloonMorph setBalloonFontTo: (StrikeFont familyName: #BitstreamVeraSans pointSize: 12). ! Item was changed: ----- Method: Preferences class>>smallLandTinyFonts (in category '*SmallLand-ColorTheme') ----- smallLandTinyFonts "private - change the fonts to small-land's choices" " Preferences smallLandTinyFonts. " + Preferences setDefaultFonts: #( - #( (setButtonFontTo: #AccujenMono 9) (setListFontTo: #Accujen 9) (setMenuFontTo: #Accujen 9) (setSystemFontTo: #Accujen 9) (setWindowTitleFontTo: #Accujen 10) (setCodeFontTo: #Accuny 9) (setFlapsFontTo: #Atlanta 11) (setEToysFontTo: #Atlanta 11) (setHaloLabelFontTo: #Atlanta 11) (setEToysTitleFontTo: #Atlanta 11) + ). - ) - do: [:triplet | - Preferences - perform: triplet first - with: (StrikeFont familyName: triplet second pointSize: triplet third) - ]. BalloonMorph setBalloonFontTo: (StrikeFont familyName: #Accujen pointSize: 9). ! From commits at source.squeak.org Tue Aug 9 15:17:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 15:17:14 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1246.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1246.mcz ==================== Summary ==================== Name: Morphic-mt.1246 Author: mt Time: 9 August 2016, 5:15:40.547869 pm UUID: 913d6c07-4948-5c44-9be2-7f6656e5b6e6 Ancestors: Morphic-mt.1245 Small fix in window focus updates. =============== Diff against Morphic-mt.1245 =============== Item was changed: ----- Method: SystemWindow class>>reconfigureWindowsForFocus (in category 'private') ----- reconfigureWindowsForFocus self allSubInstancesDo: [:window | window passivate; activate; unlockWindowDecorations; passivateIfNeeded]. + self topWindow ifNotNil: [:wnd | wnd activate].! - self topWindow activate.! From tim at rowledge.org Tue Aug 9 18:59:44 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Aug 9 18:59:50 2016 Subject: [squeak-dev] Allow block argument assignment preference Message-ID: I?m checking out the latest updates prior to the next release and there are a few things I have to question. This one is the preference for allowing block argument assignment; I think that?s probably a bad thing to have as a default. Surely we should be encouraging fixing of the problematic code? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Concurrent: an object that looks like a raisin but isn't From asqueaker at gmail.com Tue Aug 9 19:20:16 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Aug 9 19:20:58 2016 Subject: [squeak-dev] Allow block argument assignment preference In-Reply-To: References: Message-ID: +1, arguments should not be assignable. On Tue, Aug 9, 2016 at 1:59 PM, tim Rowledge wrote: > I?m checking out the latest updates prior to the next release and there are a few things I have to question. This one is the preference for allowing block argument assignment; I think that?s probably a bad thing to have as a default. Surely we should be encouraging fixing of the problematic code? > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Concurrent: an object that looks like a raisin but isn't > > > From asqueaker at gmail.com Tue Aug 9 19:35:52 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Aug 9 19:36:36 2016 Subject: [squeak-dev] Re: The Inbox: ReleaseBuilder-cmm.143.mcz In-Reply-To: <1470725290441-4910092.post@n4.nabble.com> References: <1470725290441-4910092.post@n4.nabble.com> Message-ID: Hi Marcel, > for out-of-the-box compatibility, I would suggest to leave > "allowUnderscoreAsAssignment" enabled. Are you referring to compatibility with old, or new, applications? Are there applications running on modern Squeak 5 still using underscores? At one time, I guess we thought there were sufficient issues associated with overloading the underscore character, that we decided to explicitly encourage applications to run FixUnderscores. If people are actively still preferring the use of underscore assignment in new code today, then I can understand turning it on.. Just curious. From tim at rowledge.org Tue Aug 9 20:00:54 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Aug 9 20:00:57 2016 Subject: [squeak-dev] Re: The Inbox: ReleaseBuilder-cmm.143.mcz In-Reply-To: References: <1470725290441-4910092.post@n4.nabble.com> Message-ID: > On 09-08-2016, at 12:35 PM, Chris Muller wrote: > If people are actively still preferring the use of underscore > assignment in new code today, then I can understand turning it on.. I still very much prefer the proper arrow assign but not enough to inflict a misleading underscore char on my saved code. Given our ability to handle unicode I?d love to see proper up-arrow and left-arrow being used - even if they were translated back to ^ & := on fileout (and converse on filein of course). Unicode U+2190/1 anyone? That?s ? & ? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Fractured Idiom:- QUIP PRO QUO - A fast retort From Das.Linux at gmx.de Tue Aug 9 20:07:39 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Tue Aug 9 20:07:44 2016 Subject: [squeak-dev] Re: The Inbox: ReleaseBuilder-cmm.143.mcz In-Reply-To: References: <1470725290441-4910092.post@n4.nabble.com> Message-ID: <40CC53D0-136F-4D10-B125-C65ADC11D8D7@gmx.de> On 09.08.2016, at 22:00, tim Rowledge wrote: >> On 09-08-2016, at 12:35 PM, Chris Muller wrote: >> If people are actively still preferring the use of underscore >> assignment in new code today, then I can understand turning it on.. > > > I still very much prefer the proper arrow assign but not enough to inflict a misleading underscore char on my saved code. Given our ability to handle unicode I?d love to see proper up-arrow and left-arrow being used - even if they were translated back to ^ & := on fileout (and converse on filein of course). Unicode U+2190/1 anyone? > That?s ? & ? \ I wanted to do that for years, actually. But then I saw the limitation of todays typewri^H^H^H^H^H^H^H keyboards and the only a tad desolate state of keyboard shortcuts in Squeak at that time and put my effort on the ?dreams? shelf. Best regards -Tobias From commits at source.squeak.org Tue Aug 9 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 9 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160809215502.12046.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068462.html Name: System-cmm.871 Ancestors: System-mt.870 Some CommunityTheme #dark tweaks and fixes after an evening working with it: - Dialogs were completely gray, gave them a little color. - A font and dbBackground adjustment for better clarity and contrast with text. - Selected menu items are easier to read (brightened #selectionTextColor). - Softer filter indication provides better contrast in the filter-indication of lists. - Some of the window colors were too bright, darkened them. - The search box delineation was too bright, eliminated it. - Keyboard focus color was too bright, subtlized it. - However, a bolder and brighter dbSelection (dbAqua) has improved stepping through code in the debugger, especially long methods. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068463.html Name: System-mt.872 Ancestors: System-cmm.871 Fix UI theme creation in the sense that it will merge-in settings from other themes but overwrite existing settings. Makes the adjustment for UI themes for the release easier. You don't have to remove them or clean them up first. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068464.html Name: System-mt.873 Ancestors: System-mt.872 Add missing background fill for Monokai and Solarized themes. (Which will be used unless overridden by a user's custom background :) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068465.html Name: System-mt.874 Ancestors: System-mt.873 Fix clean-up code for Utilities (to remove it from ReleaseBuilder). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068466.html Name: Monticello-mt.644 Ancestors: Monticello-mt.643 Small fix in HTTP repository clean-up code. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068467.html Name: ReleaseBuilder-mt.143 Ancestors: ReleaseBuilder-mt.142 Account for additional repositores such as Squeak's inbox. Additional check for undeclared symbols, which recompiling all source code does not detect. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068468.html Name: ReleaseBuilder-mt.144 Ancestors: ReleaseBuilder-mt.143 Do not open welcome workspaces yet. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068469.html Name: System-mt.875 Ancestors: System-mt.874 Fix long delay when changing many fonts at once like in the demo mode. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068470.html Name: SmallLand-ColorTheme-mt.8 Ancestors: SmallLand-ColorTheme-mt.7 Fix long delay when changing many fonts at once like in the demo mode. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068471.html Name: Morphic-mt.1246 Ancestors: Morphic-mt.1245 Small fix in window focus updates. ============================================= From ma.chris.m at gmail.com Tue Aug 9 21:58:59 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Tue Aug 9 21:59:42 2016 Subject: [squeak-dev] FileList no longer previews picture files Message-ID: I can no longer preview .png, .jpg, etc. in the FileList. Something regressed? From Yoshiki.Ohshima at acm.org Tue Aug 9 22:12:36 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Tue Aug 9 22:12:39 2016 Subject: [squeak-dev] Smallapack In-Reply-To: References: Message-ID: Thanks! I am trying this from a vanilla 5.0 image and I see that ConfigurationOfSmallapack-nice.18 is loaded. Now, however, the following tests from Smallapack-SUnitTests category fail: #('TestCBlas>>#testCsscal' 'TestCBlas>>#testSaxpy' 'TestCBlas>>#testSgemv' 'TestCBlas>>#testSgemvTrans' 'TestCBlas>>#testSger' 'TestCBlas>>#testSscal' 'TestCBlas>>#testStrsm' 'TestLapackMatrix>>#testMatrixProduct' 'TestLapackMatrix>>#testSum' 'TestRandMatrix>>#testOperationTiming') As I wrote, TestCBlas used to be all green. I'll check what has changed since -nice.16... On Sat, Aug 6, 2016 at 4:56 PM, Nicolas Cellier wrote: > This should be fixed in ConfigurationOfSmallapack-nice.18 > BTW, I think you can provide the absolute path to the .dylib instead of > copying in local repository... > > > 2016-08-06 23:29 GMT+02:00 Nicolas Cellier > : >> >> Hi Yoshiki, >> thanks for reporting, I'll try better... >> >> >> 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima : >>> >>> I see you have some changes but it appears that evaluating the >>> Installer do it goes into an infinite loop of #moduleName and >>> #masOsxModuleName. >>> >>> (Thanks again!) >>> >>> On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima >>> wrote: >>> > But some of TestLapackMatrix tests fail. A few external functions >>> > cannot be found, it looks like. >>> > >>> > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima >>> > wrote: >>> >> Great! >>> >> >>> >> Before (I got into a meeting and then entered the "Friday mode", I was >>> >> going down the path of trying to call the Framework functions but >>> >> copying files anyway was a simpler solution for now. >>> >> >>> >> Yes, I got all tests green. Thank you! >>> >> >>> >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier >>> >> wrote: >>> >>> OK, what I did on my Mac: >>> >>> >>> >>> 1) look under the Squeak app and edit the Contents/Info.plist >>> >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No" >>> >>> otherwise library loading is restricted to the Squeak app bundle >>> >>> 3) copy the veclib framework library files (dylib) in same directory >>> >>> as >>> >>> squeak image >>> >>> 4) launch Squeak >>> >>> 5) install Smallapack >>> >>> follow instruction from >>> >>> >>> >>> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/SmallapackSqueak >>> >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' -> >>> >>> 'libBlas.dylib' >>> >>> nowadays, cblas and blas are in the same dylib... >>> >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' -> >>> >>> 'libLapack.dylib' >>> >>> idem >>> >>> 8) re-initialize the cache (I know, I know, there are too many...) >>> >>> CBlasLibrary install. CLapackLibrary install. LapackMatrix >>> >>> resetBlasInterfaces; resetLapackInterfaces. >>> >>> 9) run the TestCBlas suite >>> >>> >>> >>> It should be green >>> >>> I will commit the changes later, and will probably implement >>> >>> moduleNames as >>> >>> a Preference (pragma oriented). >>> >>> No need to override code anymore :) >>> >>> >>> >>> I think step 3) is necessary because of ioLoadModuleRaw() in >>> >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >>> >>> >>> >>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >>> >>> It would only look those frameworks: >>> >>> >>> >>> static char *frameworks[]= >>> >>> { >>> >>> "", >>> >>> "/CoreServices.framework/Frameworks", >>> >>> "/ApplicationServices.framework/Frameworks", >>> >>> "/Carbon.framework/Frameworks", >>> >>> 0 >>> >>> }; >>> >>> >>> >>> But I did step 3) before I tried 1) + 2), adn did not retry, so maybe >>> >>> I'm >>> >>> wrong... >>> >>> Scanning all the frameworks is not a solution. And what if we want a >>> >>> specific version? >>> >>> It would be far better to be able to specify the path to the library >>> >>> from >>> >>> within the image like VW... >>> >>> >>> >>> >>> >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier >>> >>> : >>> >>>> >>> >>>> >>> >>>> >>> >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier >>> >>>> : >>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima >>> >>>>> : >>> >>>>>> >>> >>>>>> First question: >>> >>>>>> >>> >>>>>> The Mac OS comes with Accelerate.Framework and that contains BLAS. >>> >>>>>> But probably I still should compile those libraries, right? >>> >>>>>> >>> >>>>> >>> >>>>> No, it's better to link to accelerated library. >>> >>>>> I don't have a Mac handy here to verify how to link to it though. >>> >>>>> I'll be able to check latter in the evening >>> >>>>> >>> >>>> >>> >>>> >>> >>>> I've downloaded the code, and I see it now: the library names are >>> >>>> hardcoded (see implementors of moduleName). >>> >>>> For Mac it is libblas.dylib and libcblas.dylib >>> >>>> Also note that there is a preference for switching to cblas (blas >>> >>>> functions with C interface). >>> >>>> This should be faster because we pass some parameters by value >>> >>>> rather than >>> >>>> allocating them and pass reference... >>> >>>> >>> >>>> Module names could also be replaced by Preferences eventually, but >>> >>>> by now, >>> >>>> you'll have to override... >>> >>>> >>> >>>>>> >>> >>>>>> >>> >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima >>> >>>>>> wrote: >>> >>>>>> > Thanks! >>> >>>>>> > >>> >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier >>> >>>>>> > wrote: >>> >>>>>> >> Hi Yoshiki, >>> >>>>>> >> >>> >>>>>> >> Thanks for inquiring about Smallapack. >>> >>>>>> >> >>> >>>>>> >> This problem has been solved in 2011 as the post tells. >>> >>>>>> >> Moreover, it was about alignment of squeak objects that was on >>> >>>>>> >> multiple of 4 >>> >>>>>> >> on SqueakV3 memory. >>> >>>>>> >> Spur is 8 byte aligned, so the problem would have also vanished >>> >>>>>> >> without any >>> >>>>>> >> patch for those being patient :) >>> >>>>>> >> >>> >>>>>> >> For the 15 arguments limit, Smallapack comes with it's own >>> >>>>>> >> compiler, >>> >>>>>> >> so it's >>> >>>>>> >> a non issue. >>> >>>>>> >> Maybe I should make the documentation more clear on >>> >>>>>> >> >>> >>>>>> >> >>> >>>>>> >> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/SmallapackSqueak >>> >>>>>> >> ? >>> >>>>>> >> >>> >>>>>> >> Unfortunately, there's no Sparse Matrix representation in >>> >>>>>> >> Lapack. >>> >>>>>> >> If you know of a good package for that, it could be integrated. >>> >>>>>> >> >>> >>>>>> >> If you have other questions, don't hesitate to ask. >>> >>>>>> >> >>> >>>>>> >> cheers >>> >>>>>> >> >>> >>>>>> >> Nicolas >>> >>>>>> >> >>> >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima >>> >>>>>> >> : >>> >>>>>> >>> >>> >>>>>> >>> I am trying to do a bit of linear algebra stuff that involves >>> >>>>>> >>> to >>> >>>>>> >>> solve >>> >>>>>> >>> a sparse 2D matrix (for a variation of doing least square >>> >>>>>> >>> fit). >>> >>>>>> >>> >>> >>>>>> >>> There was a message from Nicolas: >>> >>>>>> >>> >>> >>>>>> >>> >>> >>>>>> >>> >>> >>>>>> >>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2011-August/161113.html >>> >>>>>> >>> >>> >>>>>> >>> Is this where it stands today, too? It looks like that arg >>> >>>>>> >>> count >>> >>>>>> >>> problem is still there in 5.0, but is it in a way non-issue as >>> >>>>>> >>> it is >>> >>>>>> >>> still FFI based? >>> >>>>>> >>> >>> >>>>>> >>> Thanks! >>> >>>>>> >>> >>> >>>>>> >>> -- >>> >>>>>> >>> -- Yoshiki >>> >>>>>> >>> >>> >>>>>> >> >>> >>>>>> >> >>> >>>>>> >> >>> >>>>>> >> >>> >>>>>> > >>> >>>>>> > >>> >>>>>> > >>> >>>>>> > -- >>> >>>>>> > -- Yoshiki >>> >>>>>> >>> >>>>>> >>> >>>>>> >>> >>>>>> -- >>> >>>>>> -- Yoshiki >>> >>>>>> >>> >>>>> >>> >>>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >> >>> >> >>> >> >>> >> -- >>> >> -- Yoshiki >>> > >>> > >>> > >>> > -- >>> > -- Yoshiki >>> >>> >>> >>> -- >>> -- Yoshiki >>> >> > > > > -- -- Yoshiki From Yoshiki.Ohshima at acm.org Tue Aug 9 22:26:02 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Tue Aug 9 22:26:05 2016 Subject: [squeak-dev] Smallapack In-Reply-To: References: Message-ID: Correction: (sorry) In a 64 bit image, TestCBlas runs fine but the ones listed above fails in a 32-bit image. On Tue, Aug 9, 2016 at 3:12 PM, Yoshiki Ohshima wrote: > Thanks! > > I am trying this from a vanilla 5.0 image and I see that > ConfigurationOfSmallapack-nice.18 is loaded. Now, however, the > following tests from Smallapack-SUnitTests category fail: > > #('TestCBlas>>#testCsscal' 'TestCBlas>>#testSaxpy' > 'TestCBlas>>#testSgemv' 'TestCBlas>>#testSgemvTrans' > 'TestCBlas>>#testSger' 'TestCBlas>>#testSscal' 'TestCBlas>>#testStrsm' > 'TestLapackMatrix>>#testMatrixProduct' 'TestLapackMatrix>>#testSum' > 'TestRandMatrix>>#testOperationTiming') > > As I wrote, TestCBlas used to be all green. I'll check what has > changed since -nice.16... > > On Sat, Aug 6, 2016 at 4:56 PM, Nicolas Cellier > wrote: >> This should be fixed in ConfigurationOfSmallapack-nice.18 >> BTW, I think you can provide the absolute path to the .dylib instead of >> copying in local repository... >> >> >> 2016-08-06 23:29 GMT+02:00 Nicolas Cellier >> : >>> >>> Hi Yoshiki, >>> thanks for reporting, I'll try better... >>> >>> >>> 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima : >>>> >>>> I see you have some changes but it appears that evaluating the >>>> Installer do it goes into an infinite loop of #moduleName and >>>> #masOsxModuleName. >>>> >>>> (Thanks again!) >>>> >>>> On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima >>>> wrote: >>>> > But some of TestLapackMatrix tests fail. A few external functions >>>> > cannot be found, it looks like. >>>> > >>>> > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima >>>> > wrote: >>>> >> Great! >>>> >> >>>> >> Before (I got into a meeting and then entered the "Friday mode", I was >>>> >> going down the path of trying to call the Framework functions but >>>> >> copying files anyway was a simpler solution for now. >>>> >> >>>> >> Yes, I got all tests green. Thank you! >>>> >> >>>> >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier >>>> >> wrote: >>>> >>> OK, what I did on my Mac: >>>> >>> >>>> >>> 1) look under the Squeak app and edit the Contents/Info.plist >>>> >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No" >>>> >>> otherwise library loading is restricted to the Squeak app bundle >>>> >>> 3) copy the veclib framework library files (dylib) in same directory >>>> >>> as >>>> >>> squeak image >>>> >>> 4) launch Squeak >>>> >>> 5) install Smallapack >>>> >>> follow instruction from >>>> >>> >>>> >>> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/SmallapackSqueak >>>> >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' -> >>>> >>> 'libBlas.dylib' >>>> >>> nowadays, cblas and blas are in the same dylib... >>>> >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' -> >>>> >>> 'libLapack.dylib' >>>> >>> idem >>>> >>> 8) re-initialize the cache (I know, I know, there are too many...) >>>> >>> CBlasLibrary install. CLapackLibrary install. LapackMatrix >>>> >>> resetBlasInterfaces; resetLapackInterfaces. >>>> >>> 9) run the TestCBlas suite >>>> >>> >>>> >>> It should be green >>>> >>> I will commit the changes later, and will probably implement >>>> >>> moduleNames as >>>> >>> a Preference (pragma oriented). >>>> >>> No need to override code anymore :) >>>> >>> >>>> >>> I think step 3) is necessary because of ioLoadModuleRaw() in >>>> >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >>>> >>> >>>> >>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >>>> >>> It would only look those frameworks: >>>> >>> >>>> >>> static char *frameworks[]= >>>> >>> { >>>> >>> "", >>>> >>> "/CoreServices.framework/Frameworks", >>>> >>> "/ApplicationServices.framework/Frameworks", >>>> >>> "/Carbon.framework/Frameworks", >>>> >>> 0 >>>> >>> }; >>>> >>> >>>> >>> But I did step 3) before I tried 1) + 2), adn did not retry, so maybe >>>> >>> I'm >>>> >>> wrong... >>>> >>> Scanning all the frameworks is not a solution. And what if we want a >>>> >>> specific version? >>>> >>> It would be far better to be able to specify the path to the library >>>> >>> from >>>> >>> within the image like VW... >>>> >>> >>>> >>> >>>> >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier >>>> >>> : >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier >>>> >>>> : >>>> >>>>> >>>> >>>>> >>>> >>>>> >>>> >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima >>>> >>>>> : >>>> >>>>>> >>>> >>>>>> First question: >>>> >>>>>> >>>> >>>>>> The Mac OS comes with Accelerate.Framework and that contains BLAS. >>>> >>>>>> But probably I still should compile those libraries, right? >>>> >>>>>> >>>> >>>>> >>>> >>>>> No, it's better to link to accelerated library. >>>> >>>>> I don't have a Mac handy here to verify how to link to it though. >>>> >>>>> I'll be able to check latter in the evening >>>> >>>>> >>>> >>>> >>>> >>>> >>>> >>>> I've downloaded the code, and I see it now: the library names are >>>> >>>> hardcoded (see implementors of moduleName). >>>> >>>> For Mac it is libblas.dylib and libcblas.dylib >>>> >>>> Also note that there is a preference for switching to cblas (blas >>>> >>>> functions with C interface). >>>> >>>> This should be faster because we pass some parameters by value >>>> >>>> rather than >>>> >>>> allocating them and pass reference... >>>> >>>> >>>> >>>> Module names could also be replaced by Preferences eventually, but >>>> >>>> by now, >>>> >>>> you'll have to override... >>>> >>>> >>>> >>>>>> >>>> >>>>>> >>>> >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima >>>> >>>>>> wrote: >>>> >>>>>> > Thanks! >>>> >>>>>> > >>>> >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier >>>> >>>>>> > wrote: >>>> >>>>>> >> Hi Yoshiki, >>>> >>>>>> >> >>>> >>>>>> >> Thanks for inquiring about Smallapack. >>>> >>>>>> >> >>>> >>>>>> >> This problem has been solved in 2011 as the post tells. >>>> >>>>>> >> Moreover, it was about alignment of squeak objects that was on >>>> >>>>>> >> multiple of 4 >>>> >>>>>> >> on SqueakV3 memory. >>>> >>>>>> >> Spur is 8 byte aligned, so the problem would have also vanished >>>> >>>>>> >> without any >>>> >>>>>> >> patch for those being patient :) >>>> >>>>>> >> >>>> >>>>>> >> For the 15 arguments limit, Smallapack comes with it's own >>>> >>>>>> >> compiler, >>>> >>>>>> >> so it's >>>> >>>>>> >> a non issue. >>>> >>>>>> >> Maybe I should make the documentation more clear on >>>> >>>>>> >> >>>> >>>>>> >> >>>> >>>>>> >> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/SmallapackSqueak >>>> >>>>>> >> ? >>>> >>>>>> >> >>>> >>>>>> >> Unfortunately, there's no Sparse Matrix representation in >>>> >>>>>> >> Lapack. >>>> >>>>>> >> If you know of a good package for that, it could be integrated. >>>> >>>>>> >> >>>> >>>>>> >> If you have other questions, don't hesitate to ask. >>>> >>>>>> >> >>>> >>>>>> >> cheers >>>> >>>>>> >> >>>> >>>>>> >> Nicolas >>>> >>>>>> >> >>>> >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima >>>> >>>>>> >> : >>>> >>>>>> >>> >>>> >>>>>> >>> I am trying to do a bit of linear algebra stuff that involves >>>> >>>>>> >>> to >>>> >>>>>> >>> solve >>>> >>>>>> >>> a sparse 2D matrix (for a variation of doing least square >>>> >>>>>> >>> fit). >>>> >>>>>> >>> >>>> >>>>>> >>> There was a message from Nicolas: >>>> >>>>>> >>> >>>> >>>>>> >>> >>>> >>>>>> >>> >>>> >>>>>> >>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2011-August/161113.html >>>> >>>>>> >>> >>>> >>>>>> >>> Is this where it stands today, too? It looks like that arg >>>> >>>>>> >>> count >>>> >>>>>> >>> problem is still there in 5.0, but is it in a way non-issue as >>>> >>>>>> >>> it is >>>> >>>>>> >>> still FFI based? >>>> >>>>>> >>> >>>> >>>>>> >>> Thanks! >>>> >>>>>> >>> >>>> >>>>>> >>> -- >>>> >>>>>> >>> -- Yoshiki >>>> >>>>>> >>> >>>> >>>>>> >> >>>> >>>>>> >> >>>> >>>>>> >> >>>> >>>>>> >> >>>> >>>>>> > >>>> >>>>>> > >>>> >>>>>> > >>>> >>>>>> > -- >>>> >>>>>> > -- Yoshiki >>>> >>>>>> >>>> >>>>>> >>>> >>>>>> >>>> >>>>>> -- >>>> >>>>>> -- Yoshiki >>>> >>>>>> >>>> >>>>> >>>> >>>> >>>> >>> >>>> >>> >>>> >>> >>>> >>> >>>> >> >>>> >> >>>> >> >>>> >> -- >>>> >> -- Yoshiki >>>> > >>>> > >>>> > >>>> > -- >>>> > -- Yoshiki >>>> >>>> >>>> >>>> -- >>>> -- Yoshiki >>>> >>> >> >> >> >> > > > > -- > -- Yoshiki -- -- Yoshiki From avalloud at smalltalk.comcastbiz.net Wed Aug 10 00:01:06 2016 From: avalloud at smalltalk.comcastbiz.net (Andres Valloud) Date: Wed Aug 10 00:03:43 2016 Subject: [squeak-dev] Marquette Camp Smalltalk September 15-18th Message-ID: <627eb8a1-a2f2-933f-3bfc-98d879232978@smalltalk.comcastbiz.net> Hi! Your Camp Smalltalk crew has been at it for a while, and we are very happy to announce a Camp Smalltalk at Marquette, Michigan, on September 15-18th. The event's website is at http://mqt.st. We are generously hosted by Northern Michigan University (http://www.nmu.edu), where John Sarkela teaches Smalltalk courses. Of course, NMU is also home to the Modtalk project, https://www.modtalk.org. You can help us provide a better experience for everyone by registering here: https://www.picatic.com/event14606861846650. Don't miss the date! From lewis at mail.msen.com Wed Aug 10 00:48:47 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Aug 10 00:48:50 2016 Subject: [squeak-dev] Re: The Inbox: ReleaseBuilder-cmm.143.mcz In-Reply-To: <40CC53D0-136F-4D10-B125-C65ADC11D8D7@gmx.de> References: <1470725290441-4910092.post@n4.nabble.com> <40CC53D0-136F-4D10-B125-C65ADC11D8D7@gmx.de> Message-ID: <20160810004847.GA90646@shell.msen.com> On Tue, Aug 09, 2016 at 10:07:39PM +0200, Tobias Pape wrote: > > On 09.08.2016, at 22:00, tim Rowledge wrote: > > >> On 09-08-2016, at 12:35 PM, Chris Muller wrote: > >> If people are actively still preferring the use of underscore > >> assignment in new code today, then I can understand turning it on.. > > > > > > I still very much prefer the proper arrow assign but not enough to inflict a misleading underscore char on my saved code. Given our ability to handle unicode I???d love to see proper up-arrow and left-arrow being used - even if they were translated back to ^ & := on fileout (and converse on filein of course). Unicode U+2190/1 anyone? > > That???s ??? & ??? > \ > I wanted to do that for years, actually. But then I saw the limitation of todays typewri^H^H^H^H^H^H^H keyboards and the only a tad desolate state of keyboard shortcuts in Squeak at that time and put my effort on the ???dreams??? shelf. > Take a look at how Juan has handled the assignment arrow issue in Cuis. If you have not done so before, please take a few minutes to download a Cuis image and check it out. https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev Dave From commits at source.squeak.org Wed Aug 10 01:33:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 01:33:30 2016 Subject: [squeak-dev] The Trunk: System-cmm.876.mcz Message-ID: Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.876.mcz ==================== Summary ==================== Name: System-cmm.876 Author: cmm Time: 9 August 2016, 8:32:55.734245 pm UUID: 636f3012-7416-443d-a00b-c4e115a6e3f6 Ancestors: System-mt.875 - CommunityDark, fix the Squeak-logo color when selected. - Fix ability to load legacy .prefs files saved with Squeak 5.0. =============== Diff against System-mt.875 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkMenusAndDockingBars: (in category 'instance creation') ----- addDarkMenusAndDockingBars: aUserInterfaceTheme "self createDark apply." aUserInterfaceTheme set: #borderWidth for: #MenuMorph to: 0; set: #color for: #MenuMorph to: Color darkGray twiceDarker; set: #titleTextColor for: #MenuMorph to: Color white; set: #lineColor for: #MenuMorph to: Color darkGray; set: #lineStyle for: #MenuMorph to: BorderStyle default; set: #lineWidth for: #MenuMorph to: 1. aUserInterfaceTheme set: #textColor for: #MenuItemMorph to: self dbForeground; set: #selectionColor for: #MenuItemMorph to: self dbSelection; set: #selectionTextColor for: #MenuItemMorph to: Color white ; set: #disabledTextColor for: #MenuItemMorph to: self dbForeground muchDarker. "set: #subMenuMarker for: #MenuItemMorph to: nil." "Use hard-coded default. See MenuItemMorph." "The world main docking bar." aUserInterfaceTheme " set: #color for: #DockingBarMorph to: Color darkGray;" " set: #selectionColor for: #DockingBarItemMorph to: self darkContentSecondary;" set: #logoColor for: #TheWorldMainDockingBar to: Color white; + set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color white! - set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color black! Item was changed: ----- Method: CommunityTheme class>>addDarkScrollables: (in category 'instance creation') ----- addDarkScrollables: aUserInterfaceTheme "self createDark apply." "Scroll bars" aUserInterfaceTheme set: #thumbColor for: #ScrollBar to: self dbGray; set: #thumbBorderColor for: #ScrollBar to: self dbGray twiceDarker. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." aUserInterfaceTheme set: #borderColor for: #ScrollPane to: (Color transparent) ; "So the search box isn't outlined." set: #color for: #ScrollPane to: self dbBackground. "List widgets" aUserInterfaceTheme set: #textColor for: #PluggableListMorph to: (Color gray: 0.9); set: #selectionColor for: #PluggableListMorph to: self dbSelection; + set: #selectionTextColor for: #PluggableListMorph to: Color white ; - derive: #selectionTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.4); derive: #filterTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker ] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker alpha: 0.5 ] ]. "Tree widgets" aUserInterfaceTheme set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; set: #lineColor for: #SimpleHierarchicalListMorph to: Color gray. "Text widgets" aUserInterfaceTheme set: #textColor for: #PluggableTextMorph to: (Color gray: 0.9); set: #caretColor for: #PluggableTextMorph to: Color orange darker; set: #selectionColor for: #PluggableTextMorph to: (self dbSelection darker duller); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | c duller] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: self dbPurple; set: #adornmentRefuse for: #PluggableTextMorph to: self dbBlue; set: #adornmentConflict for: #PluggableTextMorph to: self dbRed; set: #adornmentDiff for: #PluggableTextMorph to: self dbGreen; set: #adornmentNormalEdit for: #PluggableTextMorph to: self dbOrange; set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow; set: #frameAdornmentWidth for: #PluggableTextMorph to: 2. aUserInterfaceTheme set: #balloonTextColor for: #PluggableTextMorphPlus to: Color lightGray! Item was changed: ----- Method: Preferences class>>loadPreferencesFrom: (in category 'initialization - save/load') ----- loadPreferencesFrom: aFile | stream params dict desktopColor | stream := ReferenceStream fileNamed: aFile. params := stream next. self assert: (params isKindOf: IdentityDictionary). params removeKey: #PersonalDictionaryOfPreferences. dict := stream next. self assert: (dict isKindOf: IdentityDictionary). desktopColor := stream next. stream close. dict keysAndValuesDo: [:key :value | (self preferenceAt: key ifAbsent: [nil]) ifNotNil: + [:pref | [pref preferenceValue: value preferenceValue] on: Error do: [ : err | "Ignore preferences which may not be supported anymore."]]]. - [:pref | pref preferenceValue: value preferenceValue]]. - params keysAndValuesDo: [ :key :value | self setParameter: key to: value ]. - Smalltalk isMorphic ifTrue: [ World fillStyle: desktopColor ] + ifFalse: [ self desktopColor: desktopColor. ScheduledControllers updateGray ]! - ifFalse: [ self desktopColor: desktopColor. ScheduledControllers updateGray ]. - ! From bert at freudenbergs.de Wed Aug 10 07:41:59 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Aug 10 07:42:03 2016 Subject: [squeak-dev] All-in-One 5.0 not working on Windows? Message-ID: This was mentioned on our #general Slack channel (*): "The .bat file does execute, but the SourceFiles always points to the release image, not the image invoking the executable file. And it gets an error because the HTTPUrl relativeFromString: does not work with Windows path names" Could anyone confirm this? And possibly suggest a fix? - Bert - (*) https://squeak-slack-sign-in.herokuapp.com/ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160810/a1ccc713/attachment.htm From Marcel.Taeumel at hpi.de Wed Aug 10 07:49:01 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 10 07:49:04 2016 Subject: [squeak-dev] Re: All-in-One 5.0 not working on Windows? In-Reply-To: References: Message-ID: <1470815341553-4910289.post@n4.nabble.com> Bert Freudenberg wrote > This was mentioned on our #general Slack channel (*): > > "The .bat file does execute, but the SourceFiles always points to the > release image, not the image invoking the executable file. And it gets an > error because the HTTPUrl relativeFromString: does not work with Windows > path names" > > Could anyone confirm this? And possibly suggest a fix? > > - Bert - > > (*) https://squeak-slack-sign-in.herokuapp.com/ Hi Bert, my suggestion would be to remove the "ImageFile" entry from the .ini and make the .bat files capable of working with arguments. Then you could also use the VM inside for other images. The bug that appears with HTTPUrl at the moment is very strange and not directly related to the problem. Still, another bug. :-) Best, Marcel P.S.: We are considering this right now while working on the automated build setup via github.com/squeak-smalltalk/squeak-app . If will make a separate post on this later. -- View this message in context: http://forum.world.st/All-in-One-5-0-not-working-on-Windows-tp4910286p4910289.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Aug 10 07:57:11 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 10 07:57:14 2016 Subject: [squeak-dev] Re: The Inbox: ReleaseBuilder-cmm.143.mcz In-Reply-To: References: <1470725290441-4910092.post@n4.nabble.com> Message-ID: <1470815831062-4910290.post@n4.nabble.com> Chris Muller-3 wrote > Hi Marcel, > >> for out-of-the-box compatibility, I would suggest to leave >> "allowUnderscoreAsAssignment" enabled. > > Are you referring to compatibility with old, or new, applications? > Are there applications running on modern Squeak 5 still using > underscores? > > At one time, I guess we thought there were sufficient issues > associated with overloading the underscore character, that we decided > to explicitly encourage applications to run FixUnderscores. > > If people are actively still preferring the use of underscore > assignment in new code today, then I can understand turning it on.. > > Just curious. Oh, I misread that change. Why would you actually disable the bounds in the halo? Do they need to be themed? =) Best, Marcel -- View this message in context: http://forum.world.st/The-Inbox-ReleaseBuilder-cmm-143-mcz-tp4910071p4910290.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 10 08:06:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 08:06:11 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.358.mcz Message-ID: Marcel Taeumel uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-mt.358.mcz ==================== Summary ==================== Name: Graphics-mt.358 Author: mt Time: 10 August 2016, 10:05:35.189696 am UUID: fe4bd6ca-d161-bf4c-b0b9-8fd1812d38a8 Ancestors: Graphics-mt.357 Fixes regression in FileList graphics preview, which expects a certain callback in a certain file service. *sigh* I guess to also assume a certain type of result. *double-sigh* See FileList >> #isGraphicsFileSelected. =============== Diff against Graphics-mt.357 =============== Item was added: + ----- Method: Form class>>serviceImageImportAndShowImports (in category 'file list services') ----- + serviceImageImportAndShowImports + "Answer a service for reading a graphic into ImageImports" + + ^ SimpleServiceEntry + provider: self + label: 'read graphic into and show ImageImports' + selector: #importImageAndShowImports: + description: 'Load a graphic, placing it in the ImageImports repository and browse that repository.' + buttonLabel: 'import'! Item was changed: ----- Method: Form class>>serviceImageImports (in category 'file list services') ----- serviceImageImports "Answer a service for reading a graphic into ImageImports" ^ SimpleServiceEntry provider: self label: 'read graphic into ImageImports' + selector: #importImage: - selector: #importImageAndShowImports: description: 'Load a graphic, placing it in the ImageImports repository.' buttonLabel: 'import'! Item was changed: ----- Method: Form class>>services (in category 'file list services') ----- services ^ Array with: self serviceImageImports + with: self serviceImageImportAndShowImports with: self serviceOpenImageInWindow with: self serviceImageAsBackground ! From Marcel.Taeumel at hpi.de Wed Aug 10 08:08:09 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 10 08:08:12 2016 Subject: [squeak-dev] Re: FileList no longer previews picture files In-Reply-To: References: Message-ID: <1470816489303-4910293.post@n4.nabble.com> Chris Muller-4 wrote > I can no longer preview .png, .jpg, etc. in the FileList. Something > regressed? Hi Chris, fixed: http://forum.world.st/The-Trunk-Graphics-mt-358-mcz-td4910292.html I was wondering how such a kind of regression could be prevented in the future? Best, Marcel -- View this message in context: http://forum.world.st/FileList-no-longer-previews-picture-files-tp4910262p4910293.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 10 08:11:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 08:11:13 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.145.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.145.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.145 Author: mt Time: 10 August 2016, 10:11:05.225966 am UUID: 2c3c6347-f40a-7d46-ada6-c78c02945abf Ancestors: ReleaseBuilder-mt.144 Missing preference added. =============== Diff against ReleaseBuilder-mt.144 =============== Item was changed: ----- Method: ReleaseBuilder class>>configureDesktop (in category 'scripts') ----- configureDesktop "Open tools, multimedia content, etc." + self setDisplayExtent: 1024 @ 768. - self setDisplayExtent: 800 @ 600. self setProjectBackground: Color darkGray. (UserInterfaceTheme named: 'Squeak') apply. self deleteAllWindows. "Replace docking bar instance in case its code has changed." Project current removeMainDockingBar. TheWorldMainDockingBar updateInstances. self openWelcomeWorkspaces.! Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. ToolBuilder openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. + Model windowActiveOnFirstClick: false. "Not good for little screen real estate." + Model useColorfulWindows: false. - Model windowActiveOnFirstClick: false. "Not good for 800x600" Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false. ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; disable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 6. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From commits at source.squeak.org Wed Aug 10 08:41:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 08:41:11 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.146.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.146.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.146 Author: mt Time: 10 August 2016, 10:41:02.796966 am UUID: adad7cda-1a43-d542-939e-e9cd9ce43ac4 Ancestors: ReleaseBuilder-mt.145 Make setting of display extent more robust to not nag the CI building process if some VM behaves not as expected. =============== Diff against ReleaseBuilder-mt.145 =============== Item was changed: ----- Method: ReleaseBuilder class>>setDisplayExtent: (in category 'scripts - support') ----- setDisplayExtent: extent + [ + DisplayScreen + fullScreenOff; + setNewScreenSize: extent. + ] on: Error do: [:err | + Transcript showln: ('[ReleaseBuilder] Failed to set display extent to: {1}. Keep {2}.' format: {extent. Display extent})].! - DisplayScreen - fullScreenOff; - setNewScreenSize: extent. - - self assert: Display extent = extent.! From commits at source.squeak.org Wed Aug 10 09:13:29 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 09:13:31 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1247.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1247.mcz ==================== Summary ==================== Name: Morphic-mt.1247 Author: mt Time: 10 August 2016, 11:12:51.869966 am UUID: 22978f95-f572-d24c-9271-7888b6f28466 Ancestors: Morphic-mt.1246 Adds small workaround for 64-bit builds. Only temporary. =============== Diff against Morphic-mt.1246 =============== Item was changed: ----- Method: DialogWindow>>setTitleParameters (in category 'initialization') ----- setTitleParameters (self submorphNamed: #title) ifNotNil: [:title | title fillStyle: (self class gradientDialog ifFalse: [SolidFillStyle color: (self userInterfaceTheme titleColor ifNil: [Color r: 0.658 g: 0.678 b: 0.78])] ifTrue: [self titleGradientFor: title from: (self userInterfaceTheme titleColor ifNil: [Color r: 0.658 g: 0.678 b: 0.78])]); borderStyle: (self userInterfaceTheme titleBorderStyle ifNil: [BorderStyle default]); borderColor: (self userInterfaceTheme titleBorderColor ifNil: [Color r: 0.6 g: 0.7 b: 1]); borderWidth: (self userInterfaceTheme titleBorderWidth ifNil: [0]); cornerStyle: (self wantsRoundedCorners ifTrue: [#rounded] ifFalse: [#square]); vResizing: #shrinkWrap; hResizing: #spaceFill; wrapCentering: #center; cellPositioning: #center; cellInset: 0; layoutInset: (5@3 corner: 5@ (2+(self wantsRoundedCorners ifFalse: [0] ifTrue: [self cornerRadius])))]. titleMorph ifNotNil: [ | fontToUse colorToUse | fontToUse := self userInterfaceTheme titleFont ifNil: [TextStyle defaultFont]. colorToUse := self userInterfaceTheme titleTextColor ifNil: [Color black]. + "Temporary HACK for 64-bit CI build. Can be removed in the future." + titleMorph contents isText ifFalse: [^ self]. + titleMorph contents addAttribute: (TextFontReference toFont: fontToUse); addAttribute: (TextColor color: colorToUse). titleMorph releaseParagraph; changed].! From commits at source.squeak.org Wed Aug 10 11:07:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 11:07:20 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1248.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1248.mcz ==================== Summary ==================== Name: Morphic-mt.1248 Author: mt Time: 10 August 2016, 1:06:44.632966 pm UUID: 001d373a-3dd0-7d4f-86c5-a962269e6eb8 Ancestors: Morphic-mt.1247 Fix minor API inconsistency between PluggableButtonMorph and PluggableButtonMorphPlus. =============== Diff against Morphic-mt.1247 =============== Item was added: + ----- Method: PluggableButtonMorph>>getLabelSelector (in category 'accessing') ----- + getLabelSelector + ^ getLabelSelector! Item was added: + ----- Method: PluggableButtonMorph>>getLabelSelector: (in category 'accessing') ----- + getLabelSelector: aSymbol + getLabelSelector := aSymbol. + self update: getLabelSelector.! Item was added: + ----- Method: PluggableButtonMorph>>getStateSelector (in category 'accessing') ----- + getStateSelector + ^ getStateSelector! Item was added: + ----- Method: PluggableButtonMorph>>getStateSelector: (in category 'accessing') ----- + getStateSelector: aSymbol + getStateSelector := aSymbol. + self update: getStateSelector.! From commits at source.squeak.org Wed Aug 10 11:12:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 11:12:51 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-mt.181.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-mt.181.mcz ==================== Summary ==================== Name: MorphicExtras-mt.181 Author: mt Time: 10 August 2016, 1:12:33.664966 pm UUID: ef08361f-6406-bb4b-ab24-4ae5467218c0 Ancestors: MorphicExtras-pre.180 Adapt to latest changes in menus and docking bars. =============== Diff against MorphicExtras-pre.180 =============== Item was changed: ----- Method: TabSorterMorph>>acceptSort (in category 'as yet unclassified') ----- acceptSort "Reconstitute the palette based on what is found in the sorter" | rejects oldOwner tabsToUse oldTop | tabsToUse := OrderedCollection new. rejects := OrderedCollection new. pageHolder submorphs doWithIndex: [:m :i | | appearanceMorph toAdd aMenu | toAdd := nil. (m isKindOf: BookMorph) ifTrue: [toAdd := SorterTokenMorph forMorph: m]. (m isKindOf: SorterTokenMorph) ifTrue: [toAdd := m morphRepresented. (toAdd referent isKindOf: MenuMorph) ifTrue: [(aMenu := toAdd referent) setProperty: #paletteMenu toValue: true. (aMenu submorphs size > 1 and: [(aMenu submorphs second isKindOf: MenuItemMorph) and: [aMenu submorphs second contents = 'dismiss this menu']]) ifTrue: [aMenu submorphs first delete. "delete title" aMenu submorphs first delete. "delete stay-up item" + (aMenu submorphs first knownName = #line) - (aMenu submorphs first isKindOf: MenuLineMorph) ifTrue: [aMenu submorphs first delete]]]. toAdd removeAllMorphs. toAdd addMorph: (appearanceMorph := m submorphs first). appearanceMorph position: toAdd position. appearanceMorph lock. toAdd fitContents]. toAdd ifNil: [rejects add: m] ifNotNil: [tabsToUse add: toAdd]]. tabsToUse isEmpty ifTrue: [^self inform: 'Sorry, must have at least one tab']. book newTabs: tabsToUse. book tabsMorph color: pageHolder color. oldTop := self topRendererOrSelf. "in case some maniac has flexed the sorter" oldOwner := oldTop owner. oldTop delete. oldOwner addMorphFront: book! From commits at source.squeak.org Wed Aug 10 11:14:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 11:14:12 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1249.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1249.mcz ==================== Summary ==================== Name: Morphic-mt.1249 Author: mt Time: 10 August 2016, 1:13:27.141966 pm UUID: 3e93588c-4b1e-3145-a6ad-7ddf5247a1b9 Ancestors: Morphic-mt.1248 Adapt to latest changes in menus and docking bars. Deprecate MenuLineMorph. =============== Diff against Morphic-mt.1248 =============== Item was removed: - Morph subclass: #MenuLineMorph - instanceVariableNames: '' - classVariableNames: '' - poolDictionaries: '' - category: 'Morphic-Menus'! Item was removed: - ----- Method: MenuLineMorph>>drawOn: (in category 'drawing') ----- - drawOn: aCanvas - | baseColor | - baseColor := Preferences menuColorFromWorld - ifTrue: [owner color twiceDarker] - ifFalse: [Preferences menuAppearance3d - ifTrue: [owner color] - ifFalse: [MenuMorph menuLineColor]]. - Preferences menuAppearance3d - ifTrue: [ - aCanvas - fillRectangle: (bounds topLeft corner: bounds rightCenter) - color: baseColor twiceDarker. - - aCanvas - fillRectangle: (bounds leftCenter corner: bounds bottomRight) - color: baseColor twiceLighter] - ifFalse: [ - aCanvas - fillRectangle: ((bounds topLeft corner: bounds bottomRight) insetBy: (0@0 corner: 0@ 1)) - color: baseColor]! Item was removed: - ----- Method: MenuLineMorph>>initialize (in category 'initialization') ----- - initialize - super initialize. - self hResizing: #spaceFill; vResizing: #spaceFill.! Item was removed: - ----- Method: MenuLineMorph>>minHeight (in category 'layout') ----- - minHeight - "answer the receiver's minHeight" - ^ self isInDockingBar - ifTrue: [owner isVertical - ifTrue: [2] - ifFalse: [10]] - ifFalse: [2]! Item was removed: - ----- Method: MenuLineMorph>>minWidth (in category 'layout') ----- - minWidth - "answer the receiver's minWidth" - ^ self isInDockingBar - ifTrue: [owner isVertical - ifTrue: [10] - ifFalse: [2]] - ifFalse: [10]! Item was removed: - ----- Method: MenuLineMorph>>noteNewOwner: (in category 'submorphs-accessing') ----- - noteNewOwner: aMorph - "I have just been added as a submorph of aMorph" - super noteNewOwner: aMorph. - self updateLayoutInDockingBar! Item was removed: - ----- Method: MenuLineMorph>>ownerChanged (in category 'change reporting') ----- - ownerChanged - "The receiver's owner, some kind of a pasteup, has changed its - layout." - super ownerChanged. - self updateLayoutInDockingBar! Item was removed: - ----- Method: MenuLineMorph>>updateLayoutInDockingBar (in category 'private') ----- - updateLayoutInDockingBar - self isInDockingBar - ifFalse: [^ self]. - "" - owner isVertical - ifFalse: ["" - self hResizing: #shrinkWrap. - self vResizing: #spaceFill] - ifTrue: ["" - self hResizing: #spaceFill. - self vResizing: #shrinkWrap]. - self extent: self minWidth @ self minHeight! Item was changed: ----- Method: MenuMorph>>addAllFrom: (in category 'construction') ----- addAllFrom: aMenuMorph aMenuMorph submorphs do: [:each | (each isKindOf: MenuItemMorph) ifTrue: [self add: each contents target: each target selector: each selector argumentList: each arguments]. + (each knownName = #line) - (each isKindOf: MenuLineMorph) ifTrue: [self addLine]] ! From commits at source.squeak.org Wed Aug 10 11:14:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 11:14:25 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.41.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.41.mcz ==================== Summary ==================== Name: 51Deprecated-mt.41 Author: mt Time: 10 August 2016, 1:14:10.995966 pm UUID: bf4d66b9-dfa1-f944-b218-072aa4e11957 Ancestors: 51Deprecated-mt.40 Deprecate MenuLineMorph. =============== Diff against 51Deprecated-mt.40 =============== Item was changed: SystemOrganization addCategory: #'51Deprecated-Files-Kernel'! SystemOrganization addCategory: #'51Deprecated-Morphic-Support'! SystemOrganization addCategory: #'51Deprecated-Morphic-Text Support'! SystemOrganization addCategory: #'51Deprecated-PreferenceBrowser'! SystemOrganization addCategory: #'51Deprecated-System-Support'! + SystemOrganization addCategory: #'51Deprecated-Morphic-Menus'! Item was added: + Morph subclass: #MenuLineMorph + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: '51Deprecated-Morphic-Menus'! Item was added: + ----- Method: MenuLineMorph>>drawOn: (in category 'drawing') ----- + drawOn: aCanvas + | baseColor | + baseColor := Preferences menuColorFromWorld + ifTrue: [owner color twiceDarker] + ifFalse: [Preferences menuAppearance3d + ifTrue: [owner color] + ifFalse: [MenuMorph menuLineColor]]. + Preferences menuAppearance3d + ifTrue: [ + aCanvas + fillRectangle: (bounds topLeft corner: bounds rightCenter) + color: baseColor twiceDarker. + + aCanvas + fillRectangle: (bounds leftCenter corner: bounds bottomRight) + color: baseColor twiceLighter] + ifFalse: [ + aCanvas + fillRectangle: ((bounds topLeft corner: bounds bottomRight) insetBy: (0@0 corner: 0@ 1)) + color: baseColor]! Item was added: + ----- Method: MenuLineMorph>>initialize (in category 'initialization') ----- + initialize + super initialize. + self hResizing: #spaceFill; vResizing: #spaceFill.! Item was added: + ----- Method: MenuLineMorph>>minHeight (in category 'layout') ----- + minHeight + "answer the receiver's minHeight" + ^ self isInDockingBar + ifTrue: [owner isVertical + ifTrue: [2] + ifFalse: [10]] + ifFalse: [2]! Item was added: + ----- Method: MenuLineMorph>>minWidth (in category 'layout') ----- + minWidth + "answer the receiver's minWidth" + ^ self isInDockingBar + ifTrue: [owner isVertical + ifTrue: [10] + ifFalse: [2]] + ifFalse: [10]! Item was added: + ----- Method: MenuLineMorph>>noteNewOwner: (in category 'submorphs-accessing') ----- + noteNewOwner: aMorph + "I have just been added as a submorph of aMorph" + super noteNewOwner: aMorph. + self updateLayoutInDockingBar! Item was added: + ----- Method: MenuLineMorph>>ownerChanged (in category 'change reporting') ----- + ownerChanged + "The receiver's owner, some kind of a pasteup, has changed its + layout." + super ownerChanged. + self updateLayoutInDockingBar! Item was added: + ----- Method: MenuLineMorph>>updateLayoutInDockingBar (in category 'private') ----- + updateLayoutInDockingBar + self isInDockingBar + ifFalse: [^ self]. + "" + owner isVertical + ifFalse: ["" + self hResizing: #shrinkWrap. + self vResizing: #spaceFill] + ifTrue: ["" + self hResizing: #spaceFill. + self vResizing: #shrinkWrap]. + self extent: self minWidth @ self minHeight! From commits at source.squeak.org Wed Aug 10 11:27:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 11:27:09 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1250.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1250.mcz ==================== Summary ==================== Name: Morphic-mt.1250 Author: mt Time: 10 August 2016, 1:26:32.344966 pm UUID: 36b73fd3-3ae7-dc46-9cd8-52e7199c652c Ancestors: Morphic-mt.1249 Fixes a bug regarding shadows. When toggling the shadow via the Theme menu, update all windows in the world. In the long term, we might want to refactor the #menuAppearance3d preference. There is much room for improvement in the shadow-related source code. =============== Diff against Morphic-mt.1249 =============== Item was changed: ----- Method: SystemWindow>>setDefaultParameters (in category 'initialization') ----- setDefaultParameters + Preferences menuAppearance3d + ifFalse: [self hasDropShadow: false] + ifTrue: [ + self addDropShadow. + self hasDropShadow: self isKeyWindow. "maybe turn off again"]. - Preferences menuAppearance3d ifTrue: [ - self addDropShadow. - self hasDropShadow: self isKeyWindow. "maybe turn off again"]. self borderWidth: (self userInterfaceTheme borderWidth ifNil: [1]). label font: (self userInterfaceTheme titleFont ifNil: [TextStyle defaultFont]).! Item was changed: ----- Method: TheWorldMainDockingBar>>toggleShadows (in category 'submenu - extras') ----- toggleShadows + Preferences toggle: #menuAppearance3d. + + (Smalltalk classNamed: #SystemWindow) ifNotNil: [:c | + c refreshAllWindows; reconfigureWindowsForFocus]. + (Smalltalk classNamed: #TheWorldMainDockingBar) ifNotNil: [:c | + c updateInstances].! - Preferences toggle: #menuAppearance3d.! From commits at source.squeak.org Wed Aug 10 11:54:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 11:54:53 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1251.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1251.mcz ==================== Summary ==================== Name: Morphic-mt.1251 Author: mt Time: 10 August 2016, 1:54:10.925966 pm UUID: 615f4769-33d6-3048-adca-7efad1b3a0d0 Ancestors: Morphic-mt.1250 Due to popular request, make settings for "shadows" and "rounded look" in the docking bar theme menu more fine-granular. =============== Diff against Morphic-mt.1250 =============== Item was changed: ----- Method: TheWorldMainDockingBar>>themesAndWindowColorsOn: (in category 'submenu - extras') ----- themesAndWindowColorsOn: menu | themes | themes := UserInterfaceTheme allThemes asArray sortBy: [:t1 :t2 | t1 name <= t2 name]. menu addItem:[:item| item contents: (Model useColorfulWindows ifTrue: [''] ifFalse: ['']), 'Colorful Windows' translated; target: self; selector: #toggleColorfulWindows]. menu addItem:[:item| item contents: (SystemWindow gradientWindow not ifTrue: [''] ifFalse: ['']), 'Flat Widget Look' translated; target: self; selector: #toggleGradients]. + menu addLine. menu addItem:[:item | item + contents: (((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow]) ifTrue: [''] ifFalse: ['']), 'Soft Shadows' translated; - contents: ((Preferences valueOfFlag: #menuAppearance3d) ifTrue: [''] ifFalse: ['']), 'Shadows' translated; target: self; + selector: #toggleSoftShadows]. - selector: #toggleShadows]. menu addItem:[:item | item + contents: (((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow not]) ifTrue: [''] ifFalse: ['']), 'Hard Shadows' translated; - contents: (SystemWindow roundedWindowCorners ifTrue: [''] ifFalse: ['']), 'Rounded Widget Look' translated; target: self; + selector: #toggleHardShadows]. + menu addLine. + menu addItem:[:item | + item + contents: (SystemWindow roundedWindowCorners ifTrue: [''] ifFalse: ['']), 'Rounded Window/Dialog/Menu Look' translated; + target: self; + selector: #toggleRoundedWindowLook]. + menu addItem:[:item | + item + contents: (PluggableButtonMorph roundedButtonCorners ifTrue: [''] ifFalse: ['']), 'Rounded Button/Scrollbar Look' translated; + target: self; + selector: #toggleRoundedButtonLook]. - selector: #toggleRoundedLook]. menu addLine. themes ifEmpty: [ menu addItem: [ :item | item contents: '(No UI themes found.)' translated; isEnabled: false ] ]. themes do: [ :each | menu addItem: [ :item | item contents: (UserInterfaceTheme current == each ifTrue: [''] ifFalse: ['']), each name; target: each; selector: #apply ] ]. menu addLine; add: 'Edit Current UI Theme...' target: self selector: #editCurrentTheme.! Item was added: + ----- Method: TheWorldMainDockingBar>>toggleHardShadows (in category 'submenu - extras') ----- + toggleHardShadows + + ((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow]) + ifFalse: [Preferences toggle: #menuAppearance3d]. + Morph useSoftDropShadow: false. + + (Smalltalk classNamed: #SystemWindow) ifNotNil: [:c | + c refreshAllWindows; reconfigureWindowsForFocus]. + (Smalltalk classNamed: #TheWorldMainDockingBar) ifNotNil: [:c | + c updateInstances].! Item was added: + ----- Method: TheWorldMainDockingBar>>toggleRoundedButtonLook (in category 'submenu - extras') ----- + toggleRoundedButtonLook + + | switch | + switch := PluggableButtonMorph roundedButtonCorners not. + + PluggableButtonMorph roundedButtonCorners: switch. + ScrollBar roundedScrollBarLook: switch.! Item was removed: - ----- Method: TheWorldMainDockingBar>>toggleRoundedLook (in category 'submenu - extras') ----- - toggleRoundedLook - - | switch | - switch := SystemWindow roundedWindowCorners not. - - SystemWindow roundedWindowCorners: switch. - DialogWindow roundedDialogCorners: switch. - PluggableButtonMorph roundedButtonCorners: switch. - MenuMorph roundedMenuCorners: switch. - ScrollBar roundedScrollBarLook: switch.! Item was added: + ----- Method: TheWorldMainDockingBar>>toggleRoundedWindowLook (in category 'submenu - extras') ----- + toggleRoundedWindowLook + + | switch | + switch := SystemWindow roundedWindowCorners not. + + SystemWindow roundedWindowCorners: switch. + DialogWindow roundedDialogCorners: switch. + MenuMorph roundedMenuCorners: switch.! Item was removed: - ----- Method: TheWorldMainDockingBar>>toggleShadows (in category 'submenu - extras') ----- - toggleShadows - - Preferences toggle: #menuAppearance3d. - - (Smalltalk classNamed: #SystemWindow) ifNotNil: [:c | - c refreshAllWindows; reconfigureWindowsForFocus]. - (Smalltalk classNamed: #TheWorldMainDockingBar) ifNotNil: [:c | - c updateInstances].! Item was added: + ----- Method: TheWorldMainDockingBar>>toggleSoftShadows (in category 'submenu - extras') ----- + toggleSoftShadows + + ((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow not]) + ifFalse: [Preferences toggle: #menuAppearance3d]. + Morph useSoftDropShadow: true. + + (Smalltalk classNamed: #SystemWindow) ifNotNil: [:c | + c refreshAllWindows; reconfigureWindowsForFocus]. + (Smalltalk classNamed: #TheWorldMainDockingBar) ifNotNil: [:c | + c updateInstances].! Item was changed: + (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances. "For more fine-granular visual settings."'! - (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances. "..."'! From commits at source.squeak.org Wed Aug 10 12:58:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 12:58:26 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1252.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1252.mcz ==================== Summary ==================== Name: Morphic-mt.1252 Author: mt Time: 10 August 2016, 2:57:41.114966 pm UUID: 018bb58d-a1dd-9e43-9e29-8ed7e534aeb1 Ancestors: Morphic-mt.1251 Make disabling the preference "filterable list" work again. =============== Diff against Morphic-mt.1251 =============== Item was changed: ----- Method: LazyListMorph>>displayFilterOn:for:in:font: (in category 'drawing') ----- displayFilterOn: canvas for: row in: drawBounds font: font "Draw filter matches if any." | fill | + listSource filterableList ifFalse: [^ self]. + fill := self filterColor isColor ifTrue: [SolidFillStyle color: self filterColor] ifFalse: [self filterColor]. fill isGradientFill ifTrue: [ fill origin: drawBounds topLeft. fill direction: 0@ drawBounds height]. (self filterOffsets: row) do: [:offset | | r | r := ((drawBounds left + offset first first) @ drawBounds top corner: (drawBounds left + offset first last) @ drawBounds bottom). canvas frameAndFillRoundRect: (r outsetBy: 1@0) radius: 3 fillStyle: fill borderWidth: 1 borderColor: fill asColor twiceDarker. canvas drawString: offset second in: r font: font color: self filterTextColor].! Item was changed: ----- Method: PluggableListMorph>>basicKeyPressed: (in category 'model access') ----- basicKeyPressed: aChar | milliseconds slowKeyStroke listSize newSelectionIndex oldSelectionIndex startIndex | oldSelectionIndex := newSelectionIndex := self getCurrentSelectionIndex. listSize := self getListSize. listSize = 0 ifTrue: [ ^self flash ]. milliseconds := Time millisecondClockValue. slowKeyStroke := (Time milliseconds: milliseconds + since: lastKeystrokeTime) > (self filterableList ifTrue: [500] ifFalse: [ 300 ]). - since: lastKeystrokeTime) > (self class filterableLists ifTrue: [500] ifFalse: [ 300 ]). lastKeystrokeTime := milliseconds. slowKeyStroke ifTrue: + [ self filterableList ifTrue: [ self hasFilter ifFalse: [ priorSelection := self modelIndexFor: self selectionIndex] ]. - [ self class filterableLists ifTrue: [ self hasFilter ifFalse: [ priorSelection := self modelIndexFor: self selectionIndex] ]. "forget previous keystrokes and search in following elements" lastKeystrokes := aChar asLowercase asString. newSelectionIndex := newSelectionIndex \\ listSize + 1. + self filterableList ifTrue: [ list := self getFullList ] ] - self class filterableLists ifTrue: [ list := self getFullList ] ] ifFalse: [ "append quick keystrokes but don't move selection if it still matches" lastKeystrokes := lastKeystrokes , aChar asLowercase asString. newSelectionIndex := newSelectionIndex max: 1 ]. "No change if model is locked" model okToChange ifFalse: [ ^ self ]. + self filterableList - self class filterableLists ifTrue: [ self filterList ; updateList. newSelectionIndex := self modelIndexFor: 1 ] ifFalse: [ startIndex := newSelectionIndex. listSize := self getListSize. [ (self getListItem: newSelectionIndex) asString withBlanksTrimmed asLowercase beginsWith: lastKeystrokes ] whileFalse: [ (newSelectionIndex := newSelectionIndex \\ listSize + 1) = startIndex ifTrue: [ ^ self flash"Not in list." ] ]. newSelectionIndex = oldSelectionIndex ifTrue: [ ^ self flash ] ]. (self hasFilter and: [(self getCurrentSelectionIndex = newSelectionIndex) not]) ifTrue: [self changeModelSelection: newSelectionIndex]! Item was added: + ----- Method: PluggableListMorph>>filterableList (in category 'accessing') ----- + filterableList + ^ (self valueOfProperty: #filterableList ifAbsent: [false]) or: [self class filterableLists]! Item was added: + ----- Method: PluggableListMorph>>filterableList: (in category 'accessing') ----- + filterableList: aBoolean + self setProperty: #filterableList toValue: aBoolean.! Item was changed: ----- Method: PluggableListMorph>>getList (in category 'model access') ----- getList "Answer the list to be displayed. Caches the returned list in the 'list' ivar" getListSelector == nil ifTrue: [ ^ Array empty ]. list := self getFullList. + self filterableList ifTrue: [ self filterList ]. - self class filterableLists ifTrue: [ self filterList ]. ^ list ifNil: [ Array empty ]! From commits at source.squeak.org Wed Aug 10 12:59:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 12:59:24 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.103.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.103.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.103 Author: mt Time: 10 August 2016, 2:59:16.914966 pm UUID: 01eda693-24b8-a14c-a4c4-d73a2b03be3b Ancestors: ToolBuilder-Kernel-mt.102 If "filterable lists" is disabled, there has to be a way to force it, for example, for our ListChooser. Otherwise the ListChoose would behave strangely. =============== Diff against ToolBuilder-Kernel-mt.102 =============== Item was changed: PluggableWidgetSpec subclass: #PluggableListSpec + instanceVariableNames: 'list getIndex setIndex getSelected setSelected menu keyPress autoDeselect dragItem dropItem dropAccept doubleClick listSize listItem keystrokePreview icon vScrollBarPolicy hScrollBarPolicy dragStarted helpItem filterableList' - instanceVariableNames: 'list getIndex setIndex getSelected setSelected menu keyPress autoDeselect dragItem dropItem dropAccept doubleClick listSize listItem keystrokePreview icon vScrollBarPolicy hScrollBarPolicy dragStarted helpItem' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableListSpec commentStamp: 'ar 7/15/2005 11:54' prior: 0! A single selection list element. Instance variables: list The selector to retrieve the list elements. getIndex The selector to retrieve the list selection index. setIndex The selector to set the list selection index. getSelected The selector to retrieve the list selection. setSelected The selector to set the list selection. menu The selector to offer (to retrieve?) the context menu. keyPress The selector to invoke for handling keyboard shortcuts. autoDeselect Whether the list should allow automatic deselection or not. dragItem Selector to initiate a drag action on an item dropItem Selector to initiate a drop action of an item dropAccept Selector to determine whether a drop would be accepted! Item was added: + ----- Method: PluggableListSpec>>filterableList (in category 'accessing - list') ----- + filterableList + ^ filterableList! Item was added: + ----- Method: PluggableListSpec>>filterableList: (in category 'accessing - list') ----- + filterableList: aBoolean + filterableList := aBoolean.! From commits at source.squeak.org Wed Aug 10 13:00:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 13:00:14 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.182.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.182.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.182 Author: mt Time: 10 August 2016, 3:00:05.021966 pm UUID: cf32bef0-feca-0341-985c-eb899238a466 Ancestors: ToolBuilder-Morphic-mt.181 If "filterable lists" is disabled, there has to be a way to force it, for example, for our ListChooser. Otherwise the ListChoose would behave strangely. =============== Diff against ToolBuilder-Morphic-mt.181 =============== Item was changed: ----- Method: ListChooser>>buildWith: (in category 'building') ----- buildWith: builder | dialogSpec searchBarHeight listSpec fieldSpec | searchBarHeight := Preferences standardDefaultTextFont height * 2. dialogSpec := builder pluggableDialogSpec new model: self; title: #title; closeAction: #closed; extent: self initialExtent; autoCancel: true; "behave like a pop-up menu" children: OrderedCollection new; buttons: OrderedCollection new; yourself. listSpec := builder pluggableListSpec new. listSpec model: self; list: #items; getIndex: #selectedIndex; setIndex: #selectedIndex:; doubleClick: #accept; "keystrokePreview: #keyStrokeFromList:;" autoDeselect: false; + filterableList: true; name: #list; frame: (LayoutFrame fractions: (0@0 corner: 1@1) offsets: (0@searchBarHeight corner: 0@0)). dialogSpec children add: listSpec. fieldSpec := builder pluggableInputFieldSpec new. fieldSpec model: self; getText: #searchText; editText: #searchText:; setText: #acceptText:; selection: #textSelection; menu: nil; indicateUnacceptedChanges: false; askBeforeDiscardingEdits: false; help: (self addAllowed ifTrue: ['Type new or filter existing...' translated] ifFalse: ['Type to filter existing...' translated]); frame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0@searchBarHeight)). dialogSpec children add: fieldSpec. "Buttons" dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: #acceptLabel; action: #accept; enabled: #canAcceptOrAdd; color: #acceptColor). dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: 'Cancel'; action: #cancel; color: #cancelColor). dialogMorph := builder build: dialogSpec. dialogMorph addKeyboardCaptureFilter: self. listMorph := builder widgetAt: #list. listMorph allowEmptyFilterResult: true. ^ dialogMorph! Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableList: (in category 'widgets required') ----- buildPluggableList: aSpec | widget listClass getIndex setIndex | aSpec getSelected ifNil:[ listClass := self listClass. getIndex := aSpec getIndex. setIndex := aSpec setIndex. ] ifNotNil:[ listClass := self listByItemClass. getIndex := aSpec getSelected. setIndex := aSpec setSelected. ]. widget := listClass on: aSpec model list: aSpec list selected: getIndex changeSelected: setIndex menu: aSpec menu keystroke: aSpec keyPress. self register: widget id: aSpec name. "Override default scroll bar policies if needed. Widget will use preference values otherwise." aSpec hScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowHScrollBar]. [#never] -> [widget hideHScrollBarIndefinitely]. [#whenNeeded] -> [widget showHScrollBarOnlyWhenNeeded]. } ]. aSpec vScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowVScrollBar]. [#never] -> [widget hideVScrollBarIndefinitely]. [#whenNeeded] -> [widget showVScrollBarOnlyWhenNeeded]. } ]. widget getListElementSelector: aSpec listItem. widget getListSizeSelector: aSpec listSize. widget getIconSelector: aSpec icon. widget getHelpSelector: aSpec helpItem. widget doubleClickSelector: aSpec doubleClick. widget dragItemSelector: aSpec dragItem. widget dropItemSelector: aSpec dropItem. widget wantsDropSelector: aSpec dropAccept. widget dragStartedSelector: aSpec dragStarted. widget autoDeselect: aSpec autoDeselect. widget keystrokePreviewSelector: aSpec keystrokePreview. + aSpec filterableList ifNotNil: [:b | widget filterableList: b]. + aSpec color ifNotNil: [:c | widget color: c]. self buildHelpFor: widget spec: aSpec. self setFrame: aSpec frame in: widget. self setLayoutHintsFor: widget spec: aSpec. parent ifNotNil:[self add: widget to: parent]. panes ifNotNil:[ aSpec list ifNotNil:[panes add: aSpec list]. ]. ^widget! From commits at source.squeak.org Wed Aug 10 13:19:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 13:19:01 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1253.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1253.mcz ==================== Summary ==================== Name: Morphic-mt.1253 Author: mt Time: 10 August 2016, 3:18:20.989966 pm UUID: 75ab9643-e086-f740-8e03-8bb41ae2bc3a Ancestors: Morphic-mt.1252 Fixes an update glitch with some scrollbar settings. =============== Diff against Morphic-mt.1252 =============== Item was changed: ----- Method: ScrollPane>>scrollBarOnLeft: (in category 'accessing') ----- scrollBarOnLeft: aBoolean scrollBarOnLeft := aBoolean. + + self + resizeScrollBars; + resizeScroller; + setScrollDeltas.! - self extent: self extent! Item was changed: ----- Method: ScrollPane>>scrollBarThickness: (in category 'accessing') ----- scrollBarThickness: anInteger scrollBarThickness := anInteger. + + self updateMinimumExtent. + + self + resizeScrollBars; + resizeScroller; + setScrollDeltas.! - self updateMinimumExtent.! From commits at source.squeak.org Wed Aug 10 13:49:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 13:49:45 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1254.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1254.mcz ==================== Summary ==================== Name: Morphic-mt.1254 Author: mt Time: 10 August 2016, 3:49:06.111966 pm UUID: b5cc5391-432d-b24c-9685-d14157f9b77c Ancestors: Morphic-mt.1253 Also provide more control about automatic list filter clearing for pluggable lists. Needed for ListChooser if preference is globally enabled. =============== Diff against Morphic-mt.1253 =============== Item was added: + ----- Method: PluggableListMorph>>clearFilterAutomatically (in category 'accessing') ----- + clearFilterAutomatically + + ^ (self valueOfProperty: #clearFilterAutomatically ifAbsent: [true]) and: [self class clearFilterAutomatically]! Item was added: + ----- Method: PluggableListMorph>>clearFilterAutomatically: (in category 'accessing') ----- + clearFilterAutomatically: aBoolean + self setProperty: #clearFilterAutomatically toValue: aBoolean.! Item was changed: ----- Method: PluggableListMorph>>keyboardFocusChange: (in category 'event handling') ----- keyboardFocusChange: aBoolean "The message is sent to a morph when its keyboard focus changes. The given argument indicates that the receiver is gaining (versus losing) the keyboard focus. In this case, all we need to do is to redraw border feedback" aBoolean ifFalse: [ self hoverRow: nil. + self clearFilterAutomatically ifTrue: - self class clearFilterAutomatically ifTrue: [ self hasFilter ifTrue: [ self removeFilter ; updateList ] ] ]. super keyboardFocusChange: aBoolean.! From commits at source.squeak.org Wed Aug 10 13:50:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 13:50:06 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.104.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.104.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.104 Author: mt Time: 10 August 2016, 3:49:52.440966 pm UUID: 9d1b6028-777b-cc4e-b5c3-aa6b026a9598 Ancestors: ToolBuilder-Kernel-mt.103 Also provide more control about automatic list filter clearing for pluggable lists. Needed for ListChooser if preference is globally enabled. =============== Diff against ToolBuilder-Kernel-mt.103 =============== Item was changed: PluggableWidgetSpec subclass: #PluggableListSpec + instanceVariableNames: 'list getIndex setIndex getSelected setSelected menu keyPress autoDeselect dragItem dropItem dropAccept doubleClick listSize listItem keystrokePreview icon vScrollBarPolicy hScrollBarPolicy dragStarted helpItem filterableList clearFilterAutomatically' - instanceVariableNames: 'list getIndex setIndex getSelected setSelected menu keyPress autoDeselect dragItem dropItem dropAccept doubleClick listSize listItem keystrokePreview icon vScrollBarPolicy hScrollBarPolicy dragStarted helpItem filterableList' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableListSpec commentStamp: 'ar 7/15/2005 11:54' prior: 0! A single selection list element. Instance variables: list The selector to retrieve the list elements. getIndex The selector to retrieve the list selection index. setIndex The selector to set the list selection index. getSelected The selector to retrieve the list selection. setSelected The selector to set the list selection. menu The selector to offer (to retrieve?) the context menu. keyPress The selector to invoke for handling keyboard shortcuts. autoDeselect Whether the list should allow automatic deselection or not. dragItem Selector to initiate a drag action on an item dropItem Selector to initiate a drop action of an item dropAccept Selector to determine whether a drop would be accepted! Item was added: + ----- Method: PluggableListSpec>>clearFilterAutomatically (in category 'accessing - list') ----- + clearFilterAutomatically + ^ clearFilterAutomatically! Item was added: + ----- Method: PluggableListSpec>>clearFilterAutomatically: (in category 'accessing - list') ----- + clearFilterAutomatically: aBoolean + clearFilterAutomatically := aBoolean.! From commits at source.squeak.org Wed Aug 10 13:50:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 13:50:47 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.183.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.183.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.183 Author: mt Time: 10 August 2016, 3:50:36.393966 pm UUID: 4a54a0db-992d-0a4d-8ff8-abf907223293 Ancestors: ToolBuilder-Morphic-mt.182 Also provide more control about automatic list filter clearing for pluggable lists. Needed for ListChooser if preference is globally enabled. =============== Diff against ToolBuilder-Morphic-mt.182 =============== Item was changed: ----- Method: ListChooser>>buildWith: (in category 'building') ----- buildWith: builder | dialogSpec searchBarHeight listSpec fieldSpec | searchBarHeight := Preferences standardDefaultTextFont height * 2. dialogSpec := builder pluggableDialogSpec new model: self; title: #title; closeAction: #closed; extent: self initialExtent; autoCancel: true; "behave like a pop-up menu" children: OrderedCollection new; buttons: OrderedCollection new; yourself. listSpec := builder pluggableListSpec new. listSpec model: self; list: #items; getIndex: #selectedIndex; setIndex: #selectedIndex:; doubleClick: #accept; "keystrokePreview: #keyStrokeFromList:;" autoDeselect: false; filterableList: true; + clearFilterAutomatically: false; name: #list; frame: (LayoutFrame fractions: (0@0 corner: 1@1) offsets: (0@searchBarHeight corner: 0@0)). dialogSpec children add: listSpec. fieldSpec := builder pluggableInputFieldSpec new. fieldSpec model: self; getText: #searchText; editText: #searchText:; setText: #acceptText:; selection: #textSelection; menu: nil; indicateUnacceptedChanges: false; askBeforeDiscardingEdits: false; help: (self addAllowed ifTrue: ['Type new or filter existing...' translated] ifFalse: ['Type to filter existing...' translated]); frame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0@searchBarHeight)). dialogSpec children add: fieldSpec. "Buttons" dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: #acceptLabel; action: #accept; enabled: #canAcceptOrAdd; color: #acceptColor). dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: 'Cancel'; action: #cancel; color: #cancelColor). dialogMorph := builder build: dialogSpec. dialogMorph addKeyboardCaptureFilter: self. listMorph := builder widgetAt: #list. listMorph allowEmptyFilterResult: true. ^ dialogMorph! Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableList: (in category 'widgets required') ----- buildPluggableList: aSpec | widget listClass getIndex setIndex | aSpec getSelected ifNil:[ listClass := self listClass. getIndex := aSpec getIndex. setIndex := aSpec setIndex. ] ifNotNil:[ listClass := self listByItemClass. getIndex := aSpec getSelected. setIndex := aSpec setSelected. ]. widget := listClass on: aSpec model list: aSpec list selected: getIndex changeSelected: setIndex menu: aSpec menu keystroke: aSpec keyPress. self register: widget id: aSpec name. "Override default scroll bar policies if needed. Widget will use preference values otherwise." aSpec hScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowHScrollBar]. [#never] -> [widget hideHScrollBarIndefinitely]. [#whenNeeded] -> [widget showHScrollBarOnlyWhenNeeded]. } ]. aSpec vScrollBarPolicy ifNotNil: [:policy | policy caseOf: { [#always] -> [widget alwaysShowVScrollBar]. [#never] -> [widget hideVScrollBarIndefinitely]. [#whenNeeded] -> [widget showVScrollBarOnlyWhenNeeded]. } ]. widget getListElementSelector: aSpec listItem. widget getListSizeSelector: aSpec listSize. widget getIconSelector: aSpec icon. widget getHelpSelector: aSpec helpItem. widget doubleClickSelector: aSpec doubleClick. widget dragItemSelector: aSpec dragItem. widget dropItemSelector: aSpec dropItem. widget wantsDropSelector: aSpec dropAccept. widget dragStartedSelector: aSpec dragStarted. widget autoDeselect: aSpec autoDeselect. widget keystrokePreviewSelector: aSpec keystrokePreview. aSpec filterableList ifNotNil: [:b | widget filterableList: b]. + aSpec clearFilterAutomatically ifNotNil: [:b | widget clearFilterAutomatically: b]. aSpec color ifNotNil: [:c | widget color: c]. self buildHelpFor: widget spec: aSpec. self setFrame: aSpec frame in: widget. self setLayoutHintsFor: widget spec: aSpec. parent ifNotNil:[self add: widget to: parent]. panes ifNotNil:[ aSpec list ifNotNil:[panes add: aSpec list]. ]. ^widget! From commits at source.squeak.org Wed Aug 10 14:00:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 14:00:06 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.65.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.65.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.65 Author: mt Time: 10 August 2016, 3:59:55.891966 pm UUID: 9d1c8adb-2760-6049-acc1-0e26114829b5 Ancestors: PreferenceBrowser-mt.64 A *very* simple welcome wizard, meant to be used exactly once when starting an image freshly for the very first time. Try to mitigate the old issue of "What should the the default preferences in the next release?" If not working as expected, can be nuked from the release image easily. :-) =============== Diff against PreferenceBrowser-mt.64 =============== Item was added: + Morph subclass: #PreferenceWizardMorph + instanceVariableNames: 'previewWorld titleMorph buttonRowMorph controlMorph startButton previousButton nextButton pages currentPageIndex pagesLabel skipButton' + classVariableNames: '' + poolDictionaries: '' + category: 'PreferenceBrowser'! Item was added: + ----- Method: PreferenceWizardMorph class>>generateLabelCallbacks (in category 'as yet unclassified') ----- + generateLabelCallbacks + "self generateLabelCallbacks" + + self selectors + select: [:ea | ea beginsWith: 'state'] + thenDo: [:ea | + | suffix | + suffix := ea allButFirst: 'state' size. + self + compile: ('label{1}\ "Auto-generated."\\ ^ self state{1} ifTrue: [''x''] ifFalse: ['' '']' withCRs format: {suffix}) + classified: 'buttons']. + ! Item was added: + ----- Method: PreferenceWizardMorph>>accept (in category 'actions') ----- + accept + + self showSqueak.! Item was added: + ----- Method: PreferenceWizardMorph>>chooseTheme: (in category 'actions') ----- + chooseTheme: aTheme + + aTheme apply. + + "The theme does not theme this fake world." + previewWorld fillStyle: ActiveWorld fillStyle.! Item was added: + ----- Method: PreferenceWizardMorph>>createButton (in category 'initialization') ----- + createButton + + ^ PluggableButtonMorphPlus new + setProperty: #noUserInterfaceTheme toValue: true; + offColor: (Color gray: 0.2); + feedbackColor: (Color gray: 0.5); + model: self; + font: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 12); + textColor: Color white; + borderColor: Color white; + instVarNamed: #borderColor put: Color white; "HACK!!" + borderWidth: 2; + cornerStyle: #rounded; + vResizing: #shrinkWrap; + hResizing: #shrinkWrap; + layoutInset: (20@10 corner: 20@10); + yourself! Item was added: + ----- Method: PreferenceWizardMorph>>createCheckbox:for: (in category 'initialization') ----- + createCheckbox: label for: selector + + | box lbl btn | + + btn := self createButton + label: ' '; + onColor: Color white offColor: (Color gray: 0.2); + vResizing: #rigid; + hResizing: #rigid; + action: ('toggle', selector) asSymbol; + getStateSelector: ('state', selector) asSymbol; + extent: 25@25. + + lbl := self createLabel: label color: Color white. + + box := Morph new + color: Color transparent; + changeTableLayout; + listDirection: #leftToRight; + cellPositioning: #topLeft; + hResizing: #spaceFill; + vResizing: #shrinkWrap; + cellInset: 10; + yourself. + + box addAllMorphs: {btn. lbl}. + ^ box! Item was added: + ----- Method: PreferenceWizardMorph>>createHorizontalSpacer (in category 'initialization') ----- + createHorizontalSpacer + + ^ Morph new + color: Color transparent; + hResizing: #spaceFill; + extent: 5@5; + yourself! Item was added: + ----- Method: PreferenceWizardMorph>>createLabel: (in category 'initialization') ----- + createLabel: aString + + ^ self createLabel: aString color: (Color gray: 0.8)! Item was added: + ----- Method: PreferenceWizardMorph>>createLabel:color: (in category 'initialization') ----- + createLabel: aString color: aColor + + | lbl | + lbl := TextMorph new hResizing: #spaceFill; vResizing: #shrinkWrap. + lbl newContents:aString. + lbl text + addAttribute: (TextColor color: aColor); + addAttribute: (TextFontReference toFont: ((StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 12))). + ^ lbl! Item was added: + ----- Method: PreferenceWizardMorph>>createPage (in category 'initialization') ----- + createPage + + ^ Morph new + color: Color transparent; + hResizing: #spaceFill; + vResizing: #spaceFill; + changeTableLayout; + listDirection: #topToBottom; + cellPositioning: #topLeft; + layoutInset: 20; + cellInset: 10; + yourself! Item was added: + ----- Method: PreferenceWizardMorph>>createVerticalSpace (in category 'initialization') ----- + createVerticalSpace + + ^ Morph new + color: Color transparent; + vResizing: #rigid; + extent: 5@5; + yourself! Item was added: + ----- Method: PreferenceWizardMorph>>createVerticalSpacer (in category 'initialization') ----- + createVerticalSpacer + + ^ Morph new + color: Color transparent; + vResizing: #spaceFill; + extent: 5@5; + yourself! Item was added: + ----- Method: PreferenceWizardMorph>>filterEvent:for: (in category 'event handling') ----- + filterEvent: aKeyboardEvent for: aMorph + + aKeyboardEvent isKeystroke ifTrue: [ + aKeyboardEvent keyCharacter = Character escape + ifTrue: [self showSqueak. ^ aKeyboardEvent ignore]. + (aKeyboardEvent keyCharacter = Character cr and: [self isInWelcome]) + ifTrue: [self showPlayfield. ^ aKeyboardEvent ignore]. + ]. + + ^ aKeyboardEvent! Item was added: + ----- Method: PreferenceWizardMorph>>handlesMouseDown: (in category 'event handling') ----- + handlesMouseDown: evt + ^ true! Item was added: + ----- Method: PreferenceWizardMorph>>initialize (in category 'initialization') ----- + initialize + + super initialize. + + self color: Color black. + self setProperty: #indicateKeyboardFocus toValue: #never. + + Preferences enable: #systemWindowEmbedOK. + + titleMorph := ('Welcome to Squeak' translated asText + addAttribute: (TextColor color: Color white); + addAttribute: (TextFontReference toFont: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 20)); + yourself) asMorph. + titleMorph margins: (10@0 corner: 10@10). + titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0@ 0 corner: 0 @ titleMorph height)). + + self + initializePages; + initializeButtons; + initializeControlMorph; + initializePreviewWorld. + + self + changeProportionalLayout; + layoutInset: 20; + cellInset: 10; + addAllMorphs: {titleMorph. buttonRowMorph. controlMorph. previewWorld. startButton. skipButton}. + + self addKeyboardCaptureFilter: self.! Item was added: + ----- Method: PreferenceWizardMorph>>initializeButtons (in category 'initialization') ----- + initializeButtons + + buttonRowMorph := Morph new + color: Color transparent; + changeTableLayout; + listDirection: #leftToRight; + cellInset: 10; + layoutInset: (0@20 corner: 0@0); + vResizing: #shrinkWrap; + hResizing: #spaceFill; + yourself. + + buttonRowMorph addAllMorphs: { + previousButton := self createButton action: #previous; label: 'Previous' translated. + pagesLabel := (self createLabel: '0 / 0') hResizing: #shrinkWrap; margins: (20@0 corner: 20@0); fullBounds; yourself. + nextButton := self createButton action: #next; label: 'Next' translated. + self createHorizontalSpacer. + self createButton action: #showSqueak; label: 'Done' translated}. + + + buttonRowMorph fullBounds. + buttonRowMorph layoutFrame: (LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0@ buttonRowMorph height negated corner: 0 @ 0)). + + + + startButton := (self createButton action: #showPlayfield; label: 'Continue' translated). + startButton layoutFrame: (LayoutFrame fractions: (0 @ 0.5 corner: 1 @ 0.5) offsets: (0@ 0 corner: 0 @ (titleMorph height * 4))). + skipButton := (self createButton action: #showSqueak; label: 'Skip' translated; borderWidth: 0; color: Color black). + skipButton layoutFrame: (LayoutFrame fractions: (1@1 corner: 1@1) offsets: (skipButton fullBounds width negated @ skipButton fullBounds height negated corner: 0@0)). + ! Item was added: + ----- Method: PreferenceWizardMorph>>initializeControlMorph (in category 'initialization') ----- + initializeControlMorph + + controlMorph := Morph new + color: Color transparent; + changeTableLayout; + listDirection: #topToBottom; + hResizing: #spaceFill; + vResizing: #spaceFill; + layoutInset: (0@0 corner: 10@0); + layoutFrame: (LayoutFrame fractions: (0.0 @ 0 corner: 0.3 @ 1.0) offsets: (0@ titleMorph height corner: 0 @ buttonRowMorph height negated)); + yourself. + + controlMorph addMorph: (self createLabel: 'Please take a few minutes and configure the look-and-feel of the environment. You can adjust these settings later if you like.\\You can try out the current settings in the right area.' withCRs).! Item was added: + ----- Method: PreferenceWizardMorph>>initializePage01Themes (in category 'initialization') ----- + initializePage01Themes + + | currentPage | + currentPage := pages add: self createPage. + currentPage addMorphBack: (self createLabel: 'Choose a theme:' color: Color white). + (UserInterfaceTheme allThemes asArray sortBy: [:a :b | a name <= b name]) do: [:ea | + currentPage addMorphBack: (self createButton + label: ea name; + hResizing: #spaceFill; + action: #chooseTheme:; + arguments: {ea})]. + currentPage addMorphBack: self createVerticalSpacer. + ! Item was added: + ----- Method: PreferenceWizardMorph>>initializePage02Visuals (in category 'initialization') ----- + initializePage02Visuals + + | currentPage | + currentPage := pages add: self createPage. + currentPage addMorphBack: (self createLabel: 'Choose visual settings' color: Color white). + + + currentPage addAllMorphsBack: { + self createCheckbox: 'Colorful windows' translated for: #UseColorfulWindows. + self createCheckbox: 'Flat widget look' translated for: #Gradients. + self createVerticalSpace. + self createCheckbox: 'Rounded windows' translated for: #RoundedWindowLook. + self createCheckbox: 'Rounded buttons' translated for: #RoundedButtonLook. + self createVerticalSpace. + self createCheckbox: 'Soft shadows' translated for: #SoftShadows. + self createCheckbox: 'Hard shadows' translated for: #HardShadows. + self createVerticalSpace. + self createCheckbox: 'Fast drag and resize' translated for: #FastDrag. + self createCheckbox: 'Blinking text cursor' translated for: #BlinkingCursor. + self createCheckbox: 'Show keyboard focus' translated for: #ShowKeyboardFocus. + self createCheckbox: 'Simple edit indication' translated for: #SimpleFrameAdornments. + }. + + currentPage addMorphBack: self createVerticalSpacer. + ! Item was added: + ----- Method: PreferenceWizardMorph>>initializePage03Interaction (in category 'initialization') ----- + initializePage03Interaction + + | currentPage | + currentPage := pages add: self createPage. + currentPage addMorphBack: (self createLabel: 'Choose interaction settings' color: Color white). + + + currentPage addAllMorphsBack: { + self createCheckbox: 'Swap mouse buttons' translated for: #SwapMouseButtons. + self createCheckbox: 'Focus follows mouse' translated for: #FocusFollowsMouse. + self createCheckbox: 'Mouse wheel to focus' translated for: #SendMouseWheelToKeyboardFocus. + self createVerticalSpace. + self createCheckbox: 'Auto enclose brackets' translated for: #AutoEnclose. + self createCheckbox: 'Auto indent lines' translated for: #AutoIndent. + self createCheckbox: 'Enclose text selections' translated for: #EncloseSelection. + self createVerticalSpace. + self createCheckbox: 'Arrows in scrollbar' translated for: #ScrollBarsWithoutArrowButtons. + self createCheckbox: 'Menu in scrollbar' translated for: #ScrollBarsWithoutMenuButton. + self createCheckbox: 'Scrollbars on the right' translated for: #ScrollBarsOnRight. + self createCheckbox: 'Retractable scrollbars' translated for: #UseRetractableScrollBars. + self createCheckbox: 'Narrow scrollbars' translated for: #ScrollBarsNarrow. + + }. + + currentPage addMorphBack: self createVerticalSpacer. + ! Item was added: + ----- Method: PreferenceWizardMorph>>initializePage04InteractionMore (in category 'initialization') ----- + initializePage04InteractionMore + + | currentPage | + currentPage := pages add: self createPage. + currentPage addMorphBack: (self createLabel: 'Choose more interaction settings' color: Color white). + + + currentPage addAllMorphsBack: { + self createCheckbox: 'Windows raise on click' translated for: #WindowsRaiseOnClick. + self createCheckbox: 'Windows always active' for: #WindowsAlwaysActive. + self createCheckbox: 'Window buttons always active' translated for: #WindowButtonsAlwaysActive. + self createVerticalSpace. + self createCheckbox: 'Smart horizontal splitters' translated for: #SmartHorizontalSplitters. + self createCheckbox: 'Smart vertical splitters' translated for: #SmartVerticalSplitters. + self createVerticalSpace. + self createCheckbox: 'Filterable lists and trees' translated for: #FilterableLists. + self createCheckbox: 'Filters clear if unfocused' translated for: #ClearFilterAutomatically. + }. + + currentPage addMorphBack: self createVerticalSpacer. + ! Item was added: + ----- Method: PreferenceWizardMorph>>initializePage05Tools (in category 'initialization') ----- + initializePage05Tools + + | currentPage | + currentPage := pages add: self createPage. + currentPage addMorphBack: (self createLabel: 'Choose other settings' color: Color white). + + + currentPage addAllMorphsBack: { + self createCheckbox: 'Trace messages browser' translated for: #TraceMessages. + self createCheckbox: 'Reuse tool windows' translated for: #ReuseWindows. + self createCheckbox: 'Tool and menu icons' translated for: #ToolAndMenuIcons. + }. + + currentPage addMorphBack: self createVerticalSpacer. + ! Item was added: + ----- Method: PreferenceWizardMorph>>initializePages (in category 'initialization') ----- + initializePages + + pages := OrderedCollection new. + currentPageIndex := 0. + + self + initializePage01Themes; + initializePage02Visuals; + initializePage03Interaction; + initializePage04InteractionMore; + initializePage05Tools.! Item was added: + ----- Method: PreferenceWizardMorph>>initializePreviewWorld (in category 'initialization') ----- + initializePreviewWorld + + | w1 w2 w3 | + + previewWorld := PasteUpMorph new + hResizing: #spaceFill; + vResizing: #spaceFill; + viewBox: (0@0 corner: 500@500); + layoutFrame: (LayoutFrame fractions: (0.3 @ 0 corner: 1.0 @ 1.0) offsets: (0@ titleMorph height corner: 0 @ buttonRowMorph height negated)); + fillStyle: ActiveWorld fillStyle; + borderWidth: 2; + borderColor: Color white; + cornerStyle: #rounded; + yourself. + + w1 := ToolBuilder open: (Browser new setClass: Morph selector: #drawOn:). + w2 := ToolSet browseMessageSet: (SystemNavigation default allCallsOn: #negated) name: 'Senders' translated autoSelect: 'negated'. + w3 := (Workspace new contents: '3+4 "Select and hit [CMD]+[P]."') openLabel: 'Workspace'. + + {w1. w2. w3} do: [:ea | + ea makeUnclosable. + previewWorld addMorph: ea]. + + self updateWindowBounds.! Item was added: + ----- Method: PreferenceWizardMorph>>intoWorld: (in category 'initialization') ----- + intoWorld: world + + super intoWorld: world. + + self bounds: world bounds. + + self fullBounds. + self updateWindowBounds. + + world activeHand newKeyboardFocus: self. + + self showWelcome.! Item was added: + ----- Method: PreferenceWizardMorph>>isInPlayfield (in category 'testing') ----- + isInPlayfield + + ^ previewWorld visible! Item was added: + ----- Method: PreferenceWizardMorph>>isInWelcome (in category 'testing') ----- + isInWelcome + + ^ startButton visible! Item was added: + ----- Method: PreferenceWizardMorph>>morphicLayerNumber (in category 'layout') ----- + morphicLayerNumber + + ^ 1! Item was added: + ----- Method: PreferenceWizardMorph>>next (in category 'actions') ----- + next + + currentPageIndex := currentPageIndex + 1 min: pages size. + + nextButton enabled: currentPageIndex < pages size. + previousButton enabled: currentPageIndex > 1. + + self updatePageLabel. + + "Remove current page." + controlMorph submorphs size > 1 ifTrue: [controlMorph submorphs last delete]. + + "Add new page." + controlMorph addMorphBack: (pages at: currentPageIndex). + self fullBounds. + (pages at: currentPageIndex) layoutChanged.! Item was added: + ----- Method: PreferenceWizardMorph>>previous (in category 'actions') ----- + previous + + currentPageIndex := currentPageIndex - 1 max: 1. + nextButton enabled: currentPageIndex < pages size. + previousButton enabled: currentPageIndex > 1. + + self updatePageLabel. + + "Remove current page." + controlMorph submorphs last delete. + + "Add new page." + controlMorph addMorphBack: (pages at: currentPageIndex).! Item was added: + ----- Method: PreferenceWizardMorph>>showPlayfield (in category 'actions') ----- + showPlayfield + + startButton hide. + skipButton hide. + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + + + titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0@ 0 corner: 0 @ titleMorph height)). + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + + + controlMorph show. + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + + previewWorld show. + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + + buttonRowMorph show. + self next. + self refreshWorld. + + ! Item was added: + ----- Method: PreferenceWizardMorph>>showSqueak (in category 'actions') ----- + showSqueak + + self isInWelcome ifTrue: [ + startButton hide. + skipButton hide. + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + titleMorph hide. + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + ^ self delete]. + + buttonRowMorph hide. + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + + controlMorph hide. + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + + previewWorld hide. + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + + + titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1)). + self refreshWorld. + (Delay forMilliseconds: 1000) wait. + self delete.! Item was added: + ----- Method: PreferenceWizardMorph>>showWelcome (in category 'actions') ----- + showWelcome + + titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1)). + + controlMorph hide. + previewWorld hide. + buttonRowMorph hide. + titleMorph hide. + startButton hide. + skipButton hide. + + self refreshWorld. + + (Delay forMilliseconds: 1000) wait. + titleMorph show. + self refreshWorld. + + + (Delay forMilliseconds: 1000) wait. + startButton show. + skipButton show. + self refreshWorld. + ! Item was added: + ----- Method: PreferenceWizardMorph>>stateAutoEnclose (in category 'buttons') ----- + stateAutoEnclose + + ^ TextEditor autoEnclose! Item was added: + ----- Method: PreferenceWizardMorph>>stateAutoIndent (in category 'buttons') ----- + stateAutoIndent + + ^ TextEditor autoIndent! Item was added: + ----- Method: PreferenceWizardMorph>>stateBlinkingCursor (in category 'buttons') ----- + stateBlinkingCursor + + ^ TextEditor blinkingCursor! Item was added: + ----- Method: PreferenceWizardMorph>>stateClearFilterAutomatically (in category 'buttons') ----- + stateClearFilterAutomatically + + ^ PluggableListMorph clearFilterAutomatically! Item was added: + ----- Method: PreferenceWizardMorph>>stateEncloseSelection (in category 'buttons') ----- + stateEncloseSelection + + ^ TextEditor encloseSelection! Item was added: + ----- Method: PreferenceWizardMorph>>stateFastDrag (in category 'buttons') ----- + stateFastDrag + + ^ Preferences valueOfFlag: #fastDragWindowForMorphic ifAbsent: [false]! Item was added: + ----- Method: PreferenceWizardMorph>>stateFilterableLists (in category 'buttons') ----- + stateFilterableLists + + ^ PluggableListMorph filterableLists! Item was added: + ----- Method: PreferenceWizardMorph>>stateFocusFollowsMouse (in category 'buttons') ----- + stateFocusFollowsMouse + + ^ Preferences valueOfFlag: #mouseOverForKeyboardFocus ifAbsent: [false]! Item was added: + ----- Method: PreferenceWizardMorph>>stateGradients (in category 'buttons') ----- + stateGradients + + ^ SystemWindow gradientWindow not! Item was added: + ----- Method: PreferenceWizardMorph>>stateHardShadows (in category 'buttons') ----- + stateHardShadows + + ^ (Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow not]! Item was added: + ----- Method: PreferenceWizardMorph>>stateReuseWindows (in category 'buttons') ----- + stateReuseWindows + + ^ SystemWindow reuseWindows! Item was added: + ----- Method: PreferenceWizardMorph>>stateRoundedButtonLook (in category 'buttons') ----- + stateRoundedButtonLook + + ^ PluggableButtonMorph roundedButtonCorners! Item was added: + ----- Method: PreferenceWizardMorph>>stateRoundedWindowLook (in category 'buttons') ----- + stateRoundedWindowLook + + ^ SystemWindow roundedWindowCorners! Item was added: + ----- Method: PreferenceWizardMorph>>stateScrollBarsNarrow (in category 'buttons') ----- + stateScrollBarsNarrow + + ^ Preferences valueOfPreference: #scrollBarsNarrow ifAbsent: [false]! Item was added: + ----- Method: PreferenceWizardMorph>>stateScrollBarsOnRight (in category 'buttons') ----- + stateScrollBarsOnRight + + ^ Preferences valueOfFlag: #scrollBarsOnRight ifAbsent: [false]! Item was added: + ----- Method: PreferenceWizardMorph>>stateScrollBarsWithoutArrowButtons (in category 'buttons') ----- + stateScrollBarsWithoutArrowButtons + + ^ ScrollBar scrollBarsWithoutArrowButtons not! Item was added: + ----- Method: PreferenceWizardMorph>>stateScrollBarsWithoutMenuButton (in category 'buttons') ----- + stateScrollBarsWithoutMenuButton + + ^ ScrollBar scrollBarsWithoutMenuButton not! Item was added: + ----- Method: PreferenceWizardMorph>>stateSendMouseWheelToKeyboardFocus (in category 'buttons') ----- + stateSendMouseWheelToKeyboardFocus + + ^ HandMorph sendMouseWheelToKeyboardFocus! Item was added: + ----- Method: PreferenceWizardMorph>>stateShowKeyboardFocus (in category 'buttons') ----- + stateShowKeyboardFocus + + ^ Morph indicateKeyboardFocus! Item was added: + ----- Method: PreferenceWizardMorph>>stateSimpleFrameAdornments (in category 'buttons') ----- + stateSimpleFrameAdornments + + ^ PluggableTextMorph simpleFrameAdornments! Item was added: + ----- Method: PreferenceWizardMorph>>stateSmartHorizontalSplitters (in category 'buttons') ----- + stateSmartHorizontalSplitters + + ^ ProportionalSplitterMorph smartHorizontalSplitters! Item was added: + ----- Method: PreferenceWizardMorph>>stateSmartVerticalSplitters (in category 'buttons') ----- + stateSmartVerticalSplitters + + ^ ProportionalSplitterMorph smartVerticalSplitters! Item was added: + ----- Method: PreferenceWizardMorph>>stateSoftShadows (in category 'buttons') ----- + stateSoftShadows + + ^ (Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow]! Item was added: + ----- Method: PreferenceWizardMorph>>stateSwapMouseButtons (in category 'buttons') ----- + stateSwapMouseButtons + + ^ Preferences valueOfFlag: #swapMouseButtons ifAbsent: [false]! Item was added: + ----- Method: PreferenceWizardMorph>>stateToolAndMenuIcons (in category 'buttons') ----- + stateToolAndMenuIcons + + ^ Browser showClassIcons! Item was added: + ----- Method: PreferenceWizardMorph>>stateTraceMessages (in category 'buttons') ----- + stateTraceMessages + + ^ Preferences valueOfFlag: #traceMessages ifAbsent: [false]! Item was added: + ----- Method: PreferenceWizardMorph>>stateUseColorfulWindows (in category 'buttons') ----- + stateUseColorfulWindows + + ^ Model useColorfulWindows! Item was added: + ----- Method: PreferenceWizardMorph>>stateUseRetractableScrollBars (in category 'buttons') ----- + stateUseRetractableScrollBars + + ^ ScrollPane useRetractableScrollBars! Item was added: + ----- Method: PreferenceWizardMorph>>stateWindowButtonsAlwaysActive (in category 'buttons') ----- + stateWindowButtonsAlwaysActive + + ^ SystemWindow windowTitleActiveOnFirstClick! Item was added: + ----- Method: PreferenceWizardMorph>>stateWindowsAlwaysActive (in category 'buttons') ----- + stateWindowsAlwaysActive + + ^ Model windowActiveOnFirstClick! Item was added: + ----- Method: PreferenceWizardMorph>>stateWindowsRaiseOnClick (in category 'buttons') ----- + stateWindowsRaiseOnClick + + ^ SystemWindow windowsRaiseOnClick! Item was added: + ----- Method: PreferenceWizardMorph>>step (in category 'stepping and presenter') ----- + step + + | oldBounds | + self comeToFront. + + oldBounds := self bounds. + self bounds: self world bounds. + self bounds = oldBounds ifFalse: [ + self updateWindowBounds].! Item was added: + ----- Method: PreferenceWizardMorph>>stepTime (in category 'testing') ----- + stepTime + ^ 1000! Item was added: + ----- Method: PreferenceWizardMorph>>toggleAutoEnclose (in category 'buttons') ----- + toggleAutoEnclose + + TextEditor autoEnclose: TextEditor autoEnclose not. + self changed: #stateAutoEnclose.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleAutoIndent (in category 'buttons') ----- + toggleAutoIndent + + TextEditor autoIndent: TextEditor autoIndent not. + self changed: #stateAutoIndent.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleBlinkingCursor (in category 'buttons') ----- + toggleBlinkingCursor + + TextEditor blinkingCursor: TextEditor blinkingCursor not. + + TextMorph allSubInstancesDo: [:ea | + ea stopBlinking. + ea hasFocus ifTrue: [ + Editor blinkingCursor + ifTrue: [ea startBlinking] + ifFalse: [ea resetBlinkCursor "ensure caret visible"]]]. + + self changed: #stateBlinkingCursor.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleClearFilterAutomatically (in category 'buttons') ----- + toggleClearFilterAutomatically + + PluggableListMorph clearFilterAutomatically: PluggableListMorph clearFilterAutomatically not. + self changed: #stateClearFilterAutomatically.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleEncloseSelection (in category 'buttons') ----- + toggleEncloseSelection + + TextEditor encloseSelection: TextEditor encloseSelection not. + self changed: #stateEncloseSelection.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleFastDrag (in category 'buttons') ----- + toggleFastDrag + + Preferences toggle: #fastDragWindowForMorphic. + self changed: #stateFastDrag.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleFilterableLists (in category 'buttons') ----- + toggleFilterableLists + + PluggableListMorph filterableLists: PluggableListMorph filterableLists not. + self changed: #stateFilterableLists.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleFocusFollowsMouse (in category 'buttons') ----- + toggleFocusFollowsMouse + + Preferences toggle: #mouseOverForKeyboardFocus. + self changed: #stateFocusFollowsMouse.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleGradients (in category 'buttons') ----- + toggleGradients + + | switch | + switch := SystemWindow gradientWindow not. + + SystemWindow gradientWindow: switch. + DialogWindow gradientDialog: switch. + MenuMorph gradientMenu: switch. + ScrollBar gradientScrollBar: switch. + PluggableButtonMorph gradientButton: switch. + + self changed: #stateGradients.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleHardShadows (in category 'buttons') ----- + toggleHardShadows + + self stateSoftShadows + ifFalse: [Preferences toggle: #menuAppearance3d]. + + Morph useSoftDropShadow: false. + + SystemWindow refreshAllWindows; reconfigureWindowsForFocus. + SystemProgressMorph reset. + TheWorldMainDockingBar updateInstances. + + self changed: #stateSoftShadows. + self changed: #stateHardShadows.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleReuseWindows (in category 'buttons') ----- + toggleReuseWindows + + SystemWindow reuseWindows: SystemWindow reuseWindows not. + self changed: #stateReuseWindows.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleRoundedButtonLook (in category 'buttons') ----- + toggleRoundedButtonLook + + | switch | + switch := PluggableButtonMorph roundedButtonCorners not. + + PluggableButtonMorph roundedButtonCorners: switch. + ScrollBar roundedScrollBarLook: switch. + + self changed: #stateRoundedButtonLook.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleRoundedWindowLook (in category 'buttons') ----- + toggleRoundedWindowLook + + | switch | + switch := SystemWindow roundedWindowCorners not. + + SystemWindow roundedWindowCorners: switch. + DialogWindow roundedDialogCorners: switch. + MenuMorph roundedMenuCorners: switch. + + self changed: #stateRoundedWindowLook.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleScrollBarsNarrow (in category 'buttons') ----- + toggleScrollBarsNarrow + + Preferences toggle: #scrollBarsNarrow. + ScrollPane allSubInstancesDo: [:ea | ea scrollBarThickness: ScrollPane scrollBarThickness]. + self changed: #stateScrollBarsNarrow.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleScrollBarsOnRight (in category 'buttons') ----- + toggleScrollBarsOnRight + + Preferences toggle: #scrollBarsOnRight. + ScrollPane allSubInstancesDo: [:ea | ea scrollBarOnLeft: self stateScrollBarsOnRight not]. + self changed: #stateScrollBarsOnRight.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleScrollBarsWithoutArrowButtons (in category 'buttons') ----- + toggleScrollBarsWithoutArrowButtons + + ScrollBar scrollBarsWithoutArrowButtons: ScrollBar scrollBarsWithoutArrowButtons not. + self changed: #stateScrollBarsWithoutArrowButtons.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleScrollBarsWithoutMenuButton (in category 'buttons') ----- + toggleScrollBarsWithoutMenuButton + + ScrollBar scrollBarsWithoutMenuButton: ScrollBar scrollBarsWithoutMenuButton not. + self changed: #stateScrollBarsWithoutMenuButton.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleSendMouseWheelToKeyboardFocus (in category 'buttons') ----- + toggleSendMouseWheelToKeyboardFocus + + HandMorph sendMouseWheelToKeyboardFocus: HandMorph sendMouseWheelToKeyboardFocus not. + self changed: #stateSendMouseWheelToKeyboardFocus.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleShowKeyboardFocus (in category 'buttons') ----- + toggleShowKeyboardFocus + + Morph indicateKeyboardFocus: Morph indicateKeyboardFocus not. + self changed: #stateShowKeyboardFocus.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleSimpleFrameAdornments (in category 'buttons') ----- + toggleSimpleFrameAdornments + + PluggableTextMorph simpleFrameAdornments: PluggableTextMorph simpleFrameAdornments not. + self changed: #stateSimpleFrameAdornments.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleSmartHorizontalSplitters (in category 'buttons') ----- + toggleSmartHorizontalSplitters + + ProportionalSplitterMorph smartHorizontalSplitters: ProportionalSplitterMorph smartHorizontalSplitters not. + self changed: #stateSmartHorizontalSplitters.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleSmartVerticalSplitters (in category 'buttons') ----- + toggleSmartVerticalSplitters + + ProportionalSplitterMorph smartVerticalSplitters: ProportionalSplitterMorph smartVerticalSplitters not. + self changed: #stateSmartVerticalSplitters.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleSoftShadows (in category 'buttons') ----- + toggleSoftShadows + + self stateHardShadows + ifFalse: [Preferences toggle: #menuAppearance3d]. + + Morph useSoftDropShadow: true. + + SystemWindow refreshAllWindows; reconfigureWindowsForFocus. + SystemProgressMorph reset. + TheWorldMainDockingBar updateInstances. + + self changed: #stateSoftShadows. + self changed: #stateHardShadows.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleSwapMouseButtons (in category 'buttons') ----- + toggleSwapMouseButtons + + Preferences toggle: #swapMouseButtons. + self changed: #stateSwapMouseButtons.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleToolAndMenuIcons (in category 'buttons') ----- + toggleToolAndMenuIcons + + | switch | + switch := Browser showClassIcons not. + + Browser showClassIcons: switch. + Browser showMessageIcons: switch. + Preferences setFlag: #menuWithIcons toValue: switch. + Preferences setFlag: #visualExplorer toValue: switch. + + self changed: #stateToolAndMenuIcons.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleTraceMessages (in category 'buttons') ----- + toggleTraceMessages + + Preferences toggle: #traceMessages. + self changed: #stateTraceMessages.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleUseColorfulWindows (in category 'buttons') ----- + toggleUseColorfulWindows + + Model useColorfulWindows: Model useColorfulWindows not. + self changed: #stateUseColorfulWindows.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleUseRetractableScrollBars (in category 'buttons') ----- + toggleUseRetractableScrollBars + + ScrollPane useRetractableScrollBars: ScrollPane useRetractableScrollBars not. + self changed: #stateUseRetractableScrollBars.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleWindowButtonsAlwaysActive (in category 'buttons') ----- + toggleWindowButtonsAlwaysActive + + SystemWindow windowTitleActiveOnFirstClick: SystemWindow windowTitleActiveOnFirstClick not. + self changed: #stateWindowButtonsAlwaysActive.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleWindowsAlwaysActive (in category 'buttons') ----- + toggleWindowsAlwaysActive + + Model windowActiveOnFirstClick: Model windowActiveOnFirstClick not. + self changed: #stateWindowsAlwaysActive.! Item was added: + ----- Method: PreferenceWizardMorph>>toggleWindowsRaiseOnClick (in category 'buttons') ----- + toggleWindowsRaiseOnClick + + SystemWindow windowsRaiseOnClick: SystemWindow windowsRaiseOnClick not. + self changed: #stateWindowsRaiseOnClick.! Item was added: + ----- Method: PreferenceWizardMorph>>updatePageLabel (in category 'layout') ----- + updatePageLabel + + pagesLabel contentsAsIs: (('{1} / {2}' format: {currentPageIndex. pages size}) asText + addAttribute: (TextColor color: (Color gray: 0.8)); + addAttribute: (TextFontReference toFont: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 12))).! Item was added: + ----- Method: PreferenceWizardMorph>>updateWindowBounds (in category 'layout') ----- + updateWindowBounds + + | windows offset | + windows := previewWorld submorphs. + offset := 50@50. + + windows reversed do: [:ea | + ea + topLeft: previewWorld topLeft + offset; + extent: previewWorld extent // 3 * 2. + offset := offset + (50@50)].! From commits at source.squeak.org Wed Aug 10 14:01:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 14:01:50 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.147.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.147.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.147 Author: mt Time: 10 August 2016, 4:01:41.333966 pm UUID: 8fd3ef38-d755-e34f-afd6-fc15ec6903c4 Ancestors: ReleaseBuilder-mt.146 After preparing the environment for the release, schedule the welcome wizard to start once. =============== Diff against ReleaseBuilder-mt.146 =============== Item was changed: ----- Method: ReleaseBuilder class>>prepareEnvironment (in category 'preparing') ----- prepareEnvironment "Prepare everything that should be done for a new image build. Clear caches, passwords, etc." "ReleaseBuilder prepareNewBuild" self clearCaches; configureTools; setPreferences; + configureDesktop. + + DeferredTask := [PreferenceWizardMorph new openInWorld].! - configureDesktop.! Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. ToolBuilder openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; + encloseSelection: false ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. Model windowActiveOnFirstClick: false. "Not good for little screen real estate." Model useColorfulWindows: false. Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false. ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; disable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 6. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From commits at source.squeak.org Wed Aug 10 14:06:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 14:06:13 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.66.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.66.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.66 Author: mt Time: 10 August 2016, 4:06:05.962119 pm UUID: c421d26e-3304-554b-831a-70a934db6d69 Ancestors: PreferenceBrowser-mt.65 Small fix and clean-up in welcome/preference wizard. =============== Diff against PreferenceBrowser-mt.65 =============== Item was removed: - ----- Method: PreferenceWizardMorph class>>generateLabelCallbacks (in category 'as yet unclassified') ----- - generateLabelCallbacks - "self generateLabelCallbacks" - - self selectors - select: [:ea | ea beginsWith: 'state'] - thenDo: [:ea | - | suffix | - suffix := ea allButFirst: 'state' size. - self - compile: ('label{1}\ "Auto-generated."\\ ^ self state{1} ifTrue: [''x''] ifFalse: ['' '']' withCRs format: {suffix}) - classified: 'buttons']. - ! Item was changed: ----- Method: PreferenceWizardMorph>>step (in category 'stepping and presenter') ----- step | oldBounds | + "self comeToFront." - self comeToFront. oldBounds := self bounds. self bounds: self world bounds. self bounds = oldBounds ifFalse: [ self updateWindowBounds].! From commits at source.squeak.org Wed Aug 10 14:25:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 14:25:40 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.67.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.67.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.67 Author: mt Time: 10 August 2016, 4:25:35.059852 pm UUID: 16112823-ec2a-914d-b626-054a50d1e95e Ancestors: PreferenceBrowser-mt.66 Forgot to add "open tools attached to mouse cursor" in wizard. :-) =============== Diff against PreferenceBrowser-mt.66 =============== Item was changed: ----- Method: PreferenceWizardMorph>>initializePage04InteractionMore (in category 'initialization') ----- initializePage04InteractionMore | currentPage | currentPage := pages add: self createPage. currentPage addMorphBack: (self createLabel: 'Choose more interaction settings' color: Color white). currentPage addAllMorphsBack: { self createCheckbox: 'Windows raise on click' translated for: #WindowsRaiseOnClick. self createCheckbox: 'Windows always active' for: #WindowsAlwaysActive. self createCheckbox: 'Window buttons always active' translated for: #WindowButtonsAlwaysActive. self createVerticalSpace. self createCheckbox: 'Smart horizontal splitters' translated for: #SmartHorizontalSplitters. self createCheckbox: 'Smart vertical splitters' translated for: #SmartVerticalSplitters. self createVerticalSpace. self createCheckbox: 'Filterable lists and trees' translated for: #FilterableLists. self createCheckbox: 'Filters clear if unfocused' translated for: #ClearFilterAutomatically. + self createVerticalSpace. + self createCheckbox: 'Attach tools to mouse' translated for: #AttachToolsToMouse. }. currentPage addMorphBack: self createVerticalSpacer. ! Item was added: + ----- Method: PreferenceWizardMorph>>stateAttachToolsToMouse (in category 'buttons') ----- + stateAttachToolsToMouse + + ^ ToolBuilder openToolsAttachedToMouseCursor! Item was added: + ----- Method: PreferenceWizardMorph>>toggleAttachToolsToMouse (in category 'buttons') ----- + toggleAttachToolsToMouse + + ToolBuilder openToolsAttachedToMouseCursor: ToolBuilder openToolsAttachedToMouseCursor not. + self changed: #stateAttachToolsToMouse.! From Marcel.Taeumel at hpi.de Wed Aug 10 15:21:36 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 10 15:21:39 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1470056139149-4909004.post@n4.nabble.com> References: <1470056139149-4909004.post@n4.nabble.com> Message-ID: <1470842496210-4910338.post@n4.nabble.com> marcel.taeumel wrote > Hi, there! > > It's "feature freeze" time. :-) Please do not try out new features in the > Trunk for now. If you forgot something, please ask first. We'll find a > way. > > @Chris: What is needed in the image for the MC History function? There was > at least one fix for the ServiceEntry left in your inbox, right? > > We will now work on correcting some in-image texts, release information, > etc. We will also work on the release automation scripts using TravisCI, > smalltalkCI, and GitHub. > > The next dates are: > * Code Freeze on August 14, 23:59 AOE > * Release between August 15 and 19 > > Let's hope that this will work out as expected. :-) > > Best, > Marcel Hi, there. A first All-In-One can be tried out from here: https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip Note that we are looking for start-up bugs in the Linux scripts. Note that we have not yet fixed the Windows .ini bug. Note that Windows 10 is quite anxious about starting an unsigned executable. Note that the release artifacts will be on files.squeak.org soon. Be patient. Note that we still want to use a more recent CogVM if some one would declare one as stable. Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 10 16:01:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 16:01:22 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1255.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1255.mcz ==================== Summary ==================== Name: Morphic-mt.1255 Author: mt Time: 10 August 2016, 6:00:43.408211 pm UUID: 44a5f88d-a694-6a45-a175-392df23e3839 Ancestors: Morphic-mt.1254 Fixes object explorer contents for OrderedDictionary. =============== Diff against Morphic-mt.1254 =============== Item was added: + ----- Method: OrderedDictionary>>explorerContents (in category '*Morphic-Explorer') ----- + explorerContents + + ^self keys replace: [ :key | + ObjectExplorerWrapper + with: (self at: key) + name: (key printString contractTo: 32) + model: self ] + ! From commits at source.squeak.org Wed Aug 10 16:06:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 16:06:35 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.359.mcz Message-ID: Marcel Taeumel uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-mt.359.mcz ==================== Summary ==================== Name: Graphics-mt.359 Author: mt Time: 10 August 2016, 6:05:57.556211 pm UUID: a9b47273-1f24-b34f-9925-34f5c749c939 Ancestors: Graphics-mt.358 In the course of fine-tuning window colors for the upcoming release, add the set of traditional mac crayon colors, which only slightly overlap with the existing named colors. Do "Color orderedCrayonColors explore." to check. =============== Diff against Graphics-mt.358 =============== Item was added: + ----- Method: Color class>>aluminum (in category 'named colors - crayons') ----- + aluminum + + ^ Color r: 153/255 g: 153/255 b: 153/255! Item was added: + ----- Method: Color class>>aqua (in category 'named colors - crayons') ----- + aqua + + ^ Color r: 0.0 g: 128/255 b: 1.0! Item was added: + ----- Method: Color class>>asparagus (in category 'named colors - crayons') ----- + asparagus + + ^ Color r: 128/255 g: 128/255 b: 0.0! Item was added: + ----- Method: Color class>>banana (in category 'named colors - crayons') ----- + banana + + ^ Color r: 1.0 g: 1.0 b: 102/255! Item was added: + ----- Method: Color class>>blueberry (in category 'named colors - crayons') ----- + blueberry + + ^ Color r: 0.0 g: 0.0 b: 1.0! Item was added: + ----- Method: Color class>>bubblegum (in category 'named colors - crayons') ----- + bubblegum + + ^ Color r: 1.0 g: 102/255 b: 1.0! Item was added: + ----- Method: Color class>>cantaloupe (in category 'named colors - crayons') ----- + cantaloupe + + ^ Color r: 1.0 g: 204/255 b: 102/255! Item was added: + ----- Method: Color class>>carnation (in category 'named colors - crayons') ----- + carnation + + ^ Color r: 1.0 g: 111/255 b: 207/255! Item was added: + ----- Method: Color class>>cayenne (in category 'named colors - crayons') ----- + cayenne + + ^ Color r: 128/255 g: 0.0 b: 0.0! Item was added: + ----- Method: Color class>>clover (in category 'named colors - crayons') ----- + clover + + ^ Color r: 0.0 g: 128/255 b: 0.0! Item was added: + ----- Method: Color class>>eggplant (in category 'named colors - crayons') ----- + eggplant + + ^ Color r: 64/255 g: 0.0 b: 128/255! Item was added: + ----- Method: Color class>>fern (in category 'named colors - crayons') ----- + fern + + ^ Color r: 64/255 g: 128/255 b: 0.0! Item was added: + ----- Method: Color class>>flora (in category 'named colors - crayons') ----- + flora + + ^ Color r: 102/255 g: 1.0 b: 102/255! Item was added: + ----- Method: Color class>>grape (in category 'named colors - crayons') ----- + grape + + ^ Color r: 128/255 g: 0.0 b: 1.0! Item was added: + ----- Method: Color class>>honeydew (in category 'named colors - crayons') ----- + honeydew + + ^ Color r: 204/255 g: 1.0 b: 102/255! Item was added: + ----- Method: Color class>>ice (in category 'named colors - crayons') ----- + ice + + ^ Color r: 102/255 g: 1.0 b: 1.0! Item was added: + ----- Method: Color class>>iron (in category 'named colors - crayons') ----- + iron + + ^ Color r: 76/255 g: 76/255 b: 76/255! Item was added: + ----- Method: Color class>>lavender (in category 'named colors - crayons') ----- + lavender + + ^ Color r: 204/255 g: 102/255 b: 1.0! Item was added: + ----- Method: Color class>>lead (in category 'named colors - crayons') ----- + lead + + ^ Color r: 25/255 g: 25/255 b: 25/255! Item was added: + ----- Method: Color class>>lemon (in category 'named colors - crayons') ----- + lemon + + ^ Color r: 1.0 g: 1.0 b: 0.0! Item was added: + ----- Method: Color class>>licorice (in category 'named colors - crayons') ----- + licorice + + ^ Color r: 0.0 g: 0.0 b: 0.0! Item was added: + ----- Method: Color class>>lime (in category 'named colors - crayons') ----- + lime + + ^ Color r: 128/255 g: 1.0 b: 0.0! Item was added: + ----- Method: Color class>>magnesium (in category 'named colors - crayons') ----- + magnesium + + ^ Color r: 179/255 g: 179/255 b: 179/255! Item was added: + ----- Method: Color class>>maraschino (in category 'named colors - crayons') ----- + maraschino + + ^ Color r: 1.0 g: 0.0 b: 0.0! Item was added: + ----- Method: Color class>>maroon (in category 'named colors - crayons') ----- + maroon + + ^ Color r: 128/255 g: 0.0 b: 64/255! Item was added: + ----- Method: Color class>>mercury (in category 'named colors - crayons') ----- + mercury + + ^ Color r: 230.0 g: 230.0 b: 230.0! Item was added: + ----- Method: Color class>>midnight (in category 'named colors - crayons') ----- + midnight + + ^ Color r: 0.0 g: 0.0 b: 128/255! Item was added: + ----- Method: Color class>>mocha (in category 'named colors - crayons') ----- + mocha + + ^ Color r: 128/255 g: 64/255 b: 0.0! Item was added: + ----- Method: Color class>>moss (in category 'named colors - crayons') ----- + moss + + ^ Color r: 0.0 g: 128/255 b: 64/255! Item was added: + ----- Method: Color class>>nickel (in category 'named colors - crayons') ----- + nickel + + ^ Color r: 128/255 g: 128/255 b: 128/255! Item was added: + ----- Method: Color class>>ocean (in category 'named colors - crayons') ----- + ocean + + ^ Color r: 0.0 g: 64/255 b: 128/255! Item was added: + ----- Method: Color class>>orchid (in category 'named colors - crayons') ----- + orchid + + ^ Color r: 102/255 g: 102/255 b: 1.0! Item was added: + ----- Method: Color class>>orderedCrayonColors (in category 'other') ----- + orderedCrayonColors + "self orderedCrayonColors explore." + + ^ OrderedDictionary newFrom: (#(cantaloupe honeydew spindrift sky lavender carnation licorice snow salmon banana flora ice orchid bubblegum lead mercury tangerine lime seaFoam aqua grape strawberry tungsten silver maraschino lemon spring turquoise blueberry magenta iron magnesium mocha fern moss ocean eggplant maroon steel aluminum cayenne asparagus clover teal midnight plum tin nickel) collect: [:ea | + ea -> (self perform: ea)])! Item was added: + ----- Method: Color class>>plum (in category 'named colors - crayons') ----- + plum + + ^ Color r: 128/255 g: 0.0 b: 128/255! Item was added: + ----- Method: Color class>>salmon (in category 'named colors - crayons') ----- + salmon + + ^ Color r: 1.0 g: 102/255 b: 102/255! Item was added: + ----- Method: Color class>>seaFoam (in category 'named colors - crayons') ----- + seaFoam + + ^ Color r: 0.0 g: 1.0 b: 128/255! Item was added: + ----- Method: Color class>>silver (in category 'named colors - crayons') ----- + silver + + ^ Color r: 204/255 g: 204/255 b: 204/255! Item was added: + ----- Method: Color class>>sky (in category 'named colors - crayons') ----- + sky + + ^ Color r: 102/255 g: 204/255 b: 1.0! Item was added: + ----- Method: Color class>>snow (in category 'named colors - crayons') ----- + snow + + ^ Color r: 1.0 g: 1.0 b: 1.0! Item was added: + ----- Method: Color class>>spindrift (in category 'named colors - crayons') ----- + spindrift + + ^ Color r: 102/255 g: 1.0 b: 204/255! Item was added: + ----- Method: Color class>>spring (in category 'named colors - crayons') ----- + spring + + ^ Color r: 0.0 g: 1.0 b: 0.0! Item was added: + ----- Method: Color class>>steel (in category 'named colors - crayons') ----- + steel + + ^ Color r: 102/255 g: 102/255 b: 102/255! Item was added: + ----- Method: Color class>>strawberry (in category 'named colors - crayons') ----- + strawberry + + ^ Color r: 1.0 g: 0.0 b: 128/255! Item was added: + ----- Method: Color class>>tangerine (in category 'named colors - crayons') ----- + tangerine + + ^ Color r: 1.0 g: 128/255 b: 0.0! Item was added: + ----- Method: Color class>>teal (in category 'named colors - crayons') ----- + teal + + ^ Color r: 0.0 g: 128/255 b: 128/255! Item was added: + ----- Method: Color class>>tin (in category 'named colors - crayons') ----- + tin + + ^ Color r: 127/255 g: 127/255 b: 127/255! Item was added: + ----- Method: Color class>>tungsten (in category 'named colors - crayons') ----- + tungsten + + ^ Color r: 51/255 g: 51/255 b: 51/255! Item was added: + ----- Method: Color class>>turquoise (in category 'named colors - crayons') ----- + turquoise + + ^ Color r: 0.0 g: 1.0 b: 1.0! From bernhard at pieber.com Wed Aug 10 16:13:43 2016 From: bernhard at pieber.com (Bernhard Pieber) Date: Wed Aug 10 16:13:50 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1470842496210-4910338.post@n4.nabble.com> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> Message-ID: <7771CB93-D33E-4200-B773-BA302D9AEB4C@pieber.com> Hi Marcel, Wow! The themes and preferences assistant look great. I like the default background. Two Monticello projects are dirty: Autogenerated and CommandLine Just a first impression. Thanks to all contributors for the great energy! Cheers, Bernhard > Am 10.08.2016 um 17:21 schrieb marcel.taeumel : > > marcel.taeumel wrote >> Hi, there! >> >> It's "feature freeze" time. :-) Please do not try out new features in the >> Trunk for now. If you forgot something, please ask first. We'll find a >> way. >> >> @Chris: What is needed in the image for the MC History function? There was >> at least one fix for the ServiceEntry left in your inbox, right? >> >> We will now work on correcting some in-image texts, release information, >> etc. We will also work on the release automation scripts using TravisCI, >> smalltalkCI, and GitHub. >> >> The next dates are: >> * Code Freeze on August 14, 23:59 AOE >> * Release between August 15 and 19 >> >> Let's hope that this will work out as expected. :-) >> >> Best, >> Marcel > > Hi, there. > > A first All-In-One can be tried out from here: > https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip > > Note that we are looking for start-up bugs in the Linux scripts. > Note that we have not yet fixed the Windows .ini bug. > Note that Windows 10 is quite anxious about starting an unsigned executable. > Note that the release artifacts will be on files.squeak.org soon. Be > patient. > Note that we still want to use a more recent CogVM if some one would declare > one as stable. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Wed Aug 10 17:21:32 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Aug 10 17:21:37 2016 Subject: [squeak-dev] The Inbox: ReleaseBuilder-cmm.143.mcz In-Reply-To: <20160810004847.GA90646@shell.msen.com> References: <1470725290441-4910092.post@n4.nabble.com> <40CC53D0-136F-4D10-B125-C65ADC11D8D7@gmx.de> <20160810004847.GA90646@shell.msen.com> Message-ID: <8134E24A-7A8B-4C50-817F-0DD0EAA97FE2@rowledge.org> > On 09-08-2016, at 5:48 PM, David T. Lewis wrote: > > ? > Take a look at how Juan has handled the assignment arrow issue in Cuis. > If you have not done so before, please take a few minutes to download a > Cuis image and check it out. That?s pretty much what I was thinking. Underscores within method names etc are an Abomination Unto Nuggan. And yes, I understand that some FFI related apis require us to avert our gazes and deal with the Great Apostate Unwashed. Doesn?t mean I have to like it. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: LJD: Lock Job on Disk From herbertkoenig at gmx.net Wed Aug 10 18:35:37 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Wed Aug 10 18:35:39 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1470842496210-4910338.post@n4.nabble.com> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> Message-ID: <20b5eaea-c569-9b42-7222-82f8877822d9@gmx.net> Hi, when in the preferences browser, flaps selecting 'classic navigator enabled' gives a debugger as attached. While creating the png I brought up the halo and wanted to click the menu button to export. If there is another window under the menu button (my preference browser) clicking brings the other menu to the front and the halo disappears. Move the other window out of the way and it works. Not to forget: I like it, thanks to all for the work. Cheers, Herbert Am 10.08.2016 um 17:21 schrieb marcel.taeumel: > marcel.taeumel wrote >> Hi, there! >> >> It's "feature freeze" time. :-) Please do not try out new features in the >> Trunk for now. If you forgot something, please ask first. We'll find a >> way. >> >> @Chris: What is needed in the image for the MC History function? There was >> at least one fix for the ServiceEntry left in your inbox, right? >> >> We will now work on correcting some in-image texts, release information, >> etc. We will also work on the release automation scripts using TravisCI, >> smalltalkCI, and GitHub. >> >> The next dates are: >> * Code Freeze on August 14, 23:59 AOE >> * Release between August 15 and 19 >> >> Let's hope that this will work out as expected. :-) >> >> Best, >> Marcel > Hi, there. > > A first All-In-One can be tried out from here: > https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip > > Note that we are looking for start-up bugs in the Linux scripts. > Note that we have not yet fixed the Windows .ini bug. > Note that Windows 10 is quite anxious about starting an unsigned executable. > Note that the release artifacts will be on files.squeak.org soon. Be > patient. > Note that we still want to use a more recent CogVM if some one would declare > one as stable. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > -------------- next part -------------- A non-text attachment was scrubbed... Name: Test.png Type: image/png Size: 55616 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160810/2106c77a/Test-0001.png From herbertkoenig at gmx.net Wed Aug 10 19:02:13 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Wed Aug 10 19:02:14 2016 Subject: [squeak-dev] [Squeak 5.1 beta] New Project does not work with my changed preferences Message-ID: <95b9e269-bdb0-a245-86c0-08caaa48478d@gmx.net> Hi, put the unzipped file into the resources folder, in the preferences browser load the preferences from disk. Then you get a debugger when entering a freshly created Morpic Project. In the standard all it one this does not occur. The attachment was too big, so please download it from: http://www.kostenlose-bauabrechnung.de/downloads/ and disregard my message waiting approval. Cheers, Herbert -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160810/41f6fa42/attachment.htm From asqueaker at gmail.com Wed Aug 10 19:47:25 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 10 19:48:10 2016 Subject: [squeak-dev] Re: The Inbox: ReleaseBuilder-cmm.143.mcz In-Reply-To: <1470815831062-4910290.post@n4.nabble.com> References: <1470725290441-4910092.post@n4.nabble.com> <1470815831062-4910290.post@n4.nabble.com> Message-ID: Heh, I actually do think themeing them could be a good idea eventually. Its either a debugging tool or an app tool, OR an app intrusion. On Wed, Aug 10, 2016 at 2:57 AM, marcel.taeumel wrote: > Chris Muller-3 wrote >> Hi Marcel, >> >>> for out-of-the-box compatibility, I would suggest to leave >>> "allowUnderscoreAsAssignment" enabled. >> >> Are you referring to compatibility with old, or new, applications? >> Are there applications running on modern Squeak 5 still using >> underscores? >> >> At one time, I guess we thought there were sufficient issues >> associated with overloading the underscore character, that we decided >> to explicitly encourage applications to run FixUnderscores. >> >> If people are actively still preferring the use of underscore >> assignment in new code today, then I can understand turning it on.. >> >> Just curious. > > Oh, I misread that change. > > Why would you actually disable the bounds in the halo? Do they need to be > themed? =) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Inbox-ReleaseBuilder-cmm-143-mcz-tp4910071p4910290.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From commits at source.squeak.org Wed Aug 10 20:49:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 20:49:18 2016 Subject: [squeak-dev] The Trunk: Morphic-cmm.1256.mcz Message-ID: Chris Muller uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-cmm.1256.mcz ==================== Summary ==================== Name: Morphic-cmm.1256 Author: cmm Time: 10 August 2016, 3:48:21.563982 pm UUID: f5a25aeb-c2f4-4553-b112-eee3f82d6d6c Ancestors: Morphic-mt.1255 Fix DependencyBrowser not respecting the Reuse Windows preference. =============== Diff against Morphic-mt.1255 =============== Item was added: + ----- Method: DependencyBrowser>>representsSameBrowseeAs: (in category '*morphic') ----- + representsSameBrowseeAs: anotherModel + ^ self hasUnacceptedEdits not! From asqueaker at gmail.com Wed Aug 10 21:17:00 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 10 21:17:45 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1470842496210-4910338.post@n4.nabble.com> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> Message-ID: Hi Marcel, why the 3997 vm, its quite old? On Wed, Aug 10, 2016 at 10:21 AM, marcel.taeumel wrote: > marcel.taeumel wrote >> Hi, there! >> >> It's "feature freeze" time. :-) Please do not try out new features in the >> Trunk for now. If you forgot something, please ask first. We'll find a >> way. >> >> @Chris: What is needed in the image for the MC History function? There was >> at least one fix for the ServiceEntry left in your inbox, right? >> >> We will now work on correcting some in-image texts, release information, >> etc. We will also work on the release automation scripts using TravisCI, >> smalltalkCI, and GitHub. >> >> The next dates are: >> * Code Freeze on August 14, 23:59 AOE >> * Release between August 15 and 19 >> >> Let's hope that this will work out as expected. :-) >> >> Best, >> Marcel > > Hi, there. > > A first All-In-One can be tried out from here: > https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip > > Note that we are looking for start-up bugs in the Linux scripts. > Note that we have not yet fixed the Windows .ini bug. > Note that Windows 10 is quite anxious about starting an unsigned executable. > Note that the release artifacts will be on files.squeak.org soon. Be > patient. > Note that we still want to use a more recent CogVM if some one would declare > one as stable. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From commits at source.squeak.org Wed Aug 10 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 10 21:55:05 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160810215502.23181.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068472.html Name: System-cmm.876 Ancestors: System-mt.875 - CommunityDark, fix the Squeak-logo color when selected. - Fix ability to load legacy .prefs files saved with Squeak 5.0. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068473.html Name: Graphics-mt.358 Ancestors: Graphics-mt.357 Fixes regression in FileList graphics preview, which expects a certain callback in a certain file service. *sigh* I guess to also assume a certain type of result. *double-sigh* See FileList >> #isGraphicsFileSelected. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068474.html Name: ReleaseBuilder-mt.145 Ancestors: ReleaseBuilder-mt.144 Missing preference added. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068475.html Name: ReleaseBuilder-mt.146 Ancestors: ReleaseBuilder-mt.145 Make setting of display extent more robust to not nag the CI building process if some VM behaves not as expected. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068476.html Name: Morphic-mt.1247 Ancestors: Morphic-mt.1246 Adds small workaround for 64-bit builds. Only temporary. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068477.html Name: Morphic-mt.1248 Ancestors: Morphic-mt.1247 Fix minor API inconsistency between PluggableButtonMorph and PluggableButtonMorphPlus. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068478.html Name: MorphicExtras-mt.181 Ancestors: MorphicExtras-pre.180 Adapt to latest changes in menus and docking bars. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068479.html Name: Morphic-mt.1249 Ancestors: Morphic-mt.1248 Adapt to latest changes in menus and docking bars. Deprecate MenuLineMorph. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068480.html Name: 51Deprecated-mt.41 Ancestors: 51Deprecated-mt.40 Deprecate MenuLineMorph. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068481.html Name: Morphic-mt.1250 Ancestors: Morphic-mt.1249 Fixes a bug regarding shadows. When toggling the shadow via the Theme menu, update all windows in the world. In the long term, we might want to refactor the #menuAppearance3d preference. There is much room for improvement in the shadow-related source code. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068482.html Name: Morphic-mt.1251 Ancestors: Morphic-mt.1250 Due to popular request, make settings for "shadows" and "rounded look" in the docking bar theme menu more fine-granular. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068483.html Name: Morphic-mt.1252 Ancestors: Morphic-mt.1251 Make disabling the preference "filterable list" work again. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068484.html Name: ToolBuilder-Kernel-mt.103 Ancestors: ToolBuilder-Kernel-mt.102 If "filterable lists" is disabled, there has to be a way to force it, for example, for our ListChooser. Otherwise the ListChoose would behave strangely. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068485.html Name: ToolBuilder-Morphic-mt.182 Ancestors: ToolBuilder-Morphic-mt.181 If "filterable lists" is disabled, there has to be a way to force it, for example, for our ListChooser. Otherwise the ListChoose would behave strangely. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068486.html Name: Morphic-mt.1253 Ancestors: Morphic-mt.1252 Fixes an update glitch with some scrollbar settings. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068487.html Name: Morphic-mt.1254 Ancestors: Morphic-mt.1253 Also provide more control about automatic list filter clearing for pluggable lists. Needed for ListChooser if preference is globally enabled. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068488.html Name: ToolBuilder-Kernel-mt.104 Ancestors: ToolBuilder-Kernel-mt.103 Also provide more control about automatic list filter clearing for pluggable lists. Needed for ListChooser if preference is globally enabled. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068489.html Name: ToolBuilder-Morphic-mt.183 Ancestors: ToolBuilder-Morphic-mt.182 Also provide more control about automatic list filter clearing for pluggable lists. Needed for ListChooser if preference is globally enabled. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068490.html Name: PreferenceBrowser-mt.65 Ancestors: PreferenceBrowser-mt.64 A *very* simple welcome wizard, meant to be used exactly once when starting an image freshly for the very first time. Try to mitigate the old issue of "What should the the default preferences in the next release?" If not working as expected, can be nuked from the release image easily. :-) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068491.html Name: ReleaseBuilder-mt.147 Ancestors: ReleaseBuilder-mt.146 After preparing the environment for the release, schedule the welcome wizard to start once. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068492.html Name: PreferenceBrowser-mt.66 Ancestors: PreferenceBrowser-mt.65 Small fix and clean-up in welcome/preference wizard. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068493.html Name: PreferenceBrowser-mt.67 Ancestors: PreferenceBrowser-mt.66 Forgot to add "open tools attached to mouse cursor" in wizard. :-) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068494.html Name: Morphic-mt.1255 Ancestors: Morphic-mt.1254 Fixes object explorer contents for OrderedDictionary. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068495.html Name: Graphics-mt.359 Ancestors: Graphics-mt.358 In the course of fine-tuning window colors for the upcoming release, add the set of traditional mac crayon colors, which only slightly overlap with the existing named colors. Do "Color orderedCrayonColors explore." to check. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068496.html Name: Morphic-cmm.1256 Ancestors: Morphic-mt.1255 Fix DependencyBrowser not respecting the Reuse Windows preference. ============================================= From ma.chris.m at gmail.com Wed Aug 10 23:04:38 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Wed Aug 10 23:05:22 2016 Subject: [squeak-dev] Some kind of missing font problem... Message-ID: There is some problem with the progress bar or font renderings or something while trying to install Magma from SqueakMap. Stack below. To reproduce: 1) Launch up Squeak5.1beta-16336-32bit.image (using Eliots latest VM). 2) Open SqueakMap catalog. In package list, unselect "New safely-available packages". 3) Find "Magma" in the list. 4) Yellow-click the (head) version, then select "Install". At some point, the load process ends up sending #changed: to the SMLoaderPlus model, which ultimately leads to the font access issue. Best, Chris ============== From: sdf To: squeak-dev@lists.squeakfoundation.org Subject: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #fontIndexOf: here insert explanation of what you were doing, suspect changes you've made and so forth. 10 August 2016 5:58:07.849777 pm VM: unix - Smalltalk Image: Squeak5.1beta [latest update: #16336] SecurityManager state: Restricted: false FileAccess: true SocketAccess: true UndefinedObject(Object)>>doesNotUnderstand: #fontIndexOf: Receiver: nil Arguments and temporary variables: aMessage: fontIndexOf: a StrikeFont(Bitmap DejaVu Sans 9 14) exception: MessageNotUnderstood: UndefinedObject>>fontIndexOf: resumeValue: nil Receiver's instance variables: nil StringMorphAttributeScanner>>initializeFromStringMorph: Receiver: a StringMorphAttributeScanner Arguments and temporary variables: aStringMorph: an IndentingListItemMorph(1603409)nil style: nil Receiver's instance variables: fontNumber: 1 textColor: nil emphasis: 0 alignment: nil actualFont: a StrikeFont(Bitmap DejaVu Sans 9 14) indent: 0 kern: 0 IndentingListItemMorph(StringMorph)>>contents: Receiver: an IndentingListItemMorph(1603409)nil Arguments and temporary variables: newContents: a Text for 'Ma client server ((head))' scanner: nil Receiver's instance variables: bounds: 0@0 corner: 50@40 owner: nil submorphs: #() fullBounds: nil color: nil extension: nil font: a StrikeFont(Bitmap DejaVu Sans 9 14) emphasis: nil contents: nil hasFocus: false indentLevel: nil isExpanded: nil complexContents: a PluggableTreeItemNode firstChild: nil container: a PluggableTreeMorph(3226300) nextSibling: nil icon: nil backgroundColor: nil IndentingListItemMorph(StringMorph)>>initWithContents:font:emphasis: Receiver: an IndentingListItemMorph(1603409)nil Arguments and temporary variables: aString: a Text for 'Ma client server ((head))' aFont: a StrikeFont(Bitmap DejaVu Sans 9 14) emphasisCode: nil Receiver's instance variables: bounds: 0@0 corner: 50@40 owner: nil submorphs: #() fullBounds: nil color: nil extension: nil font: a StrikeFont(Bitmap DejaVu Sans 9 14) emphasis: nil contents: nil hasFocus: false indentLevel: nil isExpanded: nil complexContents: a PluggableTreeItemNode firstChild: nil container: a PluggableTreeMorph(3226300) nextSibling: nil icon: nil backgroundColor: nil IndentingListItemMorph>>initWithContents:prior:forList:indentLevel: Receiver: an IndentingListItemMorph(1603409)nil Arguments and temporary variables: anObject: a PluggableTreeItemNode priorMorph: an IndentingListItemMorph(2588928)'Lucy Font Set' hostList: a PluggableTreeMorph(3226300) newLevel: 0 Receiver's instance variables: bounds: 0@0 corner: 50@40 owner: nil submorphs: #() fullBounds: nil color: nil extension: nil font: a StrikeFont(Bitmap DejaVu Sans 9 14) emphasis: nil contents: nil hasFocus: false indentLevel: nil isExpanded: nil complexContents: a PluggableTreeItemNode firstChild: nil container: a PluggableTreeMorph(3226300) nextSibling: nil icon: nil backgroundColor: nil [] in PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel: Receiver: a PluggableTreeMorph(3226300) Arguments and temporary variables: < Receiver's instance variables: bounds: 158@93 corner: 305@266 owner: a PluggableSystemWindow(2808457...etc... submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a TransformMorph(3246...etc... fullBounds: 158@93 corner: 305@266 color: Color white extension: a MorphExtension (419193) [locked] [externalName = packagesList ] ...etc... borderWidth: 1 borderColor: (Color r: 0.495 g: 0.495 b: 0.495) model: a SMLoaderPlus slotName: nil open: false scrollBar: a ScrollBar(3352217) scroller: a TransformMorph(3246492) retractableScrollBar: false scrollBarOnLeft: false getMenuSelector: #packagesMenu: getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(2425968) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 selectedMorph: an IndentingListItemMorph(3688549)'(head)' hoveredMorph: nil getListSelector: nil keystrokeActionSelector: nil autoDeselect: true columns: nil columnsCache: #() sortingSelector: nil getSelectionSelector: #selectedItem setSelectionSelector: #selectedItem: potentialDropMorph: nil lineColor: Color veryLightGray font: a StrikeFont(Bitmap DejaVu Sans 9 14) textColor: Color black rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode...etc... selectedWrapper: a PluggableTreeItemNode getRootsSelector: #packageList getChildrenSelector: #itemChildren: hasChildrenSelector: #itemHasChildren: getLabelSelector: #itemLabel: getIconSelector: nil getSelectedPathSelector: #selectedItemPath setSelectedParentSelector: nil getHelpSelector: nil dropItemSelector: nil wantsDropSelector: nil dragItemSelector: nil dragTypeSelector: nil nodeClass: nil lastKeystrokeTime: 0 lastKeystrokes: '' dragStartedSelector: nil Array(SequenceableCollection)>>do: Receiver: {a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode...etc... Arguments and temporary variables: aBlock: [closure] in PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel:...etc... index: 329 indexLimiT: 800 Receiver's instance variables: {a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode...etc... PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel: Receiver: a PluggableTreeMorph(3226300) Arguments and temporary variables: < Receiver's instance variables: bounds: 158@93 corner: 305@266 owner: a PluggableSystemWindow(2808457...etc... submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a TransformMorph(3246...etc... fullBounds: 158@93 corner: 305@266 color: Color white extension: a MorphExtension (419193) [locked] [externalName = packagesList ] ...etc... borderWidth: 1 borderColor: (Color r: 0.495 g: 0.495 b: 0.495) model: a SMLoaderPlus slotName: nil open: false scrollBar: a ScrollBar(3352217) scroller: a TransformMorph(3246492) retractableScrollBar: false scrollBarOnLeft: false getMenuSelector: #packagesMenu: getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(2425968) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 selectedMorph: an IndentingListItemMorph(3688549)'(head)' hoveredMorph: nil getListSelector: nil keystrokeActionSelector: nil autoDeselect: true columns: nil columnsCache: #() sortingSelector: nil getSelectionSelector: #selectedItem setSelectionSelector: #selectedItem: potentialDropMorph: nil lineColor: Color veryLightGray font: a StrikeFont(Bitmap DejaVu Sans 9 14) textColor: Color black rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode...etc... selectedWrapper: a PluggableTreeItemNode getRootsSelector: #packageList getChildrenSelector: #itemChildren: hasChildrenSelector: #itemHasChildren: getLabelSelector: #itemLabel: getIconSelector: nil getSelectedPathSelector: #selectedItemPath setSelectedParentSelector: nil getHelpSelector: nil dropItemSelector: nil wantsDropSelector: nil dragItemSelector: nil dragTypeSelector: nil nodeClass: nil lastKeystrokeTime: 0 lastKeystrokes: '' dragStartedSelector: nil PluggableTreeMorph(SimpleHierarchicalListMorph)>>list: Receiver: a PluggableTreeMorph(3226300) Arguments and temporary variables: aCollection: {a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode...etc... wereExpanded: {a PluggableTreeItemNode} morphList: an OrderedCollection(an IndentingListItemMorph(1027512)'15-Puzzle' a...etc... Receiver's instance variables: bounds: 158@93 corner: 305@266 owner: a PluggableSystemWindow(2808457...etc... submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a TransformMorph(3246...etc... fullBounds: 158@93 corner: 305@266 color: Color white extension: a MorphExtension (419193) [locked] [externalName = packagesList ] ...etc... borderWidth: 1 borderColor: (Color r: 0.495 g: 0.495 b: 0.495) model: a SMLoaderPlus slotName: nil open: false scrollBar: a ScrollBar(3352217) scroller: a TransformMorph(3246492) retractableScrollBar: false scrollBarOnLeft: false getMenuSelector: #packagesMenu: getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(2425968) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 selectedMorph: an IndentingListItemMorph(3688549)'(head)' hoveredMorph: nil getListSelector: nil keystrokeActionSelector: nil autoDeselect: true columns: nil columnsCache: #() sortingSelector: nil getSelectionSelector: #selectedItem setSelectionSelector: #selectedItem: potentialDropMorph: nil lineColor: Color veryLightGray font: a StrikeFont(Bitmap DejaVu Sans 9 14) textColor: Color black rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode...etc... selectedWrapper: a PluggableTreeItemNode getRootsSelector: #packageList getChildrenSelector: #itemChildren: hasChildrenSelector: #itemHasChildren: getLabelSelector: #itemLabel: getIconSelector: nil getSelectedPathSelector: #selectedItemPath setSelectedParentSelector: nil getHelpSelector: nil dropItemSelector: nil wantsDropSelector: nil dragItemSelector: nil dragTypeSelector: nil nodeClass: nil lastKeystrokeTime: 0 lastKeystrokes: '' dragStartedSelector: nil PluggableTreeMorph>>wrapRoots: Receiver: a PluggableTreeMorph(3226300) Arguments and temporary variables: someObjects: {SMPackage[15-Puzzle] . SMPackage[3.7 Full Assembler] . SMPackage[...etc... Receiver's instance variables: bounds: 158@93 corner: 305@266 owner: a PluggableSystemWindow(2808457...etc... submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a TransformMorph(3246...etc... fullBounds: 158@93 corner: 305@266 color: Color white extension: a MorphExtension (419193) [locked] [externalName = packagesList ] ...etc... borderWidth: 1 borderColor: (Color r: 0.495 g: 0.495 b: 0.495) model: a SMLoaderPlus slotName: nil open: false scrollBar: a ScrollBar(3352217) scroller: a TransformMorph(3246492) retractableScrollBar: false scrollBarOnLeft: false getMenuSelector: #packagesMenu: getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(2425968) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 selectedMorph: an IndentingListItemMorph(3688549)'(head)' hoveredMorph: nil getListSelector: nil keystrokeActionSelector: nil autoDeselect: true columns: nil columnsCache: #() sortingSelector: nil getSelectionSelector: #selectedItem setSelectionSelector: #selectedItem: potentialDropMorph: nil lineColor: Color veryLightGray font: a StrikeFont(Bitmap DejaVu Sans 9 14) textColor: Color black rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode...etc... selectedWrapper: a PluggableTreeItemNode getRootsSelector: #packageList getChildrenSelector: #itemChildren: hasChildrenSelector: #itemHasChildren: getLabelSelector: #itemLabel: getIconSelector: nil getSelectedPathSelector: #selectedItemPath setSelectedParentSelector: nil getHelpSelector: nil dropItemSelector: nil wantsDropSelector: nil dragItemSelector: nil dragTypeSelector: nil nodeClass: nil lastKeystrokeTime: 0 lastKeystrokes: '' dragStartedSelector: nil PluggableTreeMorph>>update: Receiver: a PluggableTreeMorph(3226300) Arguments and temporary variables: what: #packageList Receiver's instance variables: bounds: 158@93 corner: 305@266 owner: a PluggableSystemWindow(2808457...etc... submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a TransformMorph(3246...etc... fullBounds: 158@93 corner: 305@266 color: Color white extension: a MorphExtension (419193) [locked] [externalName = packagesList ] ...etc... borderWidth: 1 borderColor: (Color r: 0.495 g: 0.495 b: 0.495) model: a SMLoaderPlus slotName: nil open: false scrollBar: a ScrollBar(3352217) scroller: a TransformMorph(3246492) retractableScrollBar: false scrollBarOnLeft: false getMenuSelector: #packagesMenu: getMenuTitleSelector: nil hasFocus: false hScrollBar: a ScrollBar(2425968) hScrollBarPolicy: #whenNeeded vScrollBarPolicy: #whenNeeded scrollBarThickness: 10 selectedMorph: an IndentingListItemMorph(3688549)'(head)' hoveredMorph: nil getListSelector: nil keystrokeActionSelector: nil autoDeselect: true columns: nil columnsCache: #() sortingSelector: nil getSelectionSelector: #selectedItem setSelectionSelector: #selectedItem: potentialDropMorph: nil lineColor: Color veryLightGray font: a StrikeFont(Bitmap DejaVu Sans 9 14) textColor: Color black rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a PluggableTreeItemNode...etc... selectedWrapper: a PluggableTreeItemNode getRootsSelector: #packageList getChildrenSelector: #itemChildren: hasChildrenSelector: #itemHasChildren: getLabelSelector: #itemLabel: getIconSelector: nil getSelectedPathSelector: #selectedItemPath setSelectedParentSelector: nil getHelpSelector: nil dropItemSelector: nil wantsDropSelector: nil dragItemSelector: nil dragTypeSelector: nil nodeClass: nil lastKeystrokeTime: 0 lastKeystrokes: '' dragStartedSelector: nil [] in SMLoaderPlus(Object)>>changed: Receiver: a SMLoaderPlus Arguments and temporary variables: aParameter: a PluggableTreeMorph(3226300) aDependent: #packageList Receiver's instance variables: dependents: a DependentsArray(a PluggableSystemWindow(280845...etc... DependentsArray>>do: Receiver: a DependentsArray(a PluggableSystemWindow(2808457...etc... Arguments and temporary variables: aBlock: [closure] in SMLoaderPlus(Object)>>changed: dep: a PluggableTreeMorph(3226300) i: 12 iLimiT: 14 Receiver's instance variables: a DependentsArray(a PluggableSystemWindow(2808457...etc... SMLoaderPlus(Object)>>changed: Receiver: a SMLoaderPlus Arguments and temporary variables: aParameter: #packageList Receiver's instance variables: dependents: a DependentsArray(a PluggableSystemWindow(280845...etc... SMLoaderPlus>>noteChanged Receiver: a SMLoaderPlus Arguments and temporary variables: Receiver's instance variables: dependents: a DependentsArray(a PluggableSystemWindow(280845...etc... [] in [] in SMLoaderPlus>>installPackageRelease: Receiver: a SMLoaderPlus Arguments and temporary variables: < Receiver's instance variables: dependents: a DependentsArray(a PluggableSystemWindow(280845...etc... [] in MorphicUIManager(UIManager)>>informUser:during: Receiver: a MorphicUIManager Arguments and temporary variables: aString: [closure] in SystemProgressMorph>>position:label:min:max: aBlock: 'Installing ' bar: [closure] in [] in SMLoaderPlus>>installPackageRelease: Receiver's instance variables: builderClass: MorphicToolBuilder [] in [] in MorphicUIManager>>displayProgress:at:from:to:during: Receiver: a MorphicUIManager Arguments and temporary variables: < Receiver's instance variables: builderClass: MorphicToolBuilder BlockClosure>>on:do: Receiver: [closure] in [] in MorphicUIManager>>displayProgress:at:from:to:during: Arguments and temporary variables: exceptionOrExceptionSet: ProgressNotification handlerAction: [closure] in [] in MorphicUIManager>>displayProgress:at:from:to:during:...etc... handlerActive: true Receiver's instance variables: outerContext: [] in MorphicUIManager>>displayProgress:at:from:to:during: startpc: 86 numArgs: 0 --- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #fontIndexOf: StringMorphAttributeScanner>>initializeFromStringMorph: IndentingListItemMorph(StringMorph)>>contents: IndentingListItemMorph(StringMorph)>>initWithContents:font:emphasis: IndentingListItemMorph>>initWithContents:prior:forList:indentLevel: [] in PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel: Array(SequenceableCollection)>>do: PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel: PluggableTreeMorph(SimpleHierarchicalListMorph)>>list: PluggableTreeMorph>>wrapRoots: PluggableTreeMorph>>update: [] in SMLoaderPlus(Object)>>changed: DependentsArray>>do: SMLoaderPlus(Object)>>changed: SMLoaderPlus>>noteChanged [] in [] in SMLoaderPlus>>installPackageRelease: [] in MorphicUIManager(UIManager)>>informUser:during: [] in [] in MorphicUIManager>>displayProgress:at:from:to:during: BlockClosure>>on:do: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [] in MorphicUIManager>>displayProgress:at:from:to:during: BlockClosure>>ensure: MorphicUIManager>>displayProgress:at:from:to:during: ProgressInitiationException>>defaultResumeValue ProgressInitiationException(Exception)>>resume ProgressInitiationException>>defaultAction UndefinedObject>>handleSignal: MethodContext(ContextPart)>>handleSignal: MethodContext(ContextPart)>>handleSignal: ProgressInitiationException(Exception)>>signal ProgressInitiationException>>display:at:from:to:during: ProgressInitiationException class>>display:at:from:to:during: SystemProgressMorph class>>informUserAt:during: MorphicUIManager>>informUserDuring: MorphicUIManager(UIManager)>>informUser:during: [] in SMLoaderPlus>>installPackageRelease: BlockClosure>>on:do: SMLoaderPlus>>installPackageRelease: SMLoaderPlus>>installPackageRelease SMLoaderPlus>>perform:orSendTo: [] in MenuItemMorph>>invokeWithEvent: BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: MenuItemMorph>>invokeWithEvent: MenuItemMorph>>mouseUp: MenuItemMorph>>handleMouseUp: MouseButtonEvent>>sentTo: MenuItemMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: MenuItemMorph(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: MenuMorph(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: MenuMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>doProcessingForFocusEvent:with: MorphicEventDispatcher>>dispatchFocusEventFully:with: -- and more not shown -- From asqueaker at gmail.com Thu Aug 11 01:22:17 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Aug 11 01:23:00 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.358.mcz In-Reply-To: <57aae075.860f370a.d90f4.f5e6SMTPIN_ADDED_MISSING@mx.google.com> References: <57aae075.860f370a.d90f4.f5e6SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Something with the themes is affecting the picture preview. Try Solarized (Dark) and then look at .jpg or .png previews in the FileList -- they are no longer true to the original colors. Best, Chris On Wed, Aug 10, 2016 at 3:05 AM, wrote: > Marcel Taeumel uploaded a new version of Graphics to project The Trunk: > http://source.squeak.org/trunk/Graphics-mt.358.mcz > > ==================== Summary ==================== > > Name: Graphics-mt.358 > Author: mt > Time: 10 August 2016, 10:05:35.189696 am > UUID: fe4bd6ca-d161-bf4c-b0b9-8fd1812d38a8 > Ancestors: Graphics-mt.357 > > Fixes regression in FileList graphics preview, which expects a certain callback in a certain file service. *sigh* I guess to also assume a certain type of result. *double-sigh* > > See FileList >> #isGraphicsFileSelected. > > =============== Diff against Graphics-mt.357 =============== > > Item was added: > + ----- Method: Form class>>serviceImageImportAndShowImports (in category 'file list services') ----- > + serviceImageImportAndShowImports > + "Answer a service for reading a graphic into ImageImports" > + > + ^ SimpleServiceEntry > + provider: self > + label: 'read graphic into and show ImageImports' > + selector: #importImageAndShowImports: > + description: 'Load a graphic, placing it in the ImageImports repository and browse that repository.' > + buttonLabel: 'import'! > > Item was changed: > ----- Method: Form class>>serviceImageImports (in category 'file list services') ----- > serviceImageImports > "Answer a service for reading a graphic into ImageImports" > > ^ SimpleServiceEntry > provider: self > label: 'read graphic into ImageImports' > + selector: #importImage: > - selector: #importImageAndShowImports: > description: 'Load a graphic, placing it in the ImageImports repository.' > buttonLabel: 'import'! > > Item was changed: > ----- Method: Form class>>services (in category 'file list services') ----- > services > > ^ Array > with: self serviceImageImports > + with: self serviceImageImportAndShowImports > with: self serviceOpenImageInWindow > with: self serviceImageAsBackground ! > > From Marcel.Taeumel at hpi.de Thu Aug 11 06:31:33 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 06:31:37 2016 Subject: [squeak-dev] Re: The Trunk: Graphics-mt.358.mcz In-Reply-To: References: Message-ID: <1470897093624-4910404.post@n4.nabble.com> Chris Muller-3 wrote > Something with the themes is affecting the picture preview. Try > Solarized (Dark) and then look at .jpg or .png previews in the > FileList -- they are no longer true to the original colors. > > Best, > Chris > > On Wed, Aug 10, 2016 at 3:05 AM, < > commits@.squeak > > wrote: >> Marcel Taeumel uploaded a new version of Graphics to project The Trunk: >> http://source.squeak.org/trunk/Graphics-mt.358.mcz >> >> ==================== Summary ==================== >> >> Name: Graphics-mt.358 >> Author: mt >> Time: 10 August 2016, 10:05:35.189696 am >> UUID: fe4bd6ca-d161-bf4c-b0b9-8fd1812d38a8 >> Ancestors: Graphics-mt.357 >> >> Fixes regression in FileList graphics preview, which expects a certain >> callback in a certain file service. *sigh* I guess to also assume a >> certain type of result. *double-sigh* >> >> See FileList >> #isGraphicsFileSelected. >> >> =============== Diff against Graphics-mt.357 =============== >> >> Item was added: >> + ----- Method: Form class>>serviceImageImportAndShowImports (in category >> 'file list services') ----- >> + serviceImageImportAndShowImports >> + "Answer a service for reading a graphic into ImageImports" >> + >> + ^ SimpleServiceEntry >> + provider: self >> + label: 'read graphic into and show ImageImports' >> + selector: #importImageAndShowImports: >> + description: 'Load a graphic, placing it in the >> ImageImports repository and browse that repository.' >> + buttonLabel: 'import'! >> >> Item was changed: >> ----- Method: Form class>>serviceImageImports (in category 'file list >> services') ----- >> serviceImageImports >> "Answer a service for reading a graphic into ImageImports" >> >> ^ SimpleServiceEntry >> provider: self >> label: 'read graphic into ImageImports' >> + selector: #importImage: >> - selector: #importImageAndShowImports: >> description: 'Load a graphic, placing it in the >> ImageImports repository.' >> buttonLabel: 'import'! >> >> Item was changed: >> ----- Method: Form class>>services (in category 'file list services') >> ----- >> services >> >> ^ Array >> with: self serviceImageImports >> + with: self serviceImageImportAndShowImports >> with: self serviceOpenImageInWindow >> with: self serviceImageAsBackground ! >> >> Hmm... that kind of picture preview uses a FormSetFont to render a space character differently. Well, of course, fonts get (sometimes) colorized during the rendnering pass. Syntax highlighting is an example. I think we should only use "outline forms" (like the ones from fontawesome.com) in such FormSetFonts, which can easily be colorized. Let's see if we find another way to render forms using regular TextAttributes. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Graphics-mt-358-mcz-tp4910292p4910404.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Aug 11 06:52:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 06:52:20 2016 Subject: [squeak-dev] The Trunk: System-mt.877.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.877.mcz ==================== Summary ==================== Name: System-mt.877 Author: mt Time: 11 August 2016, 8:51:55.609217 am UUID: 6401282c-0ac4-7743-bacf-1d57f8bd2755 Ancestors: System-cmm.876 Fixes two bugs in language translation. One prevents an infinite loop, the other avoids the creation of instances of the abstract class NaturalLanguageTranslator. Fall-back to the internal translator instead. Thanks to Tim (F.) ! =============== Diff against System-cmm.876 =============== Item was changed: ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- localeChangedGently + SystemNavigation default allBehaviorsDo: [:b | b == self ifFalse: [b localeChangedGently]].! - self class environment allBehaviorsDo: [:b | b localeChangedGently].! Item was changed: ----- Method: NaturalLanguageTranslator class>>default (in category 'accessing') ----- default "Answer translator for backstop" "self default translate: 'test'" + ^ (self == NaturalLanguageTranslator ifTrue: [InternalTranslator] ifFalse: [self]) new - ^ self new localeID: (LocaleID isoLanguage: 'en')! From commits at source.squeak.org Thu Aug 11 06:55:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 06:55:29 2016 Subject: [squeak-dev] The Trunk: CommandLine-mt.7.mcz Message-ID: Marcel Taeumel uploaded a new version of CommandLine to project The Trunk: http://source.squeak.org/trunk/CommandLine-mt.7.mcz ==================== Summary ==================== Name: CommandLine-mt.7 Author: mt Time: 11 August 2016, 8:55:24.442217 am UUID: ba6ecf51-2a74-cb4a-86d9-988593d5ad73 Ancestors: CommandLine-mt.6 Fixes small bug in DummyUIManager, which is used during automated generation of release artifacts. =============== Diff against CommandLine-mt.6 =============== Item was changed: ----- Method: DummyUIManager>>informUserDuring: (in category 'ui requests') ----- informUserDuring: aBlock + aBlock value: Association new.! - aBlock value: nil! From commits at source.squeak.org Thu Aug 11 07:24:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 07:24:23 2016 Subject: [squeak-dev] The Trunk: ST80-mt.215.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.215.mcz ==================== Summary ==================== Name: ST80-mt.215 Author: mt Time: 11 August 2016, 9:24:11.262217 am UUID: 5df1fbbb-72c0-264c-92d5-08f46f22883f Ancestors: ST80-mt.214 Fixes bug when generating accessors for MVC menus to spawn other kinds of projects. (Actually, it is strange that extension categories do not remove spaces after the package names ...) =============== Diff against ST80-mt.214 =============== Item was changed: ----- Method: ScreenController>>ensureProjectAccessors (in category 'menu messages') ----- ensureProjectAccessors Project allSubclassesDo: [:cls | (self respondsTo: (#open, cls name) asSymbol) ifFalse: [self class + compile: ('open{1}\ Smalltalk at: #{1} ifPresent: [:p | ProjectView open: p new]' withCRs format: {cls name}) classified: '*autogenerated-project accessors']].! - compile: ('open{1}\ Smalltalk at: #{1} ifPresent: [:p | ProjectView open: p new]' withCRs format: {cls name}) classified: '*autogenerated - project accessors']].! Item was changed: (PackageInfo named: 'ST80') postscript: '"below, add code to be run after the loading of this package" + ParagraphEditor initialize. "again" + (MCPackage named: ''Autogenerated '') unload. + (MCPackage named: ''Autogenerated'') unload.'! - ParagraphEditor initialize. "again"'! From commits at source.squeak.org Thu Aug 11 08:19:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 08:19:39 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.360.mcz Message-ID: Marcel Taeumel uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-mt.360.mcz ==================== Summary ==================== Name: Graphics-mt.360 Author: mt Time: 11 August 2016, 10:19:06.876217 am UUID: b5ad28c3-00b3-7240-bf21-b21a8daa73ee Ancestors: Graphics-mt.359 Fixes a bug with FormSetFont, which got colorized inadvertently. Support several options via an extended interface. While there might be the case where we want to colorize the glyphs, do not do it by default. People used to use it to add images into Text because our TextAnchor attribute it not useful for that. =============== Diff against Graphics-mt.359 =============== Item was changed: StrikeFont subclass: #FormSetFont + instanceVariableNames: 'tintable combinationRule' - instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Graphics-Fonts'! !FormSetFont commentStamp: '' prior: 0! FormSetFonts are designed to capture individual images as character forms for imbedding in normal text. While most often used to insert an isolated glyph in some text, the code is actually desinged to support an entire user-defined font. The TextAttribute subclass TextFontReference is specifically designed for such in-line insertion of exceptional fonts in normal text.! Item was added: + ----- Method: FormSetFont>>combinationRule (in category 'accessing') ----- + combinationRule + + ^ combinationRule! Item was added: + ----- Method: FormSetFont>>combinationRule: (in category 'accessing') ----- + combinationRule: anObject + + combinationRule := anObject! Item was added: + ----- Method: FormSetFont>>displayString:on:from:to:at:kern: (in category 'as yet unclassified') ----- + displayString: aString on: aBitBlt from: startIndex to: stopIndex at: aPoint kern: kernDelta + "Draw the given string from startIndex to stopIndex " + + combinationRule ifNotNil: [:r | aBitBlt combinationRule: r]. + tintable == false ifTrue: [aBitBlt colorMap: nil]. + + ^ super displayString: aString on: aBitBlt from: startIndex to: stopIndex at: aPoint kern: kernDelta! Item was added: + ----- Method: FormSetFont>>initialize (in category 'as yet unclassified') ----- + initialize + + super initialize. + self preserveColors.! Item was added: + ----- Method: FormSetFont>>makeTintable (in category 'as yet unclassified') ----- + makeTintable + "Default." + + self tintable: true. + self combinationRule: Form over.! Item was added: + ----- Method: FormSetFont>>preserveColors (in category 'as yet unclassified') ----- + preserveColors + + self tintable: false. + self combinationRule: Form paint.! Item was added: + ----- Method: FormSetFont>>preserveColorsWithAlpha (in category 'as yet unclassified') ----- + preserveColorsWithAlpha + "Useful for rendering Emojis." + + self tintable: false. + self combinationRule: Form blend.! Item was added: + ----- Method: FormSetFont>>tintable (in category 'accessing') ----- + tintable + + ^ tintable! Item was added: + ----- Method: FormSetFont>>tintable: (in category 'accessing') ----- + tintable: anObject + + tintable := anObject! From Marcel.Taeumel at hpi.de Thu Aug 11 08:20:29 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 08:20:33 2016 Subject: [squeak-dev] Re: The Trunk: Graphics-mt.358.mcz In-Reply-To: <1470897093624-4910404.post@n4.nabble.com> References: <1470897093624-4910404.post@n4.nabble.com> Message-ID: <1470903629939-4910413.post@n4.nabble.com> marcel.taeumel wrote > > Chris Muller-3 wrote >> Something with the themes is affecting the picture preview. Try >> Solarized (Dark) and then look at .jpg or .png previews in the >> FileList -- they are no longer true to the original colors. >> >> Best, >> Chris >> >> On Wed, Aug 10, 2016 at 3:05 AM, < >> commits@.squeak >> > wrote: >>> Marcel Taeumel uploaded a new version of Graphics to project The Trunk: >>> http://source.squeak.org/trunk/Graphics-mt.358.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Graphics-mt.358 >>> Author: mt >>> Time: 10 August 2016, 10:05:35.189696 am >>> UUID: fe4bd6ca-d161-bf4c-b0b9-8fd1812d38a8 >>> Ancestors: Graphics-mt.357 >>> >>> Fixes regression in FileList graphics preview, which expects a certain >>> callback in a certain file service. *sigh* I guess to also assume a >>> certain type of result. *double-sigh* >>> >>> See FileList >> #isGraphicsFileSelected. >>> >>> =============== Diff against Graphics-mt.357 =============== >>> >>> Item was added: >>> + ----- Method: Form class>>serviceImageImportAndShowImports (in >>> category 'file list services') ----- >>> + serviceImageImportAndShowImports >>> + "Answer a service for reading a graphic into ImageImports" >>> + >>> + ^ SimpleServiceEntry >>> + provider: self >>> + label: 'read graphic into and show ImageImports' >>> + selector: #importImageAndShowImports: >>> + description: 'Load a graphic, placing it in the >>> ImageImports repository and browse that repository.' >>> + buttonLabel: 'import'! >>> >>> Item was changed: >>> ----- Method: Form class>>serviceImageImports (in category 'file list >>> services') ----- >>> serviceImageImports >>> "Answer a service for reading a graphic into ImageImports" >>> >>> ^ SimpleServiceEntry >>> provider: self >>> label: 'read graphic into ImageImports' >>> + selector: #importImage: >>> - selector: #importImageAndShowImports: >>> description: 'Load a graphic, placing it in the >>> ImageImports repository.' >>> buttonLabel: 'import'! >>> >>> Item was changed: >>> ----- Method: Form class>>services (in category 'file list services') >>> ----- >>> services >>> >>> ^ Array >>> with: self serviceImageImports >>> + with: self serviceImageImportAndShowImports >>> with: self serviceOpenImageInWindow >>> with: self serviceImageAsBackground ! >>> >>> > Hmm... that kind of picture preview uses a FormSetFont to render a space > character differently. Well, of course, fonts get (sometimes) colorized > during the rendnering pass. Syntax highlighting is an example. I think we > should only use "outline forms" (like the ones from fontawesome.com) in > such FormSetFonts, which can easily be colorized. > > Let's see if we find another way to render forms using regular > TextAttributes. > > Best, > Marcel Fixed: http://forum.world.st/The-Trunk-Graphics-mt-360-mcz-td4910411.html Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Graphics-mt-358-mcz-tp4910292p4910413.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Aug 11 08:34:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 08:34:21 2016 Subject: [squeak-dev] The Trunk: Tools-mt.713.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.713.mcz ==================== Summary ==================== Name: Tools-mt.713 Author: mt Time: 11 August 2016, 10:33:57.164968 am UUID: fe28f870-3f1e-4c4f-82fd-8aad483115f2 Ancestors: Tools-mt.712 Fix Morphic dependency for Morphics window reusing mechanism. Tools should also work from within MVC. =============== Diff against Tools-mt.712 =============== Item was added: + ----- Method: DependencyBrowser>>representsSameBrowseeAs: (in category 'morphic ui') ----- + representsSameBrowseeAs: anotherModel + ^ self hasUnacceptedEdits not! From commits at source.squeak.org Thu Aug 11 08:35:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 08:35:54 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1257.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1257.mcz ==================== Summary ==================== Name: Morphic-mt.1257 Author: mt Time: 11 August 2016, 10:35:14.255968 am UUID: 568c11f3-2668-404f-8f39-1304fc34c83e Ancestors: Morphic-cmm.1256 Fixes a bug that occured when updating tree morphs (such as in the SqueakMap catalog). =============== Diff against Morphic-cmm.1256 =============== Item was removed: - ----- Method: DependencyBrowser>>representsSameBrowseeAs: (in category '*morphic') ----- - representsSameBrowseeAs: anotherModel - ^ self hasUnacceptedEdits not! Item was changed: ----- Method: StringMorphAttributeScanner>>initializeFromStringMorph: (in category 'string morph') ----- initializeFromStringMorph: aStringMorph + - | style | actualFont := aStringMorph font ifNil: [ TextStyle defaultFont ]. - style := actualFont textStyle. emphasis := actualFont emphasis. + fontNumber := (actualFont textStyle ifNotNil: [:style | style fontIndexOf: actualFont]) ifNil: [ 1 ]. - fontNumber := (style fontIndexOf: actualFont) ifNil: [ 1 ]. textColor := aStringMorph color. ! From Marcel.Taeumel at hpi.de Thu Aug 11 08:37:09 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 08:37:13 2016 Subject: [squeak-dev] Re: Some kind of missing font problem... In-Reply-To: References: Message-ID: <1470904629649-4910420.post@n4.nabble.com> Chris Muller-4 wrote > There is some problem with the progress bar or font renderings or > something while trying to install Magma from SqueakMap. Stack below. > To reproduce: > > 1) Launch up Squeak5.1beta-16336-32bit.image (using Eliots latest VM). > 2) Open SqueakMap catalog. In package list, unselect "New > safely-available packages". > 3) Find "Magma" in the list. > 4) Yellow-click the (head) version, then select "Install". > > At some point, the load process ends up sending #changed: to the > SMLoaderPlus model, which ultimately leads to the font access issue. > > Best, > Chris > > ============== > > From: sdf > To: > squeak-dev@.squeakfoundation > Subject: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #fontIndexOf: > > here insert explanation of what you were doing, suspect changes you've > made and so forth. > > 10 August 2016 5:58:07.849777 pm > > VM: unix - Smalltalk > Image: Squeak5.1beta [latest update: #16336] > > SecurityManager state: > Restricted: false > FileAccess: true > SocketAccess: true > > UndefinedObject(Object)>>doesNotUnderstand: #fontIndexOf: > Receiver: nil > Arguments and temporary variables: > aMessage: fontIndexOf: a StrikeFont(Bitmap DejaVu Sans 9 14) > exception: MessageNotUnderstood: UndefinedObject>>fontIndexOf: > resumeValue: nil > Receiver's instance variables: > nil > > StringMorphAttributeScanner>>initializeFromStringMorph: > Receiver: a StringMorphAttributeScanner > Arguments and temporary variables: > aStringMorph: an IndentingListItemMorph(1603409)nil > style: nil > Receiver's instance variables: > fontNumber: 1 > textColor: nil > emphasis: 0 > alignment: nil > actualFont: a StrikeFont(Bitmap DejaVu Sans 9 14) > indent: 0 > kern: 0 > > IndentingListItemMorph(StringMorph)>>contents: > Receiver: an IndentingListItemMorph(1603409)nil > Arguments and temporary variables: > newContents: a Text for 'Ma client server ((head))' > scanner: nil > Receiver's instance variables: > bounds: 0@0 corner: 50@40 > owner: nil > submorphs: #() > fullBounds: nil > color: nil > extension: nil > font: a StrikeFont(Bitmap DejaVu Sans 9 14) > emphasis: nil > contents: nil > hasFocus: false > indentLevel: nil > isExpanded: nil > complexContents: a PluggableTreeItemNode > firstChild: nil > container: a PluggableTreeMorph > > (3226300) > nextSibling: nil > icon: nil > backgroundColor: nil > > IndentingListItemMorph(StringMorph)>>initWithContents:font:emphasis: > Receiver: an IndentingListItemMorph(1603409)nil > Arguments and temporary variables: > aString: a Text for 'Ma client server ((head))' > aFont: a StrikeFont(Bitmap DejaVu Sans 9 14) > emphasisCode: nil > Receiver's instance variables: > bounds: 0@0 corner: 50@40 > owner: nil > submorphs: #() > fullBounds: nil > color: nil > extension: nil > font: a StrikeFont(Bitmap DejaVu Sans 9 14) > emphasis: nil > contents: nil > hasFocus: false > indentLevel: nil > isExpanded: nil > complexContents: a PluggableTreeItemNode > firstChild: nil > container: a PluggableTreeMorph > > (3226300) > nextSibling: nil > icon: nil > backgroundColor: nil > > IndentingListItemMorph>>initWithContents:prior:forList:indentLevel: > Receiver: an IndentingListItemMorph(1603409)nil > Arguments and temporary variables: > anObject: a PluggableTreeItemNode > priorMorph: an IndentingListItemMorph(2588928)'Lucy Font Set' > hostList: a PluggableTreeMorph > > (3226300) > newLevel: 0 > Receiver's instance variables: > bounds: 0@0 corner: 50@40 > owner: nil > submorphs: #() > fullBounds: nil > color: nil > extension: nil > font: a StrikeFont(Bitmap DejaVu Sans 9 14) > emphasis: nil > contents: nil > hasFocus: false > indentLevel: nil > isExpanded: nil > complexContents: a PluggableTreeItemNode > firstChild: nil > container: a PluggableTreeMorph > > (3226300) > nextSibling: nil > icon: nil > backgroundColor: nil > > [] in > PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel: > Receiver: a PluggableTreeMorph > > (3226300) > Arguments and temporary variables: > < > > Receiver's instance variables: > bounds: 158@93 corner: 305@266 > owner: a PluggableSystemWindow > packages)> > (2808457...etc... > submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a > TransformMorph(3246...etc... > fullBounds: 158@93 corner: 305@266 > color: Color white > extension: a MorphExtension (419193) [locked] [externalName = > packagesList ] ...etc... > borderWidth: 1 > borderColor: (Color r: 0.495 g: 0.495 b: 0.495) > model: a SMLoaderPlus > slotName: nil > open: false > scrollBar: a ScrollBar(3352217) > scroller: a TransformMorph(3246492) > retractableScrollBar: false > scrollBarOnLeft: false > getMenuSelector: #packagesMenu: > getMenuTitleSelector: nil > hasFocus: false > hScrollBar: a ScrollBar(2425968) > hScrollBarPolicy: #whenNeeded > vScrollBarPolicy: #whenNeeded > scrollBarThickness: 10 > selectedMorph: an IndentingListItemMorph(3688549)'(head)' > hoveredMorph: nil > getListSelector: nil > keystrokeActionSelector: nil > autoDeselect: true > columns: nil > columnsCache: #() > sortingSelector: nil > getSelectionSelector: #selectedItem > setSelectionSelector: #selectedItem: > potentialDropMorph: nil > lineColor: Color veryLightGray > font: a StrikeFont(Bitmap DejaVu Sans 9 14) > textColor: Color black > rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a > PluggableTreeItemNode...etc... > selectedWrapper: a PluggableTreeItemNode > getRootsSelector: #packageList > getChildrenSelector: #itemChildren: > hasChildrenSelector: #itemHasChildren: > getLabelSelector: #itemLabel: > getIconSelector: nil > getSelectedPathSelector: #selectedItemPath > setSelectedParentSelector: nil > getHelpSelector: nil > dropItemSelector: nil > wantsDropSelector: nil > dragItemSelector: nil > dragTypeSelector: nil > nodeClass: nil > lastKeystrokeTime: 0 > lastKeystrokes: '' > dragStartedSelector: nil > > Array(SequenceableCollection)>>do: > Receiver: {a PluggableTreeItemNode . a PluggableTreeItemNode . a > PluggableTreeItemNode . a PluggableTreeItemNode...etc... > Arguments and temporary variables: > aBlock: [closure] in > PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel:...etc... > index: 329 > indexLimiT: 800 > Receiver's instance variables: > {a PluggableTreeItemNode . a PluggableTreeItemNode . a > PluggableTreeItemNode . a PluggableTreeItemNode...etc... > > PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel: > Receiver: a PluggableTreeMorph > > (3226300) > Arguments and temporary variables: > < > > Receiver's instance variables: > bounds: 158@93 corner: 305@266 > owner: a PluggableSystemWindow > packages)> > (2808457...etc... > submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a > TransformMorph(3246...etc... > fullBounds: 158@93 corner: 305@266 > color: Color white > extension: a MorphExtension (419193) [locked] [externalName = > packagesList ] ...etc... > borderWidth: 1 > borderColor: (Color r: 0.495 g: 0.495 b: 0.495) > model: a SMLoaderPlus > slotName: nil > open: false > scrollBar: a ScrollBar(3352217) > scroller: a TransformMorph(3246492) > retractableScrollBar: false > scrollBarOnLeft: false > getMenuSelector: #packagesMenu: > getMenuTitleSelector: nil > hasFocus: false > hScrollBar: a ScrollBar(2425968) > hScrollBarPolicy: #whenNeeded > vScrollBarPolicy: #whenNeeded > scrollBarThickness: 10 > selectedMorph: an IndentingListItemMorph(3688549)'(head)' > hoveredMorph: nil > getListSelector: nil > keystrokeActionSelector: nil > autoDeselect: true > columns: nil > columnsCache: #() > sortingSelector: nil > getSelectionSelector: #selectedItem > setSelectionSelector: #selectedItem: > potentialDropMorph: nil > lineColor: Color veryLightGray > font: a StrikeFont(Bitmap DejaVu Sans 9 14) > textColor: Color black > rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a > PluggableTreeItemNode...etc... > selectedWrapper: a PluggableTreeItemNode > getRootsSelector: #packageList > getChildrenSelector: #itemChildren: > hasChildrenSelector: #itemHasChildren: > getLabelSelector: #itemLabel: > getIconSelector: nil > getSelectedPathSelector: #selectedItemPath > setSelectedParentSelector: nil > getHelpSelector: nil > dropItemSelector: nil > wantsDropSelector: nil > dragItemSelector: nil > dragTypeSelector: nil > nodeClass: nil > lastKeystrokeTime: 0 > lastKeystrokes: '' > dragStartedSelector: nil > > PluggableTreeMorph(SimpleHierarchicalListMorph)>>list: > Receiver: a PluggableTreeMorph > > (3226300) > Arguments and temporary variables: > aCollection: {a PluggableTreeItemNode . a PluggableTreeItemNode . a > PluggableTreeItemNode...etc... > wereExpanded: {a PluggableTreeItemNode} > morphList: an OrderedCollection(an > IndentingListItemMorph(1027512)'15-Puzzle' a...etc... > Receiver's instance variables: > bounds: 158@93 corner: 305@266 > owner: a PluggableSystemWindow > packages)> > (2808457...etc... > submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a > TransformMorph(3246...etc... > fullBounds: 158@93 corner: 305@266 > color: Color white > extension: a MorphExtension (419193) [locked] [externalName = > packagesList ] ...etc... > borderWidth: 1 > borderColor: (Color r: 0.495 g: 0.495 b: 0.495) > model: a SMLoaderPlus > slotName: nil > open: false > scrollBar: a ScrollBar(3352217) > scroller: a TransformMorph(3246492) > retractableScrollBar: false > scrollBarOnLeft: false > getMenuSelector: #packagesMenu: > getMenuTitleSelector: nil > hasFocus: false > hScrollBar: a ScrollBar(2425968) > hScrollBarPolicy: #whenNeeded > vScrollBarPolicy: #whenNeeded > scrollBarThickness: 10 > selectedMorph: an IndentingListItemMorph(3688549)'(head)' > hoveredMorph: nil > getListSelector: nil > keystrokeActionSelector: nil > autoDeselect: true > columns: nil > columnsCache: #() > sortingSelector: nil > getSelectionSelector: #selectedItem > setSelectionSelector: #selectedItem: > potentialDropMorph: nil > lineColor: Color veryLightGray > font: a StrikeFont(Bitmap DejaVu Sans 9 14) > textColor: Color black > rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a > PluggableTreeItemNode...etc... > selectedWrapper: a PluggableTreeItemNode > getRootsSelector: #packageList > getChildrenSelector: #itemChildren: > hasChildrenSelector: #itemHasChildren: > getLabelSelector: #itemLabel: > getIconSelector: nil > getSelectedPathSelector: #selectedItemPath > setSelectedParentSelector: nil > getHelpSelector: nil > dropItemSelector: nil > wantsDropSelector: nil > dragItemSelector: nil > dragTypeSelector: nil > nodeClass: nil > lastKeystrokeTime: 0 > lastKeystrokes: '' > dragStartedSelector: nil > > PluggableTreeMorph>>wrapRoots: > Receiver: a PluggableTreeMorph > > (3226300) > Arguments and temporary variables: > someObjects: {SMPackage[15-Puzzle] . SMPackage[3.7 Full Assembler] . > SMPackage[...etc... > Receiver's instance variables: > bounds: 158@93 corner: 305@266 > owner: a PluggableSystemWindow > packages)> > (2808457...etc... > submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a > TransformMorph(3246...etc... > fullBounds: 158@93 corner: 305@266 > color: Color white > extension: a MorphExtension (419193) [locked] [externalName = > packagesList ] ...etc... > borderWidth: 1 > borderColor: (Color r: 0.495 g: 0.495 b: 0.495) > model: a SMLoaderPlus > slotName: nil > open: false > scrollBar: a ScrollBar(3352217) > scroller: a TransformMorph(3246492) > retractableScrollBar: false > scrollBarOnLeft: false > getMenuSelector: #packagesMenu: > getMenuTitleSelector: nil > hasFocus: false > hScrollBar: a ScrollBar(2425968) > hScrollBarPolicy: #whenNeeded > vScrollBarPolicy: #whenNeeded > scrollBarThickness: 10 > selectedMorph: an IndentingListItemMorph(3688549)'(head)' > hoveredMorph: nil > getListSelector: nil > keystrokeActionSelector: nil > autoDeselect: true > columns: nil > columnsCache: #() > sortingSelector: nil > getSelectionSelector: #selectedItem > setSelectionSelector: #selectedItem: > potentialDropMorph: nil > lineColor: Color veryLightGray > font: a StrikeFont(Bitmap DejaVu Sans 9 14) > textColor: Color black > rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a > PluggableTreeItemNode...etc... > selectedWrapper: a PluggableTreeItemNode > getRootsSelector: #packageList > getChildrenSelector: #itemChildren: > hasChildrenSelector: #itemHasChildren: > getLabelSelector: #itemLabel: > getIconSelector: nil > getSelectedPathSelector: #selectedItemPath > setSelectedParentSelector: nil > getHelpSelector: nil > dropItemSelector: nil > wantsDropSelector: nil > dragItemSelector: nil > dragTypeSelector: nil > nodeClass: nil > lastKeystrokeTime: 0 > lastKeystrokes: '' > dragStartedSelector: nil > > PluggableTreeMorph>>update: > Receiver: a PluggableTreeMorph > > (3226300) > Arguments and temporary variables: > what: #packageList > Receiver's instance variables: > bounds: 158@93 corner: 305@266 > owner: a PluggableSystemWindow > packages)> > (2808457...etc... > submorphs: {a ScrollBar(2425968) . a ScrollBar(3352217) . a > TransformMorph(3246...etc... > fullBounds: 158@93 corner: 305@266 > color: Color white > extension: a MorphExtension (419193) [locked] [externalName = > packagesList ] ...etc... > borderWidth: 1 > borderColor: (Color r: 0.495 g: 0.495 b: 0.495) > model: a SMLoaderPlus > slotName: nil > open: false > scrollBar: a ScrollBar(3352217) > scroller: a TransformMorph(3246492) > retractableScrollBar: false > scrollBarOnLeft: false > getMenuSelector: #packagesMenu: > getMenuTitleSelector: nil > hasFocus: false > hScrollBar: a ScrollBar(2425968) > hScrollBarPolicy: #whenNeeded > vScrollBarPolicy: #whenNeeded > scrollBarThickness: 10 > selectedMorph: an IndentingListItemMorph(3688549)'(head)' > hoveredMorph: nil > getListSelector: nil > keystrokeActionSelector: nil > autoDeselect: true > columns: nil > columnsCache: #() > sortingSelector: nil > getSelectionSelector: #selectedItem > setSelectionSelector: #selectedItem: > potentialDropMorph: nil > lineColor: Color veryLightGray > font: a StrikeFont(Bitmap DejaVu Sans 9 14) > textColor: Color black > rootWrappers: {a PluggableTreeItemNode . a PluggableTreeItemNode . a > PluggableTreeItemNode...etc... > selectedWrapper: a PluggableTreeItemNode > getRootsSelector: #packageList > getChildrenSelector: #itemChildren: > hasChildrenSelector: #itemHasChildren: > getLabelSelector: #itemLabel: > getIconSelector: nil > getSelectedPathSelector: #selectedItemPath > setSelectedParentSelector: nil > getHelpSelector: nil > dropItemSelector: nil > wantsDropSelector: nil > dragItemSelector: nil > dragTypeSelector: nil > nodeClass: nil > lastKeystrokeTime: 0 > lastKeystrokes: '' > dragStartedSelector: nil > > [] in SMLoaderPlus(Object)>>changed: > Receiver: a SMLoaderPlus > Arguments and temporary variables: > aParameter: a PluggableTreeMorph > > (3226300) > aDependent: #packageList > Receiver's instance variables: > dependents: a DependentsArray(a PluggableSystemWindow<SqueakMap > Package Loader ...etc... > packagesList: {SMPackage[15-Puzzle] . SMPackage[3.7 Full Assembler] . > SMPackage...etc... > selectedItem: SMPackageRelease[Magma 2-head] > selectedCategory: nil > filters: #() > categoriesToFilterIds: an OrderedCollection() > map: a SMSqueakMap > builder: a MorphicToolBuilder > window: a PluggableSystemWindow<SqueakMap Package Loader (800 > packages)>(280845...etc... > > DependentsArray>>do: > Receiver: a DependentsArray(a PluggableSystemWindow > Loader (800 packages)> > (2808457...etc... > Arguments and temporary variables: > aBlock: [closure] in SMLoaderPlus(Object)>>changed: > dep: a PluggableTreeMorph > > (3226300) > i: 12 > iLimiT: 14 > Receiver's instance variables: > a DependentsArray(a PluggableSystemWindow > (800 packages)> > (2808457...etc... > > SMLoaderPlus(Object)>>changed: > Receiver: a SMLoaderPlus > Arguments and temporary variables: > aParameter: #packageList > Receiver's instance variables: > dependents: a DependentsArray(a PluggableSystemWindow<SqueakMap > Package Loader ...etc... > packagesList: {SMPackage[15-Puzzle] . SMPackage[3.7 Full Assembler] . > SMPackage...etc... > selectedItem: SMPackageRelease[Magma 2-head] > selectedCategory: nil > filters: #() > categoriesToFilterIds: an OrderedCollection() > map: a SMSqueakMap > builder: a MorphicToolBuilder > window: a PluggableSystemWindow<SqueakMap Package Loader (800 > packages)>(280845...etc... > > SMLoaderPlus>>noteChanged > Receiver: a SMLoaderPlus > Arguments and temporary variables: > > Receiver's instance variables: > dependents: a DependentsArray(a PluggableSystemWindow<SqueakMap > Package Loader ...etc... > packagesList: {SMPackage[15-Puzzle] . SMPackage[3.7 Full Assembler] . > SMPackage...etc... > selectedItem: SMPackageRelease[Magma 2-head] > selectedCategory: nil > filters: #() > categoriesToFilterIds: an OrderedCollection() > map: a SMSqueakMap > builder: a MorphicToolBuilder > window: a PluggableSystemWindow<SqueakMap Package Loader (800 > packages)>(280845...etc... > > [] in [] in SMLoaderPlus>>installPackageRelease: > Receiver: a SMLoaderPlus > Arguments and temporary variables: > < > > Receiver's instance variables: > dependents: a DependentsArray(a PluggableSystemWindow<SqueakMap > Package Loader ...etc... > packagesList: {SMPackage[15-Puzzle] . SMPackage[3.7 Full Assembler] . > SMPackage...etc... > selectedItem: SMPackageRelease[Magma 2-head] > selectedCategory: nil > filters: #() > categoriesToFilterIds: an OrderedCollection() > map: a SMSqueakMap > builder: a MorphicToolBuilder > window: a PluggableSystemWindow<SqueakMap Package Loader (800 > packages)>(280845...etc... > > [] in MorphicUIManager(UIManager)>>informUser:during: > Receiver: a MorphicUIManager > Arguments and temporary variables: > aString: [closure] in SystemProgressMorph>>position:label:min:max: > aBlock: 'Installing ' > bar: [closure] in [] in SMLoaderPlus>>installPackageRelease: > Receiver's instance variables: > builderClass: MorphicToolBuilder > > [] in [] in MorphicUIManager>>displayProgress:at:from:to:during: > Receiver: a MorphicUIManager > Arguments and temporary variables: > < > > Receiver's instance variables: > builderClass: MorphicToolBuilder > > BlockClosure>>on:do: > Receiver: [closure] in [] in > MorphicUIManager>>displayProgress:at:from:to:during: > Arguments and temporary variables: > exceptionOrExceptionSet: ProgressNotification > handlerAction: [closure] in [] in > MorphicUIManager>>displayProgress:at:from:to:during:...etc... > handlerActive: true > Receiver's instance variables: > outerContext: [] in MorphicUIManager>>displayProgress:at:from:to:during: > startpc: 86 > numArgs: 0 > > > --- The full stack --- > UndefinedObject(Object)>>doesNotUnderstand: #fontIndexOf: > StringMorphAttributeScanner>>initializeFromStringMorph: > IndentingListItemMorph(StringMorph)>>contents: > IndentingListItemMorph(StringMorph)>>initWithContents:font:emphasis: > IndentingListItemMorph>>initWithContents:prior:forList:indentLevel: > [] in > PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel: > Array(SequenceableCollection)>>do: > PluggableTreeMorph(SimpleHierarchicalListMorph)>>addMorphsTo:from:allowSorting:withExpandedItems:atLevel: > PluggableTreeMorph(SimpleHierarchicalListMorph)>>list: > PluggableTreeMorph>>wrapRoots: > PluggableTreeMorph>>update: > [] in SMLoaderPlus(Object)>>changed: > DependentsArray>>do: > SMLoaderPlus(Object)>>changed: > SMLoaderPlus>>noteChanged > [] in [] in SMLoaderPlus>>installPackageRelease: > [] in MorphicUIManager(UIManager)>>informUser:during: > [] in [] in MorphicUIManager>>displayProgress:at:from:to:during: > BlockClosure>>on:do: > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > [] in MorphicUIManager>>displayProgress:at:from:to:during: > BlockClosure>>ensure: > MorphicUIManager>>displayProgress:at:from:to:during: > ProgressInitiationException>>defaultResumeValue > ProgressInitiationException(Exception)>>resume > ProgressInitiationException>>defaultAction > UndefinedObject>>handleSignal: > MethodContext(ContextPart)>>handleSignal: > MethodContext(ContextPart)>>handleSignal: > ProgressInitiationException(Exception)>>signal > ProgressInitiationException>>display:at:from:to:during: > ProgressInitiationException class>>display:at:from:to:during: > SystemProgressMorph class>>informUserAt:during: > MorphicUIManager>>informUserDuring: > MorphicUIManager(UIManager)>>informUser:during: > [] in SMLoaderPlus>>installPackageRelease: > BlockClosure>>on:do: > SMLoaderPlus>>installPackageRelease: > SMLoaderPlus>>installPackageRelease > SMLoaderPlus>>perform:orSendTo: > [] in MenuItemMorph>>invokeWithEvent: > BlockClosure>>ensure: > CursorWithMask(Cursor)>>showWhile: > MenuItemMorph>>invokeWithEvent: > MenuItemMorph>>mouseUp: > MenuItemMorph>>handleMouseUp: > MouseButtonEvent>>sentTo: > MenuItemMorph(Morph)>>handleEvent: > MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > MorphicEventDispatcher>>dispatchDefault:with: > MorphicEventDispatcher>>dispatchEvent:with: > MenuItemMorph(Morph)>>processEvent:using: > [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > Array(SequenceableCollection)>>do: > MenuMorph(Morph)>>submorphsDo: > MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > MorphicEventDispatcher>>dispatchDefault:with: > MorphicEventDispatcher>>dispatchEvent:with: > MenuMorph(Morph)>>processEvent:using: > MorphicEventDispatcher>>doProcessingForFocusEvent:with: > MorphicEventDispatcher>>dispatchFocusEventFully:with: > -- and more not shown -- Not all fonts can access a corresponding text style. We have to account for that. Fixed in: http://forum.world.st/The-Trunk-Morphic-mt-1257-mcz-tp4910419.html Best, Marcel -- View this message in context: http://forum.world.st/Some-kind-of-missing-font-problem-tp4910384p4910420.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Aug 11 08:38:11 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 08:38:14 2016 Subject: [squeak-dev] Re: The Trunk: Morphic-mt.1257.mcz In-Reply-To: References: Message-ID: <1470904691238-4910421.post@n4.nabble.com> commits-2 wrote > Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-mt.1257.mcz > > ==================== Summary ==================== > > Name: Morphic-mt.1257 > Author: mt > Time: 11 August 2016, 10:35:14.255968 am > UUID: 568c11f3-2668-404f-8f39-1304fc34c83e > Ancestors: Morphic-cmm.1256 > > Fixes a bug that occured when updating tree morphs (such as in the > SqueakMap catalog). > > =============== Diff against Morphic-cmm.1256 =============== > > Item was removed: > - ----- Method: DependencyBrowser>>representsSameBrowseeAs: (in category > '*morphic') ----- > - representsSameBrowseeAs: anotherModel > - ^ self hasUnacceptedEdits not! > > Item was changed: > ----- Method: StringMorphAttributeScanner>>initializeFromStringMorph: > (in category 'string morph') ----- > initializeFromStringMorph: aStringMorph > + > - | style | > actualFont := aStringMorph font ifNil: [ TextStyle defaultFont ]. > - style := actualFont textStyle. > emphasis := actualFont emphasis. > + fontNumber := (actualFont textStyle ifNotNil: [:style | style > fontIndexOf: actualFont]) ifNil: [ 1 ]. > - fontNumber := (style fontIndexOf: actualFont) ifNil: [ 1 ]. > textColor := aStringMorph color. > ! I moved #representsSameBrowseeAs: to Tools package because we have to be able to "load" Morphic without having that tool present. :-) (theoretically, just like Shout's #aboutToStyle: etc.) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Morphic-mt-1257-mcz-tp4910419p4910421.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Aug 11 08:39:10 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 08:39:13 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> Message-ID: <1470904750792-4910422.post@n4.nabble.com> Chris Muller-3 wrote > Hi Marcel, why the 3997 vm, its quite old? > > On Wed, Aug 10, 2016 at 10:21 AM, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >> marcel.taeumel wrote >>> Hi, there! >>> >>> It's "feature freeze" time. :-) Please do not try out new features in >>> the >>> Trunk for now. If you forgot something, please ask first. We'll find a >>> way. >>> >>> @Chris: What is needed in the image for the MC History function? There >>> was >>> at least one fix for the ServiceEntry left in your inbox, right? >>> >>> We will now work on correcting some in-image texts, release information, >>> etc. We will also work on the release automation scripts using TravisCI, >>> smalltalkCI, and GitHub. >>> >>> The next dates are: >>> * Code Freeze on August 14, 23:59 AOE >>> * Release between August 15 and 19 >>> >>> Let's hope that this will work out as expected. :-) >>> >>> Best, >>> Marcel >> >> Hi, there. >> >> A first All-In-One can be tried out from here: >> https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip >> >> Note that we are looking for start-up bugs in the Linux scripts. >> Note that we have not yet fixed the Windows .ini bug. >> Note that Windows 10 is quite anxious about starting an unsigned >> executable. >> Note that the release artifacts will be on files.squeak.org soon. Be >> patient. >> Note that we still want to use a more recent CogVM if some one would >> declare >> one as stable. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> Hi Chris, the VM is quite old because there has not yet been any official suggestion, which recent VM to use regarding stability. I am still waiting for that... :-( Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910422.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bruce.oneel at pckswarms.ch Thu Aug 11 09:07:02 2016 From: bruce.oneel at pckswarms.ch (Bruce O'Neel-2) Date: Thu Aug 11 09:07:06 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> Message-ID: <1470906387-9eb6dcf2062c6bdd486fdd1fa0223b24@pckswarms.ch> Hi Sorry for the double post. The 3997 VM works on MacOS/X that has lost the X.? Newer ones don't. cheers bruce Hi Marcel, why the 3997 vm, its quite old? On Wed, Aug 10, 2016 at 10:21 AM, marcel.taeumel wrote: > marcel.taeumel wrote >> Hi, there! >> >> It's "feature freeze" time. :-) Please do not try out new features in the >> Trunk for now. If you forgot something, please ask first. We'll find a >> way. >> >> @Chris: What is needed in the image for the MC History function? There was >> at least one fix for the ServiceEntry left in your inbox, right? >> >> We will now work on correcting some in-image texts, release information, >> etc. We will also work on the release automation scripts using TravisCI, >> smalltalkCI, and GitHub. >> >> The next dates are: >> ? * Code Freeze on August 14, 23:59 AOE >> ? * Release between August 15 and 19 >> >> Let's hope that this will work out as expected. :-) >> >> Best, >> Marcel > > Hi, there. > > A first All-In-One can be tried out from here: > https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip > > Note that we are looking for start-up bugs in the Linux scripts. > Note that we have not yet fixed the Windows .ini bug. > Note that Windows 10 is quite anxious about starting an unsigned executable. > Note that the release artifacts will be on files.squeak.org soon. Be > patient. > Note that we still want to use a more recent CogVM if some one would declare > one as stable. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > If you reply to this email, your message will be added to the discussion below:http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910373.html To start a new topic under Squeak - Dev, email ml-node+s1294792n45488h21@n4.nabble.com To unsubscribe from Squeak - Dev, click here. NAML -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910428.html Sent from the Squeak - Dev mailing list archive at Nabble.com. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160811/afaf2610/attachment.htm From Marcel.Taeumel at hpi.de Thu Aug 11 09:10:00 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 09:10:03 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <20b5eaea-c569-9b42-7222-82f8877822d9@gmx.net> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <20b5eaea-c569-9b42-7222-82f8877822d9@gmx.net> Message-ID: <1470906600183-4910429.post@n4.nabble.com> Herbert K?nig wrote > Hi, > > when in the preferences browser, flaps selecting 'classic navigator > enabled' gives a debugger as attached. > > While creating the png I brought up the halo and wanted to click the > menu button to export. If there is another window under the menu button > (my preference browser) clicking brings the other menu to the front and > the halo disappears. Move the other window out of the way and it works. > > Not to forget: I like it, thanks to all for the work. > > Cheers, > > Herbert > > Am 10.08.2016 um 17:21 schrieb marcel.taeumel: >> marcel.taeumel wrote >>> Hi, there! >>> >>> It's "feature freeze" time. :-) Please do not try out new features in >>> the >>> Trunk for now. If you forgot something, please ask first. We'll find a >>> way. >>> >>> @Chris: What is needed in the image for the MC History function? There >>> was >>> at least one fix for the ServiceEntry left in your inbox, right? >>> >>> We will now work on correcting some in-image texts, release information, >>> etc. We will also work on the release automation scripts using TravisCI, >>> smalltalkCI, and GitHub. >>> >>> The next dates are: >>> * Code Freeze on August 14, 23:59 AOE >>> * Release between August 15 and 19 >>> >>> Let's hope that this will work out as expected. :-) >>> >>> Best, >>> Marcel >> Hi, there. >> >> A first All-In-One can be tried out from here: >> https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip >> >> Note that we are looking for start-up bugs in the Linux scripts. >> Note that we have not yet fixed the Windows .ini bug. >> Note that Windows 10 is quite anxious about starting an unsigned >> executable. >> Note that the release artifacts will be on files.squeak.org soon. Be >> patient. >> Note that we still want to use a more recent CogVM if some one would >> declare >> one as stable. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> > > > > > > Test.png (74K) <http://forum.world.st/attachment/4910354/0/Test.png> Hey Herbert, I cannot reproduce this bug: "While creating the png I brought up the halo and wanted to click the menu button to export. If there is another window under the menu button (my preference browser) clicking brings the other menu to the front and the halo disappears. Move the other window out of the way and it works. " What is "the other menu"? What do you mean with "while creating the png"? Which PNG? Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910429.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Aug 11 09:10:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 09:10:27 2016 Subject: [squeak-dev] The Trunk: Compiler-tfel.325.mcz Message-ID: Tim Felgentreff uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-tfel.325.mcz ==================== Summary ==================== Name: Compiler-tfel.325 Author: tfel Time: 2 August 2016, 11:31:47.767786 am UUID: ce80c39a-9bc9-914c-9f10-dd1d5ed2cd70 Ancestors: Compiler-mt.324, Compiler-Richo.4 merge squeakland Etoys image =============== Diff against Compiler-mt.324 =============== From commits at source.squeak.org Thu Aug 11 09:10:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 09:10:57 2016 Subject: [squeak-dev] The Trunk: Compiler-tfel.326.mcz Message-ID: Tim Felgentreff uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-tfel.326.mcz ==================== Summary ==================== Name: Compiler-tfel.326 Author: tfel Time: 4 August 2016, 11:01:03.69403 am UUID: e3f5a2b4-0efb-8a4a-a062-bf5469c9b73d Ancestors: Compiler-tfel.325 fix printing of MessageNodes and SelectorNodes =============== Diff against Compiler-tfel.325 =============== Item was changed: ----- Method: MessageNode>>printKeywords:arguments:on:indent: (in category 'printing') ----- printKeywords: key arguments: args on: aStream indent: level | keywords indent arg kwd doCrTab | args size = 0 ifTrue: [aStream space; nextPutAll: key. ^self]. + keywords := key asString keywords. - keywords := key keywords. doCrTab := args size > 2 or: [{receiver} , args anySatisfy: [:thisArg | thisArg notNil and: [thisArg isBlockNode or: [thisArg isMessageNode and: [thisArg precedence >= 3]]]]]. 1 to: (args size min: keywords size) do: [:i | arg := args at: i. kwd := keywords at: i. doCrTab ifTrue: [aStream crtab: level+1. indent := 1] "newline after big args" ifFalse: [aStream space. indent := 0]. aStream nextPutAll: kwd; space. arg printOn: aStream indent: level + 1 + indent precedence: (precedence = 2 ifTrue: [1] ifFalse: [precedence])]! Item was changed: ----- Method: SelectorNode>>isForFFICall (in category 'testing') ----- isForFFICall + ^key asString includesSubstring: '()/'! - ^key includesSubstring: '()/'! From commits at source.squeak.org Thu Aug 11 09:11:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 09:11:19 2016 Subject: [squeak-dev] The Trunk: Compiler-tfel.327.mcz Message-ID: Tim Felgentreff uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-tfel.327.mcz ==================== Summary ==================== Name: Compiler-tfel.327 Author: tfel Time: 11 August 2016, 11:09:24.072482 am UUID: 66cfc18a-cb83-3e43-b05a-69c1b7a13f9a Ancestors: Compiler-tfel.326 - allow using the Encoder without a requestor (useful when feeding it directly without parser/compiler and for testing) - be more robust in MethodNode printing, when the selector node ivar is subclass of SelectorNode (e.g. a SpecialSelectorNode), the code would try to print the special selector as key of an ordinary SelectorNode. =============== Diff against Compiler-tfel.326 =============== Item was changed: ----- Method: Encoder>>undeclared: (in category 'encoding') ----- undeclared: name | sym | + (requestor notNil and: [requestor interactive]) ifTrue: - requestor interactive ifTrue: [ requestor requestor == #error: ifTrue: [ requestor error: 'Undeclared' ]. ^ self notify: 'Undeclared' ]. "Allow knowlegeable clients to squash the undeclared warning if they want (e.g. Diffing pretty printers that are simply formatting text). As this breaks compilation it should only be used by clients that want to discard the result of the compilation. To squash the warning use e.g. [Compiler format: code in: class notifying: nil decorated: false] on: UndeclaredVariableWarning do: [:ex| ex resume: false]" sym := name asSymbol. ^ (UndeclaredVariableWarning new name: name selector: selector class: cue getClass) signal ifTrue: [ | undeclared | undeclared := cue environment undeclared. [ undeclared at: sym put: nil ] on: AttemptToWriteReadOnlyGlobal do: [ : noti | noti resume: true ]. self global: (undeclared associationAt: sym) name: sym ] ifFalse: [ self global: (Association key: sym) name: sym ]! Item was changed: ----- Method: MethodNode>>selectorNode (in category 'code generation') ----- selectorNode "Answer a SelectorNode for the message selector of the method represented by the receiver." + ^(selectorOrFalse isKindOf: SelectorNode) - ^(selectorOrFalse isMemberOf: SelectorNode) ifTrue: [selectorOrFalse] ifFalse: [SelectorNode new key: selectorOrFalse]! From commits at source.squeak.org Thu Aug 11 09:27:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 09:27:02 2016 Subject: [squeak-dev] The Trunk: System-mt.878.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.878.mcz ==================== Summary ==================== Name: System-mt.878 Author: mt Time: 11 August 2016, 11:26:33.624789 am UUID: 63f17d6c-80ab-7847-b3b4-779d6f216975 Ancestors: System-mt.877 Unplug the code for #storeToMakeRoom because project serialization via image segments is not working at the moment. =============== Diff against System-mt.877 =============== Item was changed: ----- Method: Project>>enter:revert:saveForRevert: (in category 'enter') ----- enter: returningFlag revert: revertFlag saveForRevert: saveForRevert "Install my ChangeSet, Transcript, and scheduled views as current globals. If returningFlag is true, we will return to the project from whence the current project was entered; don't change its previousProject link in this case. If saveForRevert is true, save the ImageSegment of the project being left. If revertFlag is true, make stubs for the world of the project being left. If revertWithoutAsking is true in the project being left, then always revert." | leavingProject forceRevert response seg | self isIncompletelyLoaded ifTrue: [^ self loadFromServer: true]. self isCurrentProject ifTrue: [^ self]. forceRevert := false. CurrentProject rawParameters ifNil: [revertFlag ifTrue: [^ self inform: 'nothing to revert to' translated]] ifNotNil: [saveForRevert ifFalse: [ forceRevert := CurrentProject projectParameters at: #revertWithoutAsking ifAbsent: [false]]]. forceRevert not & revertFlag ifTrue: [ response := (UIManager default chooseFrom: { 'Revert to saved version' translated. 'Cancel' translated. } title: 'Are you sure you want to destroy this Project\ and revert to an older version?\\(From the parent project, click on this project''s thumbnail.)' translated withCRs) = 1. response ifFalse: [^ self]]. revertFlag | forceRevert ifTrue: [seg := CurrentProject projectParameters at: #revertToMe ifAbsent: [ ^ self inform: 'nothing to revert to' translated]] ifFalse: [ CurrentProject makeThumbnail. returningFlag == #specialReturn ifTrue: [ProjectHistory forget: CurrentProject. "this guy is irrelevant" Project forget: CurrentProject] ifFalse: [ProjectHistory remember: CurrentProject]]. + (revertFlag | saveForRevert | forceRevert) ifFalse: [ + (Preferences valueOfFlag: #projectsSentToDisk) + ifTrue: [ + self inform: 'Project serialization via image segments\does not work at the moment. Disabling the\preference #projectsSentToDisk now...' withCRs. + Preferences disable: #projectsSentToDisk. + "self storeToMakeRoom"]]. - (revertFlag | saveForRevert | forceRevert) ifFalse: - [(Preferences valueOfFlag: #projectsSentToDisk) ifTrue: - [self storeToMakeRoom]]. "Update display depth for leaving and entring project." CurrentProject displayDepth: Display depth. displayDepth == nil ifTrue: [displayDepth := Display depth]. self installNewDisplay: Display extent depth: displayDepth. returningFlag == #specialReturn ifTrue: [ CurrentProject removeChangeSetIfPossible. "keep this stuff from accumulating" nextProject := nil ] ifFalse: [ returningFlag ifTrue: [nextProject := CurrentProject] ifFalse: [previousProject := CurrentProject]. ]. CurrentProject world triggerEvent: #aboutToLeaveWorld. CurrentProject abortResourceLoading. CurrentProject finalExitActions: self. CurrentProject saveState. "********** SWITCHING CURRENT PROJECT **********" leavingProject := CurrentProject. CurrentProject := self. ProjectHistory remember: self. "********** SWITCHING CURRENT PROJECT **********" self loadState. self finalEnterActions: leavingProject. self addDeferredUIMessage: [self startResourceLoading]. self world triggerEvent: #aboutToEnterWorld. "Save project for revert." saveForRevert ifTrue: [ Smalltalk garbageCollect. "let go of pointers" leavingProject storeSegment. "result :=" leavingProject world isInMemory ifTrue: ['Can''t seem to write the project.'] ifFalse: [leavingProject projectParameters at: #revertToMe put: leavingProject world xxxSegment clone]. 'Project written.']. "original is for coming back in and continuing." revertFlag | forceRevert ifTrue: [ seg clone revert]. "non-cloned one is for reverting again later" self removeParameter: #exportState. "Now that everything is set up, we can show zoom animation." self showZoom ifTrue: [self displayZoom: leavingProject parent ~~ self "Entering?"] ifFalse: [self restore]. "Update processes at last." self scheduleProcessForEnter. leavingProject terminateProcessForLeave. ! From Marcel.Taeumel at hpi.de Thu Aug 11 09:31:37 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 09:31:41 2016 Subject: [squeak-dev] Re: [Squeak 5.1 beta] New Project does not work with my changed preferences In-Reply-To: <95b9e269-bdb0-a245-86c0-08caaa48478d@gmx.net> References: <95b9e269-bdb0-a245-86c0-08caaa48478d@gmx.net> Message-ID: <1470907897958-4910436.post@n4.nabble.com> Herbert K?nig wrote > Hi, > > put the unzipped file into the resources folder, in the preferences > browser load the preferences from disk. > > Then you get a debugger when entering a freshly created Morpic Project. > > In the standard all it one this does not occur. > > The attachment was too big, so please download it from: > http://www.kostenlose-bauabrechnung.de/downloads/ > and disregard my message waiting approval. > > Cheers, > > Herbert Hi Herbert, unfortunately, project serialization via image segments does not work with Spur at the moment. Anyway, I added a fix to avoid the debugger: http://forum.world.st/The-Trunk-System-mt-878-mcz-tp4910435.html Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-1-beta-New-Project-does-not-work-with-my-changed-preferences-tp4910359p4910436.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Aug 11 10:11:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 10:11:30 2016 Subject: [squeak-dev] The Trunk: Tools-mt.714.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.714.mcz ==================== Summary ==================== Name: Tools-mt.714 Author: mt Time: 11 August 2016, 12:11:08.251789 pm UUID: bf026012-d750-3249-8379-8df96fe4a4b6 Ancestors: Tools-mt.713 Hotfix to theme all file choosing and FileList2 dialogs. Note that we should refactore/rewrite that code to not depend on Morphic. In the long term, the Tools package should not depend on Morphic being loaded. =============== Diff against Tools-mt.713 =============== Item was changed: ----- Method: FileChooser>>open (in category 'open') ----- open | model | self postOpen. "Funny name in this context, should be renamed, but whatever..." self morphicView openInWorld. + UserInterfaceTheme current applyTo: self morphicView allMorphs. model := self morphicView model. FileChooser modalLoopOn: self morphicView. ^ model getSelectedFile. ! Item was changed: ----- Method: FileList2 class>>modalFileSelector (in category 'modal dialogs') ----- modalFileSelector | window | window := self morphicViewFileSelector. window openCenteredInWorld. + UserInterfaceTheme current applyTo: window allMorphs. self modalLoopOn: window. ^(window valueOfProperty: #fileListModel) getSelectedFile! Item was changed: ----- Method: FileList2 class>>modalFileSelectorForSuffixes: (in category 'modal dialogs') ----- modalFileSelectorForSuffixes: aList | window aFileList | window := self morphicViewFileSelectorForSuffixes: aList. aFileList := window valueOfProperty: #fileListModel. window openCenteredInWorld. + UserInterfaceTheme current applyTo: window allMorphs. self modalLoopOn: window. ^aFileList getSelectedFile! Item was changed: ----- Method: FileList2 class>>modalFileSelectorForSuffixes:directory: (in category 'modal dialogs') ----- modalFileSelectorForSuffixes: aList directory: aDirectory | window aFileList | window := self morphicViewFileSelectorForSuffixes: aList directory: aDirectory. aFileList := window valueOfProperty: #fileListModel. window openCenteredInWorld. + UserInterfaceTheme current applyTo: window allMorphs. self modalLoopOn: window. ^aFileList getSelectedFile! Item was changed: ----- Method: FileList2 class>>modalFolderSelector: (in category 'modal dialogs') ----- modalFolderSelector: aDir | window fileModel | window := self morphicViewFolderSelector: aDir. fileModel := window model. window openInWorld: self currentWorld extent: 300@400. + UserInterfaceTheme current applyTo: window allMorphs. self modalLoopOn: window. ^fileModel getSelectedDirectory withoutListWrapper! Item was changed: ----- Method: FileList2 class>>modalFolderSelectorForProject: (in category 'modal dialogs') ----- modalFolderSelectorForProject: aProject " FileList2 modalFolderSelectorForProject: Project current " | window fileModel w | window := FileList2 morphicViewProjectSaverFor: aProject. fileModel := window valueOfProperty: #FileList. w := self currentWorld. window position: w topLeft + (w extent - window extent // 2). w addMorphInLayer: window. w startSteppingSubmorphsOf: window. + UserInterfaceTheme current applyTo: window allMorphs. self modalLoopOn: window. ^fileModel getSelectedDirectory withoutListWrapper! Item was changed: ----- Method: FileList2 class>>modalFolderSelectorForProjectLoad (in category 'modal dialogs') ----- modalFolderSelectorForProjectLoad | window fileModel w | window := self morphicViewProjectLoader2InWorld: self currentWorld reallyLoad: false. fileModel := window valueOfProperty: #FileList. w := self currentWorld. window position: w topLeft + (w extent - window extent // 2). window openInWorld: w. + UserInterfaceTheme current applyTo: window allMorphs. self modalLoopOn: window. ^fileModel getSelectedDirectory withoutListWrapper! Item was changed: ----- Method: FileList2 class>>textRow: (in category 'utility') ----- textRow: aString ^AlignmentMorph newRow wrapCentering: #center; cellPositioning: #leftCenter; color: Color transparent; layoutInset: 0; addMorph: ( AlignmentMorph newColumn wrapCentering: #center; cellPositioning: #topCenter; color: Color transparent; vResizing: #shrinkWrap; layoutInset: 0; addMorph: ( AlignmentMorph newRow wrapCentering: #center; cellPositioning: #leftCenter; color: Color transparent; hResizing: #shrinkWrap; vResizing: #shrinkWrap; layoutInset: 0; + addMorph: ((StringMorph contents: aString) color: ((UserInterfaceTheme current get: #textColor for: #PluggableTextMorph) ifNil: [Color black])) asMorph - addMorph: ((StringMorph contents: aString) color: Color blue; lock) ) )! From commits at source.squeak.org Thu Aug 11 10:12:56 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 10:12:59 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-tfel.42.mcz Message-ID: Tim Felgentreff uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-tfel.42.mcz ==================== Summary ==================== Name: 51Deprecated-tfel.42 Author: tfel Time: 11 August 2016, 12:12:10.674856 pm UUID: b9984f22-cb77-6341-9e21-91f68af6f898 Ancestors: 51Deprecated-mt.41 move a boolean preference adding method to deprecated, so that FreeType at least loads from VMMaker update map =============== Diff against 51Deprecated-mt.41 =============== Item was added: + ----- Method: Preferences class>>addBooleanPreference:categories:default:balloonHelp:projectLocal:changeInformee:changeSelector: (in category '*51Deprecated-add preferences') ----- + addBooleanPreference: prefSymbol categories: categoryList default: aValue balloonHelp: helpString projectLocal: localBoolean changeInformee: informeeSymbol changeSelector: aChangeSelector + "Add an item repreesenting the given preference symbol to the system. Default view for this preference is boolean" + self deprecated: ' try to switch to new pragma-preferences.'. + self addPreference: prefSymbol categories: categoryList default: aValue balloonHelp: helpString projectLocal: localBoolean changeInformee: informeeSymbol changeSelector: aChangeSelector type: #Boolean! From commits at source.squeak.org Thu Aug 11 12:58:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 12:58:53 2016 Subject: [squeak-dev] The Trunk: Collections-mt.704.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.704.mcz ==================== Summary ==================== Name: Collections-mt.704 Author: mt Time: 11 August 2016, 2:58:37.39736 pm UUID: bc70536e-2c54-5247-acc6-3422b7d7c748 Ancestors: Collections-mt.703 In preparation for showing the release notes on a help page, make TextReadWriter interface more like ImageReadWriter interface. =============== Diff against Collections-mt.703 =============== Item was added: + ----- Method: TextReadWriter class>>textFromFileNamed: (in category 'instance creation') ----- + textFromFileNamed: fileName + + ^ self textFromStream: (FileStream readOnlyFileNamed: fileName)! Item was added: + ----- Method: TextReadWriter class>>textFromStream: (in category 'instance creation') ----- + textFromStream: aBinaryStream + + | reader readerClass text | + readerClass := self. "no auto-detection yet" + aBinaryStream reset. + reader := readerClass new on: aBinaryStream. + Cursor read showWhile: [ + text := reader nextText. + reader close]. + ^ text + ! Item was added: + ----- Method: TextReadWriter>>close (in category 'initialize-release') ----- + close + + stream close.! From herbertkoenig at gmx.net Thu Aug 11 13:01:03 2016 From: herbertkoenig at gmx.net (=?ISO-8859-1?Q?Herbert_K=F6nig?=) Date: Thu Aug 11 13:01:15 2016 Subject: =?US-ASCII?Q?AW:_[squeak-dev]_Re:_[ANN]_S?= =?US-ASCII?Q?queak_5.1_Feature_Freeze_--_Tr?= =?US-ASCII?Q?unk_closed_for=0D__new_features?= =?US-ASCII?Q?;_only_bug_fixes_or_text_updates?= Message-ID: Hi,? I meant the attached png. In the halo there is a red halo button which i pressed.? The other menu was the preference browser.? Again this may depend on one of my other preferences and may not happen in the standard image. I opened the preference browser and went through the categorie top to bottom.? Mabe you ned to load my preferences for which i put a link in my other post. Sorry for the confusion, seems i was absent minded. Cheers,? Herbert.?
-------- Urspr?ngliche Nachricht --------
Von: "marcel.taeumel"
Datum:11.08.2016 11:10 (GMT+01:00)
An: squeak-dev@lists.squeakfoundation.org
Betreff: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates
Herbert K?nig wrote > Hi, > > when in the preferences browser, flaps selecting 'classic navigator > enabled' gives a debugger as attached. > > While creating the png I brought up the halo and wanted to click the > menu button to export. If there is another window under the menu button > (my preference browser) clicking brings the other menu to the front and > the halo disappears. Move the other window out of the way and it works. > > Not to forget: I like it, thanks to all for the work. > > Cheers, > > Herbert > > Am 10.08.2016 um 17:21 schrieb marcel.taeumel: >> marcel.taeumel wrote >>> Hi, there! >>> >>> It's "feature freeze" time. :-) Please do not try out new features in >>> the >>> Trunk for now. If you forgot something, please ask first. We'll find a >>> way. >>> >>> @Chris: What is needed in the image for the MC History function? There >>> was >>> at least one fix for the ServiceEntry left in your inbox, right? >>> >>> We will now work on correcting some in-image texts, release information, >>> etc. We will also work on the release automation scripts using TravisCI, >>> smalltalkCI, and GitHub. >>> >>> The next dates are: >>>??? * Code Freeze on August 14, 23:59 AOE >>>??? * Release between August 15 and 19 >>> >>> Let's hope that this will work out as expected. :-) >>> >>> Best, >>> Marcel >> Hi, there. >> >> A first All-In-One can be tried out from here: >> https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip >> >> Note that we are looking for start-up bugs in the Linux scripts. >> Note that we have not yet fixed the Windows .ini bug. >> Note that Windows 10 is quite anxious about starting an unsigned >> executable. >> Note that the release artifacts will be on files.squeak.org soon. Be >> patient. >> Note that we still want to use a more recent CogVM if some one would >> declare >> one as stable. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> > > > > > > Test.png (74K) <http://forum.world.st/attachment/4910354/0/Test.png> Hey Herbert, I cannot reproduce this bug: "While creating the png I brought up the halo and wanted to click the menu button to export. If there is another window under the menu button (my preference browser) clicking brings the other menu to the front and the halo disappears. Move the other window out of the way and it works. " What is "the other menu"? What do you mean with "while creating the png"? Which PNG? Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910429.html Sent from the Squeak - Dev mailing list archive at Nabble.com. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160811/4c04c967/attachment.htm From commits at source.squeak.org Thu Aug 11 13:18:56 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 13:18:58 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1258.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1258.mcz ==================== Summary ==================== Name: Morphic-mt.1258 Author: mt Time: 11 August 2016, 3:18:11.232564 pm UUID: 28b5290d-2a7d-3844-855c-c122f0e0edc7 Ancestors: Morphic-mt.1257 Fixes a serious regression where the emergency evaluator appeared way too often for even simple drawing errors. New strategy: Try to repaint the world, remembering all errors for various kinds of receivers. Since bad morphs get flagged, this loop terminates. After that, show debuggers for all kinds of errors that appeared. This makes working in Morphic more robust and you can be sure that, after debuggers appear, all drawing glitches have been taken care of. =============== Diff against Morphic-mt.1257 =============== Item was changed: ----- Method: WorldState>>displayWorldSafely: (in category 'update cycle') ----- displayWorldSafely: aWorld "Update this world's display and keep track of errors during draw methods." + | finished errors previousClasses | + finished := false. + errors := nil. + + [finished] whileFalse: [ + [aWorld displayWorld. finished := true] on: Error do: [:ex | + "Handle a drawing error" + | err rcvr errCtx errMorph | + err := ex description. + rcvr := ex receiver. + + errCtx := thisContext. + [ + errCtx := errCtx sender. + "Search the sender chain to find the morph causing the problem" + [errCtx notNil and:[(errCtx receiver isMorph) not]] + whileTrue:[errCtx := errCtx sender]. + "If we're at the root of the context chain then we have a fatal drawing problem" + errCtx ifNil:[^Project current handleFatalDrawingError: err]. + errMorph := errCtx receiver. + "If the morph causing the problem has already the #drawError flag set, + then search for the next morph above in the caller chain." + errMorph hasProperty: #errorOnDraw + ] whileTrue. + errMorph setProperty: #errorOnDraw toValue: true. + + "Catch all errors, one for each receiver class." + errors ifNil: [errors := OrderedCollection new]. + previousClasses ifNil: [previousClasses := IdentitySet new]. + (previousClasses includes: rcvr class) ifFalse: [ + previousClasses add: rcvr class. + errors add: (Process forContext: ex signalerContext copyStack priority: Processor activeProcess priority) -> err]. + aWorld fullRepaintNeeded. + ]]. + + "Open debuggers for all different errors found." + errors ifNotNil: [ + [errors do: [:ea | + (Debugger new process: ea key controller: nil context: ea key suspendedContext) + errorWasInUIProcess: Processor activeProcess = Project current uiProcess; + openNotifierContents: nil label: ea value]. + "Try to draw the debuggers or else there will be no chance to escape from this catch-drawing-error loop." + ActiveWorld displayWorld] on: Error do: [:ex | Project current handleFatalDrawingError: ex description] ].! - [aWorld displayWorld] ifError: [:err :rcvr | - "Handle a drawing error" - | errCtx errMorph | - errCtx := thisContext. - [ - errCtx := errCtx sender. - "Search the sender chain to find the morph causing the problem" - [errCtx notNil and:[(errCtx receiver isMorph) not]] - whileTrue:[errCtx := errCtx sender]. - "If we're at the root of the context chain then we have a fatal drawing problem" - errCtx ifNil:[^Project current handleFatalDrawingError: err]. - errMorph := errCtx receiver. - "If the morph causing the problem has already the #drawError flag set, - then search for the next morph above in the caller chain." - errMorph hasProperty: #errorOnDraw - ] whileTrue. - errMorph setProperty: #errorOnDraw toValue: true. - "Install the old error handler, so we can re-raise the error" - rcvr error: err. - ].! From commits at source.squeak.org Thu Aug 11 13:22:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 13:22:10 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1258.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1258.mcz ==================== Summary ==================== Name: Morphic-mt.1258 Author: mt Time: 11 August 2016, 3:18:11.232564 pm UUID: 28b5290d-2a7d-3844-855c-c122f0e0edc7 Ancestors: Morphic-mt.1257 Fixes a serious regression where the emergency evaluator appeared way too often for even simple drawing errors. New strategy: Try to repaint the world, remembering all errors for various kinds of receivers. Since bad morphs get flagged, this loop terminates. After that, show debuggers for all kinds of errors that appeared. This makes working in Morphic more robust and you can be sure that, after debuggers appear, all drawing glitches have been taken care of. =============== Diff against Morphic-mt.1257 =============== Item was changed: ----- Method: WorldState>>displayWorldSafely: (in category 'update cycle') ----- displayWorldSafely: aWorld "Update this world's display and keep track of errors during draw methods." + | finished errors previousClasses | + finished := false. + errors := nil. + + [finished] whileFalse: [ + [aWorld displayWorld. finished := true] on: Error do: [:ex | + "Handle a drawing error" + | err rcvr errCtx errMorph | + err := ex description. + rcvr := ex receiver. + + errCtx := thisContext. + [ + errCtx := errCtx sender. + "Search the sender chain to find the morph causing the problem" + [errCtx notNil and:[(errCtx receiver isMorph) not]] + whileTrue:[errCtx := errCtx sender]. + "If we're at the root of the context chain then we have a fatal drawing problem" + errCtx ifNil:[^Project current handleFatalDrawingError: err]. + errMorph := errCtx receiver. + "If the morph causing the problem has already the #drawError flag set, + then search for the next morph above in the caller chain." + errMorph hasProperty: #errorOnDraw + ] whileTrue. + errMorph setProperty: #errorOnDraw toValue: true. + + "Catch all errors, one for each receiver class." + errors ifNil: [errors := OrderedCollection new]. + previousClasses ifNil: [previousClasses := IdentitySet new]. + (previousClasses includes: rcvr class) ifFalse: [ + previousClasses add: rcvr class. + errors add: (Process forContext: ex signalerContext copyStack priority: Processor activeProcess priority) -> err]. + aWorld fullRepaintNeeded. + ]]. + + "Open debuggers for all different errors found." + errors ifNotNil: [ + [errors do: [:ea | + (Debugger new process: ea key controller: nil context: ea key suspendedContext) + errorWasInUIProcess: Processor activeProcess = Project current uiProcess; + openNotifierContents: nil label: ea value]. + "Try to draw the debuggers or else there will be no chance to escape from this catch-drawing-error loop." + ActiveWorld displayWorld] on: Error do: [:ex | Project current handleFatalDrawingError: ex description] ].! - [aWorld displayWorld] ifError: [:err :rcvr | - "Handle a drawing error" - | errCtx errMorph | - errCtx := thisContext. - [ - errCtx := errCtx sender. - "Search the sender chain to find the morph causing the problem" - [errCtx notNil and:[(errCtx receiver isMorph) not]] - whileTrue:[errCtx := errCtx sender]. - "If we're at the root of the context chain then we have a fatal drawing problem" - errCtx ifNil:[^Project current handleFatalDrawingError: err]. - errMorph := errCtx receiver. - "If the morph causing the problem has already the #drawError flag set, - then search for the next morph above in the caller chain." - errMorph hasProperty: #errorOnDraw - ] whileTrue. - errMorph setProperty: #errorOnDraw toValue: true. - "Install the old error handler, so we can re-raise the error" - rcvr error: err. - ].! From commits at source.squeak.org Thu Aug 11 14:29:31 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 14:29:34 2016 Subject: [squeak-dev] The Trunk: Collections-mt.705.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.705.mcz ==================== Summary ==================== Name: Collections-mt.705 Author: mt Time: 11 August 2016, 4:29:13.490564 pm UUID: fbaaa045-4df3-c746-9de5-d8102495a1e3 Ancestors: Collections-mt.704 Fix two small bugs in HTML parser regarding strings in tag properties and href contents. =============== Diff against Collections-mt.704 =============== Item was changed: ----- Method: HtmlReadWriter>>mapATag: (in category 'mapping') ----- mapATag: aTag | result startIndex stopIndex attribute | result := OrderedCollection new. "
" attribute := 'href'. startIndex := aTag findString: attribute. startIndex > 0 ifTrue: [ + startIndex := aTag findString: '"' startingAt: startIndex+attribute size. + stopIndex := aTag findString: '"' startingAt: startIndex+1. - startIndex := aTag findString: '=' startingAt: startIndex+attribute size. - stopIndex := aTag findString: ' ' startingAt: startIndex+1. - stopIndex = 0 ifTrue: [ - stopIndex := aTag findString: '>' startingAt: startIndex+1]. - - (aTag at: startIndex + 1) = $" - ifTrue: [startIndex := startIndex + 1]. - (aTag at: stopIndex - 1) = $" - ifTrue: [stopIndex := stopIndex - 1]. result add: (TextURL new url: (aTag copyFrom: startIndex+1 to: stopIndex-1))]. ^ result! Item was changed: ----- Method: HtmlReadWriter>>processNextTag (in category 'reading') ----- processNextTag + | tag htmlEscape lookForNewTag lookForHtmlEscape tagFound valid inComment inTagString | - | tag htmlEscape lookForNewTag lookForHtmlEscape tagFound valid inComment | lookForNewTag := true. lookForHtmlEscape := false. tagFound := false. tag := OrderedCollection new. htmlEscape := OrderedCollection new. inComment := false. + inTagString := false. [stream atEnd not and: [tagFound not]] whileTrue: [ | character | character := stream next. valid := (#(10 13) includes: character asciiValue) not. count := count + 1. character = $< ifTrue: [lookForNewTag := false]. character = $& ifTrue: [ inComment ifFalse: [lookForHtmlEscape := true]]. lookForNewTag ifTrue: [ lookForHtmlEscape ifFalse: [valid ifTrue: [string add: character] ifFalse: [offset := offset + 1]] ifTrue: [valid ifTrue: [htmlEscape add: character]. offset := offset + 1]] ifFalse: [valid ifTrue: [tag add: character]. offset := offset + 1]. + "Toggle within tag string/text." + (character = $" and: [lookForNewTag not]) + ifTrue: [inTagString := inTagString not]. + inComment := ((lookForNewTag not and: [tag size >= 4]) and: [tag beginsWith: '') not]. + (((character = $> and: [inComment not]) and: [lookForNewTag not]) and: [inTagString not]) ifTrue: [ - ((character = $> and: [inComment not]) and: [lookForNewTag not]) ifTrue: [ lookForNewTag := true. (tag beginsWith: ' Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1259.mcz ==================== Summary ==================== Name: Morphic-mt.1259 Author: mt Time: 11 August 2016, 4:30:30.244564 pm UUID: 2c310d11-0bd2-f449-9688-efd2fb427b0a Ancestors: Morphic-mt.1258 For for interactive release notes, support code URLs in TextURL property. =============== Diff against Morphic-mt.1258 =============== Item was changed: ----- Method: TextURL>>actOnClickFor: (in category '*Morphic') ----- actOnClickFor: anObject "Do what you can with this URL. Later a web browser." | response m | (url beginsWith: 'sqPr://') ifTrue: [ ProjectLoading thumbnailFromUrl: (url copyFrom: 8 to: url size). + ^ true "should not get here, but what the heck" - ^self "should not get here, but what the heck" ]. + (url beginsWith: 'code://') ifTrue: [ + self open: (Compiler evaluate: (url allButFirst: 7)). + ^ true "should not get here, but what the heck" + ]. "if it's a web browser, tell it to jump" anObject isWebBrowser ifTrue: [anObject jumpToUrl: url. ^ true] ifFalse: [((anObject respondsTo: #model) and: [anObject model isWebBrowser]) ifTrue: [anObject model jumpToUrl: url. ^ true]]. "if it's a morph, see if it is contained in a web browser" (anObject isKindOf: Morph) ifTrue: [ m := anObject. [ m ~= nil ] whileTrue: [ (m isWebBrowser) ifTrue: [ m jumpToUrl: url. ^true ]. (m hasProperty: #webBrowserView) ifTrue: [ m model jumpToUrl: url. ^true ]. m := m owner. ] ]. "no browser in sight. ask if we should start a new browser" ((self confirm: 'open a browser to view this URL?' translated) and: [WebBrowser default notNil]) ifTrue: [ WebBrowser default openOnUrl: url. ^ true ]. "couldn't display in a browser. Offer to put up just the source" response := (UIManager default chooseFrom: (Array with: 'View web page as source' translated with: 'Cancel' translated) title: 'Couldn''t find a web browser. View\page as source?' withCRs translated). response = 1 ifTrue: [HTTPSocket httpShowPage: url]. ^ true! Item was added: + ----- Method: TextURL>>open: (in category '*Morphic') ----- + open: anObject + + anObject isBehavior ifTrue: [ + ^ anObject browse]. + anObject isCompiledMethod ifTrue: [ + ^ ToolSet browse: anObject methodClass selector: anObject selector]. + anObject class == MethodReference ifTrue: [ + ^ ToolSet browse: anObject actualClass selector: anObject selector]. + anObject isSymbol ifTrue: [ + SystemNavigation default browseAllImplementorsOf: anObject. + SystemNavigation default browseAllCallsOn: anObject. + ^ self]. + + anObject explore.! From commits at source.squeak.org Thu Aug 11 14:42:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 14:42:36 2016 Subject: [squeak-dev] The Trunk: Collections-mt.706.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.706.mcz ==================== Summary ==================== Name: Collections-mt.706 Author: mt Time: 11 August 2016, 4:42:16.852564 pm UUID: 345741f6-24ee-ab49-891f-ae8fa3954ea2 Ancestors: Collections-mt.705 Consider UI theme for colorizing text actions. =============== Diff against Collections-mt.705 =============== Item was added: + ----- Method: TextAction class>>applyUserInterfaceTheme (in category 'preferences') ----- + applyUserInterfaceTheme + + Purple := nil.! Item was added: + ----- Method: TextAction class>>canApplyThemeToInstances (in category 'preferences') ----- + canApplyThemeToInstances + ^false! Item was added: + ----- Method: TextAction class>>themeProperties (in category 'preferences') ----- + themeProperties + + ^ super themeProperties, { + { #color. 'Colors'. 'Color for clickable text links.' } + } ! Item was added: + ----- Method: TextAction>>applyUserInterfaceTheme (in category 'updating') ----- + applyUserInterfaceTheme + + "Ignore. Only class-side cache."! Item was changed: ----- Method: TextAction>>emphasizeScanner: (in category 'as yet unclassified') ----- emphasizeScanner: scanner "Set the emphasis for text display" + Purple ifNil: [Purple := self userInterfaceTheme color ifNil: [Color r: 0.4 g: 0.0 b: 1]]. + scanner textColor: Purple.! - scanner textColor: Purple! From commits at source.squeak.org Thu Aug 11 14:44:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 14:44:34 2016 Subject: [squeak-dev] The Trunk: System-mt.879.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.879.mcz ==================== Summary ==================== Name: System-mt.879 Author: mt Time: 11 August 2016, 4:44:00.091564 pm UUID: df830079-6fa6-5840-ae31-b9ad40f584c0 Ancestors: System-mt.878 Text action color in UI themes. =============== Diff against System-mt.878 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkSyntaxHighlighting: (in category 'instance creation') ----- addDarkSyntaxHighlighting: aUserInterfaceTheme "self createDark apply." | normal bold italic underlined darkMap | normal := TextEmphasis normal. bold:=TextEmphasis bold. italic:=TextEmphasis italic. underlined := TextEmphasis underlined. darkMap := StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9. + aUserInterfaceTheme + set: #color for: #TextAction to: self dbBlue; + - aUserInterfaceTheme set: #default for: #SHTextStylerST80 to: {self dbForeground}; set: #invalid for: #SHTextStylerST80 to: {self dbInvalid}; set: #excessCode for: #SHTextStylerST80 to: {self dbInvalid twiceDarker}; "Descriptive text for humans, italicized." set: #comment for: #SHTextStylerST80 to: {self dbComment. italic}; set: #unfinishedComment for: #SHTextStylerST80 to: {self dbComment darker. italic}; set: #'$' for: #SHTextStylerST80 to: {self dbConstant}; set: #character for: #SHTextStylerST80 to: {self dbConstant}; set: #integer for: #SHTextStylerST80 to: {self dbConstant}; set: #number for: #SHTextStylerST80 to: {self dbConstant}; set: #- for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #= for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #symbol for: #SHTextStylerST80 to: {self dbBedrock}; set: #stringSymbol for: #SHTextStylerST80 to: {self dbBedrock}; set: #literalArray for: #SHTextStylerST80 to: {self dbForeground}; set: #string for: #SHTextStylerST80 to: {self dbConstant}; set: #unfinishedString for: #SHTextStylerST80 to: {self dbConstant darker}; set: #assignment for: #SHTextStylerST80 to: {nil. bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. bold}; set: #literal for: #SHTextStylerST80 to: {nil. bold}; set: #keyword for: #SHTextStylerST80 to: {self dbMessage}; set: #binary for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #unary for: #SHTextStylerST80 to: {self dbMessage}; set: #incompleteKeyword for: #SHTextStylerST80 to: {self dbMessage darker. {underlined. bold}}; set: #incompleteBinary for: #SHTextStylerST80 to: {self dbMessage darker. underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {self dbMessage darker. underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {self dbInvalid}; set: #undefinedBinary for: #SHTextStylerST80 to: {self dbInvalid}; set: #undefinedUnary for: #SHTextStylerST80 to: {self dbInvalid}; "Delineate the selector (good for new users), and make the method look like a mini-document with a title." set: #patternKeyword for: #SHTextStylerST80 to: {self dbMessage lighter. {bold. underlined}}; set: #patternBinary for: #SHTextStylerST80 to: {nil. bold}; set: #patternUnary for: #SHTextStylerST80 to: {self dbMessage lighter. {bold. underlined}}; set: #self for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #super for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #true for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #false for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #nil for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #thisContext for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #return for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #patternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. "darkMap"}; set: #methodArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. "darkMap"}; set: #blockPatternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #blockArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #argument for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #blockArgColon for: #SHTextStylerST80 to: {self dbBedrock}; set: #leftParenthesis for: #SHTextStylerST80 to: {self dbBedrock}; set: #rightParenthesis for: #SHTextStylerST80 to: {self dbBedrock}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {self dbGreen}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {self dbGreen}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {self dbPurple}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {self dbPurple}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {self dbRed}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {self dbRed}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {self dbGreen}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {self dbGreen}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {self dbOrange}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {self dbOrange}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {self dbPurple}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {self dbPurple}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {self dbBlue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {self dbBlue}; set: #blockStart for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockEnd for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockStart1 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockEnd1 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockStart2 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockEnd2 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockStart3 for: #SHTextStylerST80 to: {self dbRed}; set: #blockEnd3 for: #SHTextStylerST80 to: {self dbRed}; set: #blockStart4 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockEnd4 for: #SHTextStylerST80 to: {self dbGreen}; set: #blockStart5 for: #SHTextStylerST80 to: {self dbOrange}; set: #blockEnd5 for: #SHTextStylerST80 to: {self dbOrange}; set: #blockStart6 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockEnd6 for: #SHTextStylerST80 to: {self dbPurple}; set: #blockStart7 for: #SHTextStylerST80 to: {self dbBlue}; set: #blockEnd7 for: #SHTextStylerST80 to: {self dbBlue}; set: #arrayStart for: #SHTextStylerST80 to: {self dbBedrock}; set: #arrayEnd for: #SHTextStylerST80 to: {self dbBedrock}; set: #arrayStart1 for: #SHTextStylerST80 to: {self dbForeground}; set: #arrayEnd1 for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayStart for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {self dbForeground}; set: #leftBrace for: #SHTextStylerST80 to: {self dbForeground}; set: #rightBrace for: #SHTextStylerST80 to: {self dbForeground}; set: #cascadeSeparator for: #SHTextStylerST80 to: {self dbForeground}; set: #statementSeparator for: #SHTextStylerST80 to: {self dbForeground}; set: #externalCallType for: #SHTextStylerST80 to: {self dbForeground}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {self dbForeground}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {self dbForeground}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #methodTempBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockTempBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockArgsBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #primitive for: #SHTextStylerST80 to: {self dbGreen lighter. bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #module for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #blockTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #instVar for: #SHTextStylerST80 to: {self dbYellow. normal }; set: #workspaceVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {self dbInvalid}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {self dbGray. underlined}; set: #tempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #patternTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #poolConstant for: #SHTextStylerST80 to: {self dbConstant }; set: #classVar for: #SHTextStylerST80 to: {self dbReference}; set: #globalVar for: #SHTextStylerST80 to: {self dbClass. normal}. "And the text differ" aUserInterfaceTheme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor color: self dbRed }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor color: self dbBlue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: MonokaiTheme class>>addDarkSyntaxHighlighting: (in category 'instance creation') ----- addDarkSyntaxHighlighting: theme "self createDark apply." + theme + set: #color for: #TextAction to: self blue; + - theme set: #default for: #SHTextStylerST80 to: {self foregroundColor}; set: #invalid for: #SHTextStylerST80 to: {self red}; set: #excessCode for: #SHTextStylerST80 to: {self red}; set: #comment for: #SHTextStylerST80 to: {self commentColor}; set: #unfinishedComment for: #SHTextStylerST80 to: {self red. TextEmphasis italic}; set: #'$' for: #SHTextStylerST80 to: {self red}; set: #character for: #SHTextStylerST80 to: {self numberColor}; set: #integer for: #SHTextStylerST80 to: {self numberColor}; set: #number for: #SHTextStylerST80 to: {self numberColor}; set: #- for: #SHTextStylerST80 to: {self red}; set: #symbol for: #SHTextStylerST80 to: {self blue}; set: #stringSymbol for: #SHTextStylerST80 to: {self blue}; set: #literalArray for: #SHTextStylerST80 to: {self blue}; set: #string for: #SHTextStylerST80 to: {self stringColor. TextEmphasis normal}; set: #unfinishedString for: #SHTextStylerST80 to: {self red. TextEmphasis normal}; set: #assignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #literal for: #SHTextStylerST80 to: {nil. TextEmphasis italic}; set: #keyword for: #SHTextStylerST80 to: {self blue}; set: #binary for: #SHTextStylerST80 to: {self blue}; set: #unary for: #SHTextStylerST80 to: {self blue}; set: #incompleteKeyword for: #SHTextStylerST80 to: {self foregroundColor. TextEmphasis underlined}; set: #incompleteBinary for: #SHTextStylerST80 to: {self foregroundColor. TextEmphasis underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {self foregroundColor. TextEmphasis underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {self red}; set: #undefinedBinary for: #SHTextStylerST80 to: {self red}; set: #undefinedUnary for: #SHTextStylerST80 to: {self red}; set: #patternKeyword for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternBinary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternUnary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #self for: #SHTextStylerST80 to: {self red}; set: #super for: #SHTextStylerST80 to: {self red}; set: #true for: #SHTextStylerST80 to: {self red}; set: #false for: #SHTextStylerST80 to: {self red}; set: #nil for: #SHTextStylerST80 to: {self red}; set: #thisContext for: #SHTextStylerST80 to: {self red}; set: #return for: #SHTextStylerST80 to: {self red}; set: #patternArg for: #SHTextStylerST80 to: {self blue}; set: #methodArg for: #SHTextStylerST80 to: {self blue}; set: #blockPatternArg for: #SHTextStylerST80 to: {self blue}; set: #blockArg for: #SHTextStylerST80 to: {self blue}; set: #argument for: #SHTextStylerST80 to: {self blue}; set: #blockArgColon for: #SHTextStylerST80 to: {self foregroundColor}; set: #leftParenthesis for: #SHTextStylerST80 to: {self foregroundColor}; set: #rightParenthesis for: #SHTextStylerST80 to: {self foregroundColor}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {self green}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {self green}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {self magenta}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {self magenta}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {self red}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {self red}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {self green}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {self green}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {self orange}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {self orange}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {self magenta}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {self magenta}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {self blue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {self blue}; set: #blockStart for: #SHTextStylerST80 to: {self foregroundColor}; set: #blockEnd for: #SHTextStylerST80 to: {self foregroundColor}; set: #blockStart1 for: #SHTextStylerST80 to: {self green}; set: #blockEnd1 for: #SHTextStylerST80 to: {self green}; set: #blockStart2 for: #SHTextStylerST80 to: {self magenta}; set: #blockEnd2 for: #SHTextStylerST80 to: {self magenta}; set: #blockStart3 for: #SHTextStylerST80 to: {self red}; set: #blockEnd3 for: #SHTextStylerST80 to: {self red}; set: #blockStart4 for: #SHTextStylerST80 to: {self green}; set: #blockEnd4 for: #SHTextStylerST80 to: {self green}; set: #blockStart5 for: #SHTextStylerST80 to: {self orange}; set: #blockEnd5 for: #SHTextStylerST80 to: {self orange}; set: #blockStart6 for: #SHTextStylerST80 to: {self magenta}; set: #blockEnd6 for: #SHTextStylerST80 to: {self magenta}; set: #blockStart7 for: #SHTextStylerST80 to: {self blue}; set: #blockEnd7 for: #SHTextStylerST80 to: {self blue}; set: #arrayStart for: #SHTextStylerST80 to: {self foregroundColor}; set: #arrayEnd for: #SHTextStylerST80 to: {self foregroundColor}; set: #arrayStart1 for: #SHTextStylerST80 to: {self foregroundColor}; set: #arrayEnd1 for: #SHTextStylerST80 to: {self foregroundColor}; set: #byteArrayStart for: #SHTextStylerST80 to: {self foregroundColor}; set: #byteArrayEnd for: #SHTextStylerST80 to: {self foregroundColor}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {self foregroundColor}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {self foregroundColor}; set: #leftBrace for: #SHTextStylerST80 to: {self foregroundColor}; set: #rightBrace for: #SHTextStylerST80 to: {self foregroundColor}; set: #cascadeSeparator for: #SHTextStylerST80 to: {self foregroundColor}; set: #statementSeparator for: #SHTextStylerST80 to: {self foregroundColor}; set: #externalCallType for: #SHTextStylerST80 to: {self foregroundColor}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {self foregroundColor}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {self foregroundColor}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {self foregroundColor}; set: #methodTempBar for: #SHTextStylerST80 to: {self foregroundColor}; set: #blockTempBar for: #SHTextStylerST80 to: {self foregroundColor}; set: #blockArgsBar for: #SHTextStylerST80 to: {self foregroundColor}; set: #primitive for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #module for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #blockTempVar for: #SHTextStylerST80 to: {self foregroundColor}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {self foregroundColor}; set: #instVar for: #SHTextStylerST80 to: {self foregroundColor}; set: #workspaceVar for: #SHTextStylerST80 to: {self foregroundColor}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {self red}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {self foregroundColor. {TextEmphasis italic. TextEmphasis underlined}}; set: #tempVar for: #SHTextStylerST80 to: {self foregroundColor}; set: #patternTempVar for: #SHTextStylerST80 to: {self foregroundColor}; set: #poolConstant for: #SHTextStylerST80 to: {self foregroundColor}; set: #classVar for: #SHTextStylerST80 to: {self foregroundColor}; set: #globalVar for: #SHTextStylerST80 to: {self foregroundColor}. "And the text differ" theme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor color: self red }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor color: self blue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: SolarizedTheme class>>addDarkSyntaxHighlighting: (in category 'instance creation') ----- addDarkSyntaxHighlighting: theme "self createDark apply." + theme + set: #color for: #TextAction to: self blue; + - theme set: #default for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #invalid for: #SHTextStylerST80 to: {self red}; set: #excessCode for: #SHTextStylerST80 to: {self red}; set: #comment for: #SHTextStylerST80 to: {self cyan}; set: #unfinishedComment for: #SHTextStylerST80 to: {self red. TextEmphasis italic}; set: #'$' for: #SHTextStylerST80 to: {self red}; set: #character for: #SHTextStylerST80 to: {self red}; set: #integer for: #SHTextStylerST80 to: {self red}; set: #number for: #SHTextStylerST80 to: {self red}; set: #- for: #SHTextStylerST80 to: {self red}; set: #symbol for: #SHTextStylerST80 to: {self blue}; set: #stringSymbol for: #SHTextStylerST80 to: {self blue}; set: #literalArray for: #SHTextStylerST80 to: {self blue}; set: #string for: #SHTextStylerST80 to: {self magenta. TextEmphasis normal}; set: #unfinishedString for: #SHTextStylerST80 to: {self red. TextEmphasis normal}; set: #assignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #literal for: #SHTextStylerST80 to: {nil. TextEmphasis italic}; set: #keyword for: #SHTextStylerST80 to: {self blue}; set: #binary for: #SHTextStylerST80 to: {self blue}; set: #unary for: #SHTextStylerST80 to: {self blue}; set: #incompleteKeyword for: #SHTextStylerST80 to: {self darkContentPrimary. TextEmphasis underlined}; set: #incompleteBinary for: #SHTextStylerST80 to: {self darkContentPrimary. TextEmphasis underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {self darkContentPrimary. TextEmphasis underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {self red}; set: #undefinedBinary for: #SHTextStylerST80 to: {self red}; set: #undefinedUnary for: #SHTextStylerST80 to: {self red}; set: #patternKeyword for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternBinary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternUnary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #self for: #SHTextStylerST80 to: {self red}; set: #super for: #SHTextStylerST80 to: {self red}; set: #true for: #SHTextStylerST80 to: {self red}; set: #false for: #SHTextStylerST80 to: {self red}; set: #nil for: #SHTextStylerST80 to: {self red}; set: #thisContext for: #SHTextStylerST80 to: {self red}; set: #return for: #SHTextStylerST80 to: {self red}; set: #patternArg for: #SHTextStylerST80 to: {self blue}; set: #methodArg for: #SHTextStylerST80 to: {self blue}; set: #blockPatternArg for: #SHTextStylerST80 to: {self blue}; set: #blockArg for: #SHTextStylerST80 to: {self blue}; set: #argument for: #SHTextStylerST80 to: {self blue}; set: #blockArgColon for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #leftParenthesis for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #rightParenthesis for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {self green}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {self green}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {self magenta}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {self magenta}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {self red}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {self red}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {self green}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {self green}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {self orange}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {self orange}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {self magenta}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {self magenta}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {self blue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {self blue}; set: #blockStart for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #blockEnd for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #blockStart1 for: #SHTextStylerST80 to: {self green}; set: #blockEnd1 for: #SHTextStylerST80 to: {self green}; set: #blockStart2 for: #SHTextStylerST80 to: {self magenta}; set: #blockEnd2 for: #SHTextStylerST80 to: {self magenta}; set: #blockStart3 for: #SHTextStylerST80 to: {self red}; set: #blockEnd3 for: #SHTextStylerST80 to: {self red}; set: #blockStart4 for: #SHTextStylerST80 to: {self green}; set: #blockEnd4 for: #SHTextStylerST80 to: {self green}; set: #blockStart5 for: #SHTextStylerST80 to: {self orange}; set: #blockEnd5 for: #SHTextStylerST80 to: {self orange}; set: #blockStart6 for: #SHTextStylerST80 to: {self magenta}; set: #blockEnd6 for: #SHTextStylerST80 to: {self magenta}; set: #blockStart7 for: #SHTextStylerST80 to: {self blue}; set: #blockEnd7 for: #SHTextStylerST80 to: {self blue}; set: #arrayStart for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #arrayEnd for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #arrayStart1 for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #arrayEnd1 for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #byteArrayStart for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #byteArrayEnd for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #leftBrace for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #rightBrace for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #cascadeSeparator for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #statementSeparator for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #externalCallType for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #methodTempBar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #blockTempBar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #blockArgsBar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #primitive for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #module for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #blockTempVar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #instVar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #workspaceVar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {self red}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {self darkContentPrimary. {TextEmphasis italic. TextEmphasis underlined}}; set: #tempVar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #patternTempVar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #poolConstant for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #classVar for: #SHTextStylerST80 to: {self darkContentPrimary}; set: #globalVar for: #SHTextStylerST80 to: {self darkContentPrimary}. "And the text differ" theme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor color: self red }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor color: self blue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: SolarizedTheme class>>addLightSyntaxHighlighting: (in category 'instance creation') ----- addLightSyntaxHighlighting: theme "self createLight apply." + theme + set: #color for: #TextAction to: self blue; + - theme set: #default for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #invalid for: #SHTextStylerST80 to: {self red}; set: #excessCode for: #SHTextStylerST80 to: {self red}; set: #comment for: #SHTextStylerST80 to: {self cyan}; set: #unfinishedComment for: #SHTextStylerST80 to: {self red. TextEmphasis italic}; set: #'$' for: #SHTextStylerST80 to: {self red}; set: #character for: #SHTextStylerST80 to: {self red}; set: #integer for: #SHTextStylerST80 to: {self red}; set: #number for: #SHTextStylerST80 to: {self red}; set: #- for: #SHTextStylerST80 to: {self red}; set: #symbol for: #SHTextStylerST80 to: {self blue}; set: #stringSymbol for: #SHTextStylerST80 to: {self blue}; set: #literalArray for: #SHTextStylerST80 to: {self blue}; set: #string for: #SHTextStylerST80 to: {self magenta. TextEmphasis normal}; set: #unfinishedString for: #SHTextStylerST80 to: {self red. TextEmphasis normal}; set: #assignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #literal for: #SHTextStylerST80 to: {nil. TextEmphasis italic}; set: #keyword for: #SHTextStylerST80 to: {self blue}; set: #binary for: #SHTextStylerST80 to: {self blue}; set: #unary for: #SHTextStylerST80 to: {self blue}; set: #incompleteKeyword for: #SHTextStylerST80 to: {self lightContentPrimary. TextEmphasis underlined}; set: #incompleteBinary for: #SHTextStylerST80 to: {self lightContentPrimary. TextEmphasis underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {self lightContentPrimary. TextEmphasis underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {self red}; set: #undefinedBinary for: #SHTextStylerST80 to: {self red}; set: #undefinedUnary for: #SHTextStylerST80 to: {self red}; set: #patternKeyword for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternBinary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternUnary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #self for: #SHTextStylerST80 to: {self red}; set: #super for: #SHTextStylerST80 to: {self red}; set: #true for: #SHTextStylerST80 to: {self red}; set: #false for: #SHTextStylerST80 to: {self red}; set: #nil for: #SHTextStylerST80 to: {self red}; set: #thisContext for: #SHTextStylerST80 to: {self red}; set: #return for: #SHTextStylerST80 to: {self red}; set: #patternArg for: #SHTextStylerST80 to: {self blue}; set: #methodArg for: #SHTextStylerST80 to: {self blue}; set: #blockPatternArg for: #SHTextStylerST80 to: {self blue}; set: #blockArg for: #SHTextStylerST80 to: {self blue}; set: #argument for: #SHTextStylerST80 to: {self blue}; set: #blockArgColon for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #leftParenthesis for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #rightParenthesis for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {self green}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {self green}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {self magenta}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {self magenta}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {self red}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {self red}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {self green}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {self green}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {self orange}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {self orange}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {self magenta}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {self magenta}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {self blue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {self blue}; set: #blockStart for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #blockEnd for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #blockStart1 for: #SHTextStylerST80 to: {self green}; set: #blockEnd1 for: #SHTextStylerST80 to: {self green}; set: #blockStart2 for: #SHTextStylerST80 to: {self magenta}; set: #blockEnd2 for: #SHTextStylerST80 to: {self magenta}; set: #blockStart3 for: #SHTextStylerST80 to: {self red}; set: #blockEnd3 for: #SHTextStylerST80 to: {self red}; set: #blockStart4 for: #SHTextStylerST80 to: {self green}; set: #blockEnd4 for: #SHTextStylerST80 to: {self green}; set: #blockStart5 for: #SHTextStylerST80 to: {self orange}; set: #blockEnd5 for: #SHTextStylerST80 to: {self orange}; set: #blockStart6 for: #SHTextStylerST80 to: {self magenta}; set: #blockEnd6 for: #SHTextStylerST80 to: {self magenta}; set: #blockStart7 for: #SHTextStylerST80 to: {self blue}; set: #blockEnd7 for: #SHTextStylerST80 to: {self blue}; set: #arrayStart for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #arrayEnd for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #arrayStart1 for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #arrayEnd1 for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #byteArrayStart for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #byteArrayEnd for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #leftBrace for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #rightBrace for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #cascadeSeparator for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #statementSeparator for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #externalCallType for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #methodTempBar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #blockTempBar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #blockArgsBar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #primitive for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #module for: #SHTextStylerST80 to: {self green. TextEmphasis bold}; set: #blockTempVar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #instVar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #workspaceVar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {self red}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {self lightContentPrimary. {TextEmphasis italic. TextEmphasis underlined}}; set: #tempVar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #patternTempVar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #poolConstant for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #classVar for: #SHTextStylerST80 to: {self lightContentPrimary}; set: #globalVar for: #SHTextStylerST80 to: {self lightContentPrimary}. "And the text differ" theme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor color: self red }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor color: self blue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: SqueakTheme class>>addSyntaxHighlighting: (in category 'instance creation') ----- addSyntaxHighlighting: theme "This was the former sub-dued highlighting." + theme + set: #color for: #TextAction to: (Color r: 0.4 g: 0.0 b: 1); + - theme set: #default for: #SHTextStylerST80 to: {Color black}; set: #invalid for: #SHTextStylerST80 to: {Color red}; set: #excessCode for: #SHTextStylerST80 to: {Color red}; set: #comment for: #SHTextStylerST80 to: {Color cyan muchDarker}; set: #unfinishedComment for: #SHTextStylerST80 to: {Color red muchDarker. TextEmphasis italic}; set: #'$' for: #SHTextStylerST80 to: {Color red muchDarker}; set: #character for: #SHTextStylerST80 to: {Color red muchDarker}; set: #integer for: #SHTextStylerST80 to: {Color red muchDarker}; set: #number for: #SHTextStylerST80 to: {Color red muchDarker}; set: #- for: #SHTextStylerST80 to: {Color red muchDarker}; set: #symbol for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #stringSymbol for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #literalArray for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #string for: #SHTextStylerST80 to: {Color magenta muchDarker. TextEmphasis normal}; set: #unfinishedString for: #SHTextStylerST80 to: {Color red. TextEmphasis normal}; set: #assignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #literal for: #SHTextStylerST80 to: {nil. TextEmphasis italic}; set: #keyword for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #binary for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #unary for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #incompleteKeyword for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #incompleteBinary for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {Color red}; set: #undefinedBinary for: #SHTextStylerST80 to: {Color red}; set: #undefinedUnary for: #SHTextStylerST80 to: {Color red}; set: #patternKeyword for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternBinary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternUnary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #self for: #SHTextStylerST80 to: {Color red muchDarker}; set: #super for: #SHTextStylerST80 to: {Color red muchDarker}; set: #true for: #SHTextStylerST80 to: {Color red muchDarker}; set: #false for: #SHTextStylerST80 to: {Color red muchDarker}; set: #nil for: #SHTextStylerST80 to: {Color red muchDarker}; set: #thisContext for: #SHTextStylerST80 to: {Color red muchDarker}; set: #return for: #SHTextStylerST80 to: {Color red muchDarker}; set: #patternArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #methodArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockPatternArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #argument for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockArgColon for: #SHTextStylerST80 to: {Color black}; set: #leftParenthesis for: #SHTextStylerST80 to: {Color black}; set: #rightParenthesis for: #SHTextStylerST80 to: {Color black}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {Color green darker}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {Color green darker}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {Color orange darker}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {Color orange darker}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {Color blue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {Color blue}; set: #blockStart for: #SHTextStylerST80 to: {Color black}; set: #blockEnd for: #SHTextStylerST80 to: {Color black}; set: #blockStart1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #blockEnd1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #blockStart2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #blockEnd2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #blockStart3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #blockEnd3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #blockStart4 for: #SHTextStylerST80 to: {Color green darker}; set: #blockEnd4 for: #SHTextStylerST80 to: {Color green darker}; set: #blockStart5 for: #SHTextStylerST80 to: {Color orange darker}; set: #blockEnd5 for: #SHTextStylerST80 to: {Color orange darker}; set: #blockStart6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #blockEnd6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #blockStart7 for: #SHTextStylerST80 to: {Color blue}; set: #blockEnd7 for: #SHTextStylerST80 to: {Color blue}; set: #arrayStart for: #SHTextStylerST80 to: {Color black}; set: #arrayEnd for: #SHTextStylerST80 to: {Color black}; set: #arrayStart1 for: #SHTextStylerST80 to: {Color black}; set: #arrayEnd1 for: #SHTextStylerST80 to: {Color black}; set: #byteArrayStart for: #SHTextStylerST80 to: {Color black}; set: #byteArrayEnd for: #SHTextStylerST80 to: {Color black}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {Color black}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {Color black}; set: #leftBrace for: #SHTextStylerST80 to: {Color black}; set: #rightBrace for: #SHTextStylerST80 to: {Color black}; set: #cascadeSeparator for: #SHTextStylerST80 to: {Color black}; set: #statementSeparator for: #SHTextStylerST80 to: {Color black}; set: #externalCallType for: #SHTextStylerST80 to: {Color black}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {Color black}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {Color black}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {Color black}; set: #methodTempBar for: #SHTextStylerST80 to: {Color gray}; set: #blockTempBar for: #SHTextStylerST80 to: {Color gray}; set: #blockArgsBar for: #SHTextStylerST80 to: {Color gray}; set: #primitive for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #module for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #blockTempVar for: #SHTextStylerST80 to: {Color gray}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {Color gray}; set: #instVar for: #SHTextStylerST80 to: {Color black}; set: #workspaceVar for: #SHTextStylerST80 to: {Color black}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {Color red}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {Color gray darker. {TextEmphasis italic. TextEmphasis underlined}}; set: #tempVar for: #SHTextStylerST80 to: {Color gray darker}; set: #patternTempVar for: #SHTextStylerST80 to: {Color gray darker}; set: #poolConstant for: #SHTextStylerST80 to: {Color gray muchDarker}; set: #classVar for: #SHTextStylerST80 to: {Color gray muchDarker}; set: #globalVar for: #SHTextStylerST80 to: {Color black}. "And the text differ" theme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor red }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor blue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! From commits at source.squeak.org Thu Aug 11 15:09:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 15:09:45 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.38.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.38.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.38 Author: mt Time: 11 August 2016, 5:09:37.394564 pm UUID: 8d73b42c-7fc5-6140-a85c-6df590f8772f Ancestors: Help-Squeak-Project-mt.37 Get release notes from the file system to not spoil the image with large strings. =============== Diff against Help-Squeak-Project-mt.37 =============== Item was added: + ----- Method: SqueakReleaseNotes class>>doesNotUnderstand: (in category 'accessing') ----- + doesNotUnderstand: msg + + msg arguments size > 0 ifTrue: [^ super doesNotUnderstand: msg]. + + "For example: doc/release-notes-51" + ^ (HelpTopic + title: msg selector + readOnlyContents: (HtmlReadWriter textFromFileNamed: ((FileDirectory default directoryNamed: 'doc') fullNameFor: msg selector)) ) key: msg selector! Item was changed: ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- pages + + | dir | + dir := FileDirectory default directoryNamed: 'doc'. + ^ dir exists + ifFalse: [#()] + ifTrue: [dir entries collect: [:entry | entry name]]! - ^#(releaseNotes51 releaseNotes50)! From commits at source.squeak.org Thu Aug 11 15:16:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 15:16:40 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.39.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.39.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.39 Author: mt Time: 11 August 2016, 5:16:27.921564 pm UUID: 95f725e1-8ec1-e244-9fc6-502dc6017dcf Ancestors: Help-Squeak-Project-mt.38 Get release notes from the file system to not spoil the image with large strings. (e.g. /doc/release-notes-46). =============== Diff against Help-Squeak-Project-mt.38 =============== Item was removed: - ----- Method: SqueakReleaseNotes class>>releaseNotes50 (in category 'pages') ----- - releaseNotes50 - - ^HelpTopic - title: '5.0 / 4.6' - contents: 'Squeak 5.0 - Release Notes - - A New Memory Model and Virtual Machine - - Fast Become - Squeak 5 introduces a new object model and VM known as "Spur". Presented [1] by Eliot Miranda and Clément Béra at the International Symposium on Memory Management in year 2015, this new VM retains the direct-pointer representation of objects in previous Squeak versions but now without requiring a full scan of the heap for become. This is done by introducing hidden forwarding objects which allow references to be updated lazily as they are encountered. Spur''s innovation is in avoiding explicit read barriers in all common cases. - - Additional Immediate Types - The new Spur memory model supports immediate Characters, so that Characters with unicode greater than 255 can be tested via #==, and wide string access is much faster. The 64-bit version, still under development, also provides immediate floats, occupying the middle 8th of the double precision exponent range. - - Simplified and Ready for 64-bit - Internally Spur uses a 64-bit object header, a representation shared between the 32-bit and 64-bit versions, and one that is significantly simpler than the three different header sizes used in the previous version. This simplicity means that the JIT now generates code to implement more primitives, in particular new and new:, resulting in significantly higher performance, at the cost of a 15% increase in image size. - - Enhanced Memory Management - Spur has a segmented heap, allowing the heap to grow and shrink a segment at a time. It provides per-object pinning to ensure specific objects will not be moved by the garbage collector, hence simplifying the FFI. Spur provides Ephemerons which allow for per-object finalization and the prevention of uncollectable cycles, for example in global property lists like DependentsFields (although this support has yet to be applied to the system). - - - Squeak now runs on ARM - - As a natural output of the Scratch application on Rasberry Pi project, the Spur VM can now run on the Rasberry Pi. - - - The Future of Spur - - Work is underway on an innovative adaptive optimizer/speculative inliner, and a 64-bit JIT for x64, and a global incremental mark-sweep collector is planned. See [2]. - - [1] -- http://conf.researchr.org/event/ismm-2015/ismm-2015-papers-a-partial-read-barrier-for-efficient-support-of-live-object-oriented-programming - [2] -- http://www.mirandabanda.org/cogblog/cog-projects/ - !! - ]style[(10 1 13 40 2 11 537 26 313 31 422 26 448 22 119 19 374)a2bFBitstreamVeraSerif#32.0,FBitstreamVeraSans#20.0a2,a2FBitstreamVeraSerif#24.0-,FBitstreamVeraSans#20.0,,b,,b,,b,,b,,FBitstreamVeraSans#20.0,,FBitstreamVeraSans#20.0,!!' readStream nextChunkText! Item was removed: - ----- Method: SqueakReleaseNotes class>>releaseNotes51 (in category 'pages') ----- - releaseNotes51 - - ^HelpTopic - title: '5.1' - contents: 'TBD.'! From commits at source.squeak.org Thu Aug 11 15:26:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 15:26:27 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.40.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.40.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.40 Author: mt Time: 11 August 2016, 5:26:19.085564 pm UUID: 06ded287-6848-1844-9baf-ea302e76df60 Ancestors: Help-Squeak-Project-mt.39 Sort release notes so that the latest comes first. =============== Diff against Help-Squeak-Project-mt.39 =============== Item was changed: ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- pages | dir | dir := FileDirectory default directoryNamed: 'doc'. ^ dir exists ifFalse: [#()] + ifTrue: [(dir entries collect: [:entry | entry name]) sortBy: [:a :b | a >= b]]! - ifTrue: [dir entries collect: [:entry | entry name]]! From commits at source.squeak.org Thu Aug 11 15:45:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 15:45:08 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.41.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.41.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.41 Author: mt Time: 11 August 2016, 5:44:59.160413 pm UUID: fa608da1-d9db-df4e-84cd-fbb69bdf973d Ancestors: Help-Squeak-Project-mt.40 Minor release notes clean-up. Should work now. We only have to create/fill the release-notes-XX files. :-) =============== Diff against Help-Squeak-Project-mt.40 =============== Item was changed: ----- Method: SqueakReleaseNotes class>>doesNotUnderstand: (in category 'accessing') ----- doesNotUnderstand: msg msg arguments size > 0 ifTrue: [^ super doesNotUnderstand: msg]. "For example: doc/release-notes-51" ^ (HelpTopic title: msg selector + readOnlyContents: (HtmlReadWriter textFromFileNamed: ((FileDirectory default directoryNamed: self folderName) fullNameFor: msg selector)) ) key: msg selector! - readOnlyContents: (HtmlReadWriter textFromFileNamed: ((FileDirectory default directoryNamed: 'doc') fullNameFor: msg selector)) ) key: msg selector! Item was added: + ----- Method: SqueakReleaseNotes class>>folderName (in category 'accessing') ----- + folderName + + ^ 'release-notes'! Item was changed: ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- pages | dir | + dir := FileDirectory default directoryNamed: self folderName. - dir := FileDirectory default directoryNamed: 'doc'. ^ dir exists ifFalse: [#()] ifTrue: [(dir entries collect: [:entry | entry name]) sortBy: [:a :b | a >= b]]! From asqueaker at gmail.com Thu Aug 11 15:52:05 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Aug 11 15:52:50 2016 Subject: [squeak-dev] The Trunk: Tools-mt.713.mcz In-Reply-To: <57ac388f.438d370a.dcfdc.3080SMTPIN_ADDED_MISSING@mx.google.com> References: <57ac388f.438d370a.dcfdc.3080SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: I did check the package and perhaps I got confused by 1) the only sender is from SystemWindow, part of Morphic and, 2) many of the categories of #representsSameBrowseeAs: implementations are "morphic" or "morphic ui". But, okay, yes, MVC should someday support this feature too. On Thu, Aug 11, 2016 at 3:33 AM, wrote: > Marcel Taeumel uploaded a new version of Tools to project The Trunk: > http://source.squeak.org/trunk/Tools-mt.713.mcz > > ==================== Summary ==================== > > Name: Tools-mt.713 > Author: mt > Time: 11 August 2016, 10:33:57.164968 am > UUID: fe28f870-3f1e-4c4f-82fd-8aad483115f2 > Ancestors: Tools-mt.712 > > Fix Morphic dependency for Morphics window reusing mechanism. Tools should also work from within MVC. > > =============== Diff against Tools-mt.712 =============== > > Item was added: > + ----- Method: DependencyBrowser>>representsSameBrowseeAs: (in category 'morphic ui') ----- > + representsSameBrowseeAs: anotherModel > + ^ self hasUnacceptedEdits not! > > From Marcel.Taeumel at hpi.de Thu Aug 11 15:57:41 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 15:57:44 2016 Subject: AW: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: Message-ID: <1470931061239-4910546.post@n4.nabble.com> Herbert K?nig wrote > Hi,? > > I meant the attached png. > In the halo there is a red halo button which i pressed.? > The other menu was the preference browser.? > > Again this may depend on one of my other preferences and may not happen in > the standard image. > I opened the preference browser and went through the categorie top to > bottom.? > > Mabe you ned to load my preferences for which i put a link in my other > post. > > Sorry for the confusion, seems i was absent minded. > > Cheers,? > > Herbert.? >
> -------- Urspr?ngliche Nachricht -------- >
>
> Von: "marcel.taeumel" < > Marcel.Taeumel@ > > >
>
> Datum:11.08.2016 11:10 (GMT+01:00) >
>
> An: > squeak-dev@.squeakfoundation > >
>
> Betreff: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed > for > new features; only bug fixes or text updates >
>
>
> Herbert K?nig wrote >> Hi, >> >> when in the preferences browser, flaps selecting 'classic navigator >> enabled' gives a debugger as attached. >> >> While creating the png I brought up the halo and wanted to click the >> menu button to export. If there is another window under the menu button >> (my preference browser) clicking brings the other menu to the front and >> the halo disappears. Move the other window out of the way and it works. >> >> Not to forget: I like it, thanks to all for the work. >> >> Cheers, >> >> Herbert >> >> Am 10.08.2016 um 17:21 schrieb marcel.taeumel: >>> marcel.taeumel wrote >>>> Hi, there! >>>> >>>> It's "feature freeze" time. :-) Please do not try out new features in >>>> the >>>> Trunk for now. If you forgot something, please ask first. We'll find a >>>> way. >>>> >>>> @Chris: What is needed in the image for the MC History function? There >>>> was >>>> at least one fix for the ServiceEntry left in your inbox, right? >>>> >>>> We will now work on correcting some in-image texts, release >>>> information, >>>> etc. We will also work on the release automation scripts using >>>> TravisCI, >>>> smalltalkCI, and GitHub. >>>> >>>> The next dates are: >>>>??? * Code Freeze on August 14, 23:59 AOE >>>>??? * Release between August 15 and 19 >>>> >>>> Let's hope that this will work out as expected. :-) >>>> >>>> Best, >>>> Marcel >>> Hi, there. >>> >>> A first All-In-One can be tried out from here: >>> https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip >>> >>> Note that we are looking for start-up bugs in the Linux scripts. >>> Note that we have not yet fixed the Windows .ini bug. >>> Note that Windows 10 is quite anxious about starting an unsigned >>> executable. >>> Note that the release artifacts will be on files.squeak.org soon. Be >>> patient. >>> Note that we still want to use a more recent CogVM if some one would >>> declare >>> one as stable. >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: >>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>> >> >> >> >> >> >> Test.png (74K) >> <http://forum.world.st/attachment/4910354/0/Test.png> > > Hey Herbert, > > I cannot reproduce this bug: > > "While creating the png I brought up the halo and wanted to click the > menu button to export. If there is another window under the menu button > (my preference browser) clicking brings the other menu to the front and > the halo disappears. Move the other window out of the way and it works. " > > What is "the other menu"? What do you mean with "while creating the png"? > Which PNG? > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910429.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. Hi Herbert, I loaded your my.prefs, invoked a debugger window, put it over another window, invoked the halo, clicked on the red menu button, the halo disappears but the correct pop-up menu appears, I click export -> png, done. So far, I encountered no problem with your preferences and with workflow. Hmmm.... Best, Marcel -- View this message in context: http://forum.world.st/AW-squeak-dev-Re-ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-s-tp4910485p4910546.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Aug 11 16:05:05 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 16:05:08 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.713.mcz In-Reply-To: References: Message-ID: <1470931505043-4910547.post@n4.nabble.com> Chris Muller-3 wrote > I did check the package and perhaps I got confused by 1) the only > sender is from SystemWindow, part of Morphic and, 2) many of the > categories of #representsSameBrowseeAs: implementations are "morphic" > or "morphic ui". > > But, okay, yes, MVC should someday support this feature too. > > On Thu, Aug 11, 2016 at 3:33 AM, < > commits@.squeak > > wrote: >> Marcel Taeumel uploaded a new version of Tools to project The Trunk: >> http://source.squeak.org/trunk/Tools-mt.713.mcz >> >> ==================== Summary ==================== >> >> Name: Tools-mt.713 >> Author: mt >> Time: 11 August 2016, 10:33:57.164968 am >> UUID: fe28f870-3f1e-4c4f-82fd-8aad483115f2 >> Ancestors: Tools-mt.712 >> >> Fix Morphic dependency for Morphics window reusing mechanism. Tools >> should also work from within MVC. >> >> =============== Diff against Tools-mt.712 =============== >> >> Item was added: >> + ----- Method: DependencyBrowser>>representsSameBrowseeAs: (in category >> 'morphic ui') ----- >> + representsSameBrowseeAs: anotherModel >> + ^ self hasUnacceptedEdits not! >> >> Hi Chris, yes, "morphic ui" but not in an extension category for Morphic. :-) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Tools-mt-713-mcz-tp4910417p4910547.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Thu Aug 11 16:12:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 16:12:13 2016 Subject: [squeak-dev] The Trunk: Services-Base-mt.60.mcz Message-ID: Marcel Taeumel uploaded a new version of Services-Base to project The Trunk: http://source.squeak.org/trunk/Services-Base-mt.60.mcz ==================== Summary ==================== Name: Services-Base-mt.60 Author: mt Time: 11 August 2016, 6:12:05.982369 pm UUID: 2acc56c4-575c-c546-b957-d67d384b4fd8 Ancestors: Services-Base-cmm.59 Fix some old window color left-over. =============== Diff against Services-Base-cmm.59 =============== Item was changed: ----- Method: ServiceGui>>styleBar: (in category 'styling') ----- styleBar: aBar aBar setNameTo: 'button bar'. aBar beSticky; hResizing: #spaceFill; wrapCentering: #center; cellPositioning: #leftCenter; clipSubmorphs: true; cellInset: 0; + color: Color veryVeryLightGray.! - color: Preferences defaultWindowColor.! From commits at source.squeak.org Thu Aug 11 16:13:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 16:13:27 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1260.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1260.mcz ==================== Summary ==================== Name: Morphic-mt.1260 Author: mt Time: 11 August 2016, 6:12:50.268369 pm UUID: e7878093-edbd-7f45-8d64-51ab7569931c Ancestors: Morphic-mt.1259 Fix some old window color left-over. =============== Diff against Morphic-mt.1259 =============== Item was changed: ----- Method: ProportionalSplitterMorph>>initialize (in category 'initialization') ----- initialize super initialize. self beSplitsLeftAndRight. leftOrTop := OrderedCollection new. rightOrBottom := OrderedCollection new. Preferences showSplitterHandles ifTrue: [ handle := CircleMorph new borderWidth: 0; extent: 4@4; yourself. handle fillStyle: ((GradientFillStyle + ramp: {0.0 -> Color veryVeryLightGray muchLighter. + 1.0 -> Color veryVeryLightGray darker}) - ramp: {0.0 -> Preferences defaultWindowColor muchLighter. - 1.0 -> Preferences defaultWindowColor darker}) origin: handle topLeft; direction: 0 @ handle bounds extent y; normal: handle bounds extent x @ 0; radial: false; yourself). self addMorphCentered: handle]. self initializeMovements! From asqueaker at gmail.com Thu Aug 11 16:22:03 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Aug 11 16:22:49 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.38.mcz In-Reply-To: <57ac953c.8c41370a.a3cb1.3cfeSMTPIN_ADDED_MISSING@mx.google.com> References: <57ac953c.8c41370a.a3cb1.3cfeSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Thank you! -- for working to keep large String literals out of the image.. :) On Thu, Aug 11, 2016 at 10:09 AM, wrote: > Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: > http://source.squeak.org/trunk/Help-Squeak-Project-mt.38.mcz > > ==================== Summary ==================== > > Name: Help-Squeak-Project-mt.38 > Author: mt > Time: 11 August 2016, 5:09:37.394564 pm > UUID: 8d73b42c-7fc5-6140-a85c-6df590f8772f > Ancestors: Help-Squeak-Project-mt.37 > > Get release notes from the file system to not spoil the image with large strings. > > =============== Diff against Help-Squeak-Project-mt.37 =============== > > Item was added: > + ----- Method: SqueakReleaseNotes class>>doesNotUnderstand: (in category 'accessing') ----- > + doesNotUnderstand: msg > + > + msg arguments size > 0 ifTrue: [^ super doesNotUnderstand: msg]. > + > + "For example: doc/release-notes-51" > + ^ (HelpTopic > + title: msg selector > + readOnlyContents: (HtmlReadWriter textFromFileNamed: ((FileDirectory default directoryNamed: 'doc') fullNameFor: msg selector)) ) key: msg selector! > > Item was changed: > ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- > pages > + > + | dir | > + dir := FileDirectory default directoryNamed: 'doc'. > + ^ dir exists > + ifFalse: [#()] > + ifTrue: [dir entries collect: [:entry | entry name]]! > - ^#(releaseNotes51 releaseNotes50)! > > From asqueaker at gmail.com Thu Aug 11 16:27:25 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Aug 11 16:28:08 2016 Subject: [squeak-dev] Re: The Trunk: Tools-mt.713.mcz In-Reply-To: <1470931505043-4910547.post@n4.nabble.com> References: <1470931505043-4910547.post@n4.nabble.com> Message-ID: > yes, "morphic ui" but not in an extension category for Morphic. :-) ... but almost as equally incorrect... :-) We'll fix later... From herbertkoenig at gmx.net Thu Aug 11 17:25:00 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Thu Aug 11 17:25:00 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1470931061239-4910546.post@n4.nabble.com> References: <1470931061239-4910546.post@n4.nabble.com> Message-ID: <76c47ef7-69a5-c276-f630-820649303e6d@gmx.net> Hi Marcel, I just updated the all in one to trunk and it still happens. To be clear, the steps are: Open Preferences from the tools menu. Select flaps Select "Classic navigator enabled" (deselect if already enabled, reselect). 1- This brings up a debugger which imo shouldn't happen. Move the debugger window over the PreferencesBrowser window so that the halo appears inside the PreferenceBrowser window. Make the halo appear. Click the red halo button. 2- The debugger window goes to the background and is covered by the PreferenceBrowser window. I'm on Win 7 home 64 bit, all but the most recent updates installed. Download taking ages... Do all again on a fresh all in one and it's still there. Cheers, Herbert Am 11.08.2016 um 17:57 schrieb marcel.taeumel: > Herbert K?nig wrote >> Hi, >> >> I meant the attached png. >> In the halo there is a red halo button which i pressed. >> The other menu was the preference browser. >> >> Again this may depend on one of my other preferences and may not happen in >> the standard image. >> I opened the preference browser and went through the categorie top to >> bottom. >> >> Mabe you ned to load my preferences for which i put a link in my other >> post. >> >> Sorry for the confusion, seems i was absent minded. >> >> Cheers, >> >> Herbert. >>
>> -------- Urspr?ngliche Nachricht -------- >>
>>
>> Von: "marcel.taeumel" < >> Marcel.Taeumel@ >> > >>
>>
>> Datum:11.08.2016 11:10 (GMT+01:00) >>
>>
>> An: >> squeak-dev@.squeakfoundation >> >>
>>
>> Betreff: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed >> for >> new features; only bug fixes or text updates >>
>>
>>
>> Herbert K?nig wrote >>> Hi, >>> >>> when in the preferences browser, flaps selecting 'classic navigator >>> enabled' gives a debugger as attached. >>> >>> While creating the png I brought up the halo and wanted to click the >>> menu button to export. If there is another window under the menu button >>> (my preference browser) clicking brings the other menu to the front and >>> the halo disappears. Move the other window out of the way and it works. >>> >>> Not to forget: I like it, thanks to all for the work. >>> >>> Cheers, >>> >>> Herbert >>> >>> Am 10.08.2016 um 17:21 schrieb marcel.taeumel: >>>> marcel.taeumel wrote >>>>> Hi, there! >>>>> >>>>> It's "feature freeze" time. :-) Please do not try out new features in >>>>> the >>>>> Trunk for now. If you forgot something, please ask first. We'll find a >>>>> way. >>>>> >>>>> @Chris: What is needed in the image for the MC History function? There >>>>> was >>>>> at least one fix for the ServiceEntry left in your inbox, right? >>>>> >>>>> We will now work on correcting some in-image texts, release >>>>> information, >>>>> etc. We will also work on the release automation scripts using >>>>> TravisCI, >>>>> smalltalkCI, and GitHub. >>>>> >>>>> The next dates are: >>>>> * Code Freeze on August 14, 23:59 AOE >>>>> * Release between August 15 and 19 >>>>> >>>>> Let's hope that this will work out as expected. :-) >>>>> >>>>> Best, >>>>> Marcel >>>> Hi, there. >>>> >>>> A first All-In-One can be tried out from here: >>>> https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip >>>> >>>> Note that we are looking for start-up bugs in the Linux scripts. >>>> Note that we have not yet fixed the Windows .ini bug. >>>> Note that Windows 10 is quite anxious about starting an unsigned >>>> executable. >>>> Note that the release artifacts will be on files.squeak.org soon. Be >>>> patient. >>>> Note that we still want to use a more recent CogVM if some one would >>>> declare >>>> one as stable. >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910338.html >>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>> >>> >>> >>> >>> >>> Test.png (74K) >>> <http://forum.world.st/attachment/4910354/0/Test.png> >> Hey Herbert, >> >> I cannot reproduce this bug: >> >> "While creating the png I brought up the halo and wanted to click the >> menu button to export. If there is another window under the menu button >> (my preference browser) clicking brings the other menu to the front and >> the halo disappears. Move the other window out of the way and it works. " >> >> What is "the other menu"? What do you mean with "while creating the png"? >> Which PNG? >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910429.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > Hi Herbert, > > I loaded your my.prefs, invoked a debugger window, put it over another > window, invoked the halo, clicked on the red menu button, the halo > disappears but the correct pop-up menu appears, I click export -> png, done. > > So far, I encountered no problem with your preferences and with workflow. > Hmmm.... > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/AW-squeak-dev-Re-ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-s-tp4910485p4910546.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From nicolas.cellier.aka.nice at gmail.com Thu Aug 11 17:26:56 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Thu Aug 11 17:27:00 2016 Subject: [squeak-dev] Bug when filtering TestRunner modules Message-ID: With this configuration: mouseOverForKeyboardFocus And latest update (16363) Open a test runner type 'ali' to filter the sunit tests list (middle pane) type 'ali' to filter the module list (left pane) select the later (Test-Localization) => Red Square of death Error: subscript is out of bounds: 2 This must be related to the fact that there's no test matching 'ali' in Test-Localization ---------------------------------- Also when filtering/unfilltering (backspace) the list of modules, the list of tests is not updated accordingly. It should. ----------------------------------- With the speed at which Marcel fixes things, I presume it's completely vain to open a bug entry on mantis for so few ;) It will be corrected before I do so. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160811/b2fe539a/attachment.htm From nicolas.cellier.aka.nice at gmail.com Thu Aug 11 17:34:17 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Thu Aug 11 17:34:20 2016 Subject: [squeak-dev] Windows opening in background Message-ID: It often happens that a window opens behind the currently active one. Typically, I want to 'debug it' on a subexpression in the debugger. The second debugger opens in background, or does it go into background after opening? Anyway, it's sufficiently fast that I got no feedback for my action until I minimize or move the original debugger. With respect to my own workflow, this is sufficiently annoying to call that a regression. Is it just me? Nicolas -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160811/73c6e3e8/attachment.htm From commits at source.squeak.org Thu Aug 11 17:35:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 17:35:19 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1261.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1261.mcz ==================== Summary ==================== Name: Morphic-mt.1261 Author: mt Time: 11 August 2016, 7:34:35.866369 pm UUID: 8dc6212e-7cad-3149-a3ca-26faef7e0ecf Ancestors: Morphic-mt.1260 Make radio buttons, check boxes, sub-menu markers theme-able. =============== Diff against Morphic-mt.1260 =============== Item was added: + ----- Method: MenuIcons class>>checkBoxOff (in category 'accessing - icons') ----- + checkBoxOff + + ^ Icons + at: #'checkBoxOff' + ifAbsentPut:[ (Form + extent: 12@12 + depth: 32 + fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) + offset: 0@0) ].! Item was added: + ----- Method: MenuIcons class>>checkBoxOffColorized: (in category 'accessing - icons') ----- + checkBoxOffColorized: aColor + + ^ self checkBoxOff + collectColors: [:c | aColor alpha: c alpha]! Item was added: + ----- Method: MenuIcons class>>checkBoxOn (in category 'accessing - icons') ----- + checkBoxOn + + ^ Icons + at: #'checkBoxOn' + ifAbsentPut:[ (Form + extent: 12@12 + depth: 32 + fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) + offset: 0@0) ].! Item was added: + ----- Method: MenuIcons class>>checkBoxOnColorized: (in category 'accessing - icons') ----- + checkBoxOnColorized: aColor + + ^ self checkBoxOn + collectColors: [:c | aColor alpha: c alpha]! Item was added: + ----- Method: MenuIcons class>>checkBoxPressed (in category 'accessing - icons') ----- + checkBoxPressed + + ^ Icons + at: #'checkBoxPressed' + ifAbsentPut:[ (Form + extent: 12@12 + depth: 32 + fromArray: #( 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 0 0 0 0 4294967295 0 0 4294967295 4294967295 0 0 4294967295 0 0 0 0 4294967295 0 0 4294967295 4294967295 0 0 4294967295 0 0 0 0 4294967295 0 0 4294967295 4294967295 0 0 4294967295 0 0 0 0 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295) + offset: 0@0) ].! Item was added: + ----- Method: MenuIcons class>>checkBoxPressedColorized: (in category 'accessing - icons') ----- + checkBoxPressedColorized: aColor + + ^ self checkBoxPressed + collectColors: [:c | aColor alpha: c alpha]! Item was added: + ----- Method: MenuIcons class>>radioButtonOff (in category 'accessing - icons') ----- + radioButtonOff + + ^ Icons + at: #'radioButtonOff' + ifAbsentPut:[ (Form + extent: 12@12 + depth: 32 + fromArray: #( 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0 0 0 4294967295 0 0 0 0 0 0 4294967295 0 0 0 4294967295 0 0 0 0 0 0 0 0 4294967295 0 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 4294967295 0 0 0 0 0 0 0 0 0 0 4294967295 0 4294967295 0 0 0 0 0 0 0 0 4294967295 0 0 0 4294967295 0 0 0 0 0 0 4294967295 0 0 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0) + offset: 0@0)].! Item was added: + ----- Method: MenuIcons class>>radioButtonOffColorized: (in category 'accessing - icons') ----- + radioButtonOffColorized: aColor + + ^ self radioButtonOff + collectColors: [:c | aColor alpha: c alpha]! Item was added: + ----- Method: MenuIcons class>>radioButtonOn (in category 'accessing - icons') ----- + radioButtonOn + + ^ Icons + at: #'radioButtonOn' + ifAbsentPut:[ (Form + extent: 12@12 + depth: 32 + fromArray: #( 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0 0 0 4294967295 0 0 0 0 0 0 4294967295 0 0 0 4294967295 0 0 0 0 0 0 0 0 4294967295 0 4294967295 0 0 0 4294967295 4294967295 4294967295 4294967295 0 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 0 4294967295 4294967295 4294967295 4294967295 0 0 0 4294967295 0 4294967295 0 0 0 0 0 0 0 0 4294967295 0 0 0 4294967295 0 0 0 0 0 0 4294967295 0 0 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0) + offset: 0@0)].! Item was added: + ----- Method: MenuIcons class>>radioButtonOnColorized: (in category 'accessing - icons') ----- + radioButtonOnColorized: aColor + + ^ self radioButtonOn + collectColors: [:c | aColor alpha: c alpha]! Item was added: + ----- Method: MenuIcons class>>radioButtonPressed (in category 'accessing - icons') ----- + radioButtonPressed + + ^ Icons + at: #'radioButtonPressed' + ifAbsentPut:[ (Form + extent: 12@12 + depth: 32 + fromArray: #( 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0 0 0 4294967295 0 0 0 0 0 0 4294967295 0 0 0 4294967295 0 0 0 0 0 0 0 0 4294967295 0 4294967295 0 0 0 4294967295 4294967295 4294967295 4294967295 0 0 0 4294967295 4294967295 0 0 4294967295 0 0 0 0 4294967295 0 0 4294967295 4294967295 0 0 4294967295 0 0 0 0 4294967295 0 0 4294967295 4294967295 0 0 4294967295 0 0 0 0 4294967295 0 0 4294967295 4294967295 0 0 4294967295 0 0 0 0 4294967295 0 0 4294967295 4294967295 0 0 0 4294967295 4294967295 4294967295 4294967295 0 0 0 4294967295 0 4294967295 0 0 0 0 0 0 0 0 4294967295 0 0 0 4294967295 0 0 0 0 0 0 4294967295 0 0 0 0 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 0 0) + offset: 0@0)].! Item was added: + ----- Method: MenuIcons class>>radioButtonPressedColorized: (in category 'accessing - icons') ----- + radioButtonPressedColorized: aColor + + ^ self radioButtonPressed + collectColors: [:c | aColor alpha: c alpha]! Item was added: + ----- Method: MenuIcons class>>subMenuMarker (in category 'accessing - icons') ----- + subMenuMarker + + ^ Icons + at: #'subMenuMarker' + ifAbsentPut:[ (Form + extent: 5@9 + depth: 32 + fromArray: #( 4294967295 0 0 0 0 4294967295 4294967295 0 0 0 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 0 4294967295 4294967295 4294967295 0 0 4294967295 4294967295 0 0 0 4294967295 0 0 0 0) + offset: 0@0)].! Item was added: + ----- Method: MenuIcons class>>subMenuMarkerColorized: (in category 'accessing - icons') ----- + subMenuMarkerColorized: aColor + + ^ self subMenuMarker + collectColors: [:c | aColor alpha: c alpha]! Item was changed: ----- Method: MenuItemMorph class>>applyUserInterfaceTheme (in category 'preferences') ----- applyUserInterfaceTheme + SubMenuMarker := self defaultSubMenuMarker.! - SubMenuMarker := (UserInterfaceTheme current get: #subMenuMarker for: self) - ifNil: [self defaultSubMenuMarker].! Item was changed: ----- Method: MenuItemMorph class>>defaultSubMenuMarker (in category 'defaults') ----- defaultSubMenuMarker + ^ MenuIcons subMenuMarkerColorized: ((UserInterfaceTheme current get: #textColor for: self) ifNil: [Color black]).! - | f | - f := Form - extent: 5@9 - fromArray: #(2147483648 3221225472 3758096384 4026531840 4160749568 4026531840 3758096384 3221225472 2147483648) - offset: 0@0. - ^ ColorForm mappingWhiteToTransparentFrom: f! Item was changed: ----- Method: MenuItemMorph class>>themeProperties (in category 'preferences') ----- themeProperties ^ super themeProperties, { { #font. 'Fonts'. 'Font for menu items.' }. { #textColor. 'Colors'. 'Color for the menu item''s labels.' }. { #disabledTextColor. 'Colors'. 'Color to use for disabled menu item labels.' }. { #selectionColor. 'Colors'. 'Color used for items when hovering or selecting them.' }. { #selectionTextColor. 'Colors'. 'Color used for label when hovering or selecting them.' }. - { #subMenuMarker. 'Forms'. 'The form to be used to indicate a submenu.' }. }! Item was changed: ----- Method: MenuItemMorph>>offImage (in category 'private') ----- offImage "Return the form to be used for indicating an '' marker" + + ^ MenuIcons checkBoxOffColorized: (self userInterfaceTheme textColor ifNil: [Color black])! - | form | - form := Form extent: (self fontToUse ascent-2) asPoint depth: 16. - (form getCanvas) - frameAndFillRectangle: form boundingBox fillColor: (Color gray: 0.9) - borderWidth: 1 borderColor: Color black. - ^form! Item was changed: ----- Method: MenuItemMorph>>onImage (in category 'private') ----- onImage + "Return the form to be used for indicating an '' marker" + + ^ MenuIcons checkBoxOnColorized: (self userInterfaceTheme textColor ifNil: [Color black])! - "Return the form to be used for indicating an '' marker" - | form | - form := Form extent: (self fontToUse ascent-2) asPoint depth: 16. - (form getCanvas) - frameAndFillRectangle: form boundingBox fillColor: (Color gray: 0.8) - borderWidth: 1 borderColor: Color black; - fillRectangle: (form boundingBox insetBy: 2) fillStyle: Color black. - ^form! Item was changed: ----- Method: ThreePhaseButtonMorph class>>checkBox (in category 'instance creation') ----- checkBox "Answer a button pre-initialized with checkbox images." | f | ^self new + onImage: (f := MenuIcons checkBoxOnColorized: Color red); + pressedImage: (MenuIcons checkBoxPressedColorized: Color black); + offImage: (MenuIcons checkBoxOffColorized: Color black); - onImage: (f := ScriptingSystem formAtKey: 'CheckBoxOn'); - pressedImage: (ScriptingSystem formAtKey: 'CheckBoxPressed'); - offImage: (ScriptingSystem formAtKey: 'CheckBoxOff'); extent: f extent + (2@0); setDefaultParameters; yourself ! Item was changed: ----- Method: ThreePhaseButtonMorph class>>radioButton (in category 'instance creation') ----- radioButton "Answer a button pre-initialized with radiobutton images." | f | ^self new + onImage: (f := MenuIcons radioButtonOnColorized: Color black); + pressedImage: (MenuIcons radioButtonPressedColorized: Color black); + offImage: (MenuIcons radioButtonOffColorized: Color black); - onImage: (f := ScriptingSystem formAtKey: 'RadioButtonOn'); - pressedImage: (ScriptingSystem formAtKey: 'RadioButtonPressed'); - offImage: (ScriptingSystem formAtKey: 'RadioButtonOff'); extent: f extent + (2@0); setDefaultParameters; yourself ! From commits at source.squeak.org Thu Aug 11 17:36:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 17:36:39 2016 Subject: [squeak-dev] The Trunk: System-mt.880.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.880.mcz ==================== Summary ==================== Name: System-mt.880 Author: mt Time: 11 August 2016, 7:36:13.999369 pm UUID: ef78922d-0add-b14e-9edd-02fdd983322c Ancestors: System-mt.879 Discard sub-menu marker from theme because we go with the text color of menu entries. =============== Diff against System-mt.879 =============== Item was changed: ----- Method: SqueakTheme class>>addMenusAndDockingBars: (in category 'instance creation') ----- addMenusAndDockingBars: theme theme set: #borderColor for: #MenuMorph to: Color gray; set: #borderWidth for: #MenuMorph to: 1; set: #borderStyle for: #MenuMorph to: BorderStyle default; set: #color for: #MenuMorph to: (Color gray: 0.9); set: #titleBorderColor for: #MenuMorph to: (Color r: 0.6 g: 0.7 b: 1); set: #titleBorderWidth for: #MenuMorph to: 0; set: #titleBorderStyle for: #MenuMorph to: BorderStyle default; set: #titleColor for: #MenuMorph to: Color transparent; set: #titleFont for: #MenuMorph to: [Preferences windowTitleFont]; set: #titleTextColor for: #MenuMorph to: Color black; set: #lineColor for: #MenuMorph to: (Color gray: 0.9); set: #lineStyle for: #MenuMorph to: BorderStyle inset; set: #lineWidth for: #MenuMorph to: 2. theme set: #font for: #MenuItemMorph to: [Preferences standardMenuFont]; set: #textColor for: #MenuItemMorph to: Color black; set: #disabledTextColor for: #MenuItemMorph to: Color gray; set: #selectionColor for: #MenuItemMorph to: (Color r: 0.4 g: 0.5 b: 0.7); + set: #selectionTextColor for: #MenuItemMorph to: Color white. - set: #selectionTextColor for: #MenuItemMorph to: Color white; - set: #subMenuMarker for: #MenuItemMorph to: nil. "Use hard-coded default. See MenuItemMorph." "Derive some stuff for the docking bar morph, which looks mostly like a menu morph." theme set: #borderWidth for: #DockingBarMorph to: 0; derive: #borderColor for: #DockingBarMorph from: #MenuMorph; derive: #borderStyle for: #DockingBarMorph from: #MenuMorph; derive: #color for: #DockingBarMorph from: #MenuMorph; derive: #lineColor for: #DockingBarMorph from: #MenuMorph; derive: #lineStyle for: #DockingBarMorph from: #MenuMorph; derive: #lineWidth for: #DockingBarMorph from: #MenuMorph. "The world main docking bar." theme derive: #font for: #TheWorldMainDockingBar from: #MenuItemMorph; derive: #textColor for: #TheWorldMainDockingBar from: #MenuItemMorph; set: #logoColor for: #TheWorldMainDockingBar to: Color black; set: #selectionLogoColor for: #TheWorldMainDockingBar to: Color white.! From commits at source.squeak.org Thu Aug 11 18:05:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 18:05:20 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1262.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1262.mcz ==================== Summary ==================== Name: Morphic-mt.1262 Author: mt Time: 11 August 2016, 8:04:36.657369 pm UUID: 47dfbbe5-ccaa-f544-8048-7735ac5cf66d Ancestors: Morphic-mt.1261 Fixes minor hick-ups with overriding the desktop color and respecting this when changing themes. =============== Diff against Morphic-mt.1261 =============== Item was changed: ----- Method: MorphicProject>>setAsBackground: (in category 'utilities') ----- + setAsBackground: aFormOrColorOrFillStyle - setAsBackground: aForm "Set aForm as a background image." + | thisWorld newFill oldFill | - | thisWorld newColor | thisWorld := self currentWorld. + + oldFill := thisWorld fillStyle. + thisWorld fillStyle: aFormOrColorOrFillStyle. + newFill := thisWorld fillStyle. + + newFill rememberCommand: - newColor := InfiniteForm with: aForm. - aForm rememberCommand: (Command new cmdWording: 'set background to a picture' translated; + undoTarget: thisWorld selector: #fillStyle: argument: oldFill; + redoTarget: thisWorld selector: #fillStyle: argument: newFill). + - undoTarget: thisWorld selector: #color: argument: thisWorld color; - redoTarget: thisWorld selector: #color: argument: newColor). - thisWorld color: newColor. thisWorld setProperty: #hasCustomBackground toValue: true. ! Item was added: + ----- Method: PasteUpMorph>>fillStyle: (in category 'visual properties') ----- + fillStyle: aFormOrColorOrFillStyle + + ^ super fillStyle: (aFormOrColorOrFillStyle isForm + ifTrue: [InfiniteForm with: aFormOrColorOrFillStyle] + ifFalse: [aFormOrColorOrFillStyle isColor + ifTrue: [SolidFillStyle color: aFormOrColorOrFillStyle] + ifFalse: [aFormOrColorOrFillStyle]])! Item was changed: ----- Method: PasteUpMorph>>gradientFillColor: (in category 'display') ----- gradientFillColor: aColor "For backwards compatibility with GradientFillMorph" self flag: #fixThis. self useGradientFill. self fillStyle colorRamp: {0.0 -> self fillStyle colorRamp first value. 1.0 -> aColor}. + self setAsBackground: self fillStyle. self changed! Item was added: + ----- Method: PasteUpMorph>>setAsBackground: (in category 'visual properties') ----- + setAsBackground: aFormOrColorOrFillStyle + + (self outermostWorldMorph == self and: [Project current isMorphic]) + ifTrue: [Project current setAsBackground: aFormOrColorOrFillStyle] + ifFalse: [self fillStyle: aFormOrColorOrFillStyle].! Item was changed: ----- Method: TheWorldMenu>>changeBackgroundColor (in category 'commands') ----- changeBackgroundColor "Let the user select a new background color for the world" myWorld changeColorTarget: myWorld + selector: #setAsBackground: + originalColor: myWorld fillStyle asColor - selector: #color: - originalColor: myWorld color asColor hand: myWorld activeHand! From commits at source.squeak.org Thu Aug 11 18:05:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 18:05:43 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.148.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.148.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.148 Author: mt Time: 11 August 2016, 8:05:35.421369 pm UUID: 19d78716-7cb4-8842-8aaa-8f88441bae78 Ancestors: ReleaseBuilder-mt.147 Small clean-up for background setting. =============== Diff against ReleaseBuilder-mt.147 =============== Item was changed: ----- Method: ReleaseBuilder class>>setProjectBackground: (in category 'scripts - support') ----- setProjectBackground: aFormOrColorOrFillStyle + ActiveWorld fillStyle: aFormOrColorOrFillStyle. + MorphicProject defaultFill: ActiveWorld fillStyle. - MorphicProject defaultFill: (aFormOrColorOrFillStyle isForm - ifTrue: [InfiniteForm with: aFormOrColorOrFillStyle] - ifFalse: [aFormOrColorOrFillStyle isColor - ifTrue: [SolidFillStyle color: aFormOrColorOrFillStyle] - ifFalse: [aFormOrColorOrFillStyle]]). - ActiveWorld fillStyle: MorphicProject defaultFill. ActiveWorld removeProperty: #hasCustomBackground.! From tim at rowledge.org Thu Aug 11 18:14:45 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Aug 11 18:14:50 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1470842496210-4910338.post@n4.nabble.com> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> Message-ID: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> > On 10-08-2016, at 8:21 AM, marcel.taeumel wrote: > A first All-In-One can be tried out from here: > https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip > I like the idea of the welcome dialogue stuff. But I see some problems that we hopefully still have time to handle. -The initial ?welcome? text is in the middle of the screen and then jumps to the top. Seems a bit jarring. - second ?page? - ?You can try? ? might be better more like ?You can see the effects of these settings in the live and editable windows to the right? - there?s no hint what many of the settings will do or how they might affect things. Help balloons might be enough to solve this, explaining for example how to see the effect of choosing ?fast drag and resize?. - at the end of the welcome we are dropped into a dark empty world. I half expect Orcs to come charging at me. Maybe an open browser and workspace ought to be left in place? For experts skipping the whole thing I suspect the first thing we?d do is open a browser/workspace anyway! - it leaves out the thing I?d suggest is most important of all - urging the user to first save the image in a new place to discourage the ?abuse? of changing the default image. I claim we should conventionally start a new system from the all-in-one, save the image in a local place and thereafter run that image until and unless a fresh image needs to be started. Think of this like many applications that allow opening a new file or a template, with the default image being a very well set up template. - another useful start-up option here would be entering developer initials - another would be to point out the help system. Of course, we need to improve the content therein as well. And the swiki as always is in need of love. > Note that we are looking for start-up bugs in the Linux scripts. At least for the ARM linux tree the ?squeak? shell script is not so good. - it ought to be finding the latest vm; this is a little complex because of the naming change from blah-XXXX to blah-2106MMDDHHMM. And of course, affected by which VM is to be delivered anyway. - the newer versions of the script add an option for a gdb flag. - it may be appropriate to have the x86 & ARM versions differ in their approach to finding the clib - at least for the ARM version there is a serious issue with remote displays (that is, ARM linux has the problem, which squeak triggers) and we need to wrap the whole thing in ?sudo -E?. We have a program that can be used to test this at runtime (I can send it to anyone interested) but all my attempts to wrap the final line of the script in the required sudo have met with no success. It is likely some problem with how forking and execing and sudo didn?t get on well as children. A better solution would be to fix linux so it doesn't cause the problem in the first case but it seems to have been around for many years. > Note that we have not yet fixed the Windows .ini bug. > Note that Windows 10 is quite anxious about starting an unsigned executable. And you should see how annoyed OS X gets about it. The image is frikkin? huge. How on earth do we have 22Mb of ByteArray/BitMap/ByteString around? And it looks like we are keeping a very large amount of MC stuff; 13018 instances of MCVersionInfo/MCVersionName/DateAndTime/Date/Time/UUID. Is that smart? Simply flushing the cached ancestry from the MC browser gets rid of 60% of them and appears to save 3Mb. Except the damn saved image afterwards is exactly the same size! Sigh. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: RDR: Rotate Disk Right From Marcel.Taeumel at hpi.de Thu Aug 11 18:23:03 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 11 18:23:06 2016 Subject: [squeak-dev] Re: Windows opening in background In-Reply-To: References: Message-ID: <1470939783308-4910577.post@n4.nabble.com> Nicolas Cellier wrote > It often happens that a window opens behind the currently active one. > Typically, I want to 'debug it' on a subexpression in the debugger. > The second debugger opens in background, or does it go into background > after opening? > Anyway, it's sufficiently fast that I got no feedback for my action until > I > minimize or move the original debugger. > > With respect to my own workflow, this is sufficiently annoying to call > that > a regression. > Is it just me? > > Nicolas Hi Nicolas, this happens when you "debug it" via the context menu, right? It should not happen when you press CMD+SHIFT+D. Best, Marcel -- View this message in context: http://forum.world.st/Windows-opening-in-background-tp4910565p4910577.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Thu Aug 11 18:24:41 2016 From: tim at rowledge.org (tim Rowledge) Date: Thu Aug 11 18:24:46 2016 Subject: [squeak-dev] Squeak 5.1 PreferenceBrowser notes Message-ID: <412D2F72-2043-4FD6-A09E-DDC829BF25A7@rowledge.org> I actually sat and read through, and tried, all the preferences. It was not a lot of fun. Here are some notes resulting from that marathon of pain. Basic points ======== Ridiculous mix of upper and lower cased and camel-cased preference names. Some with spaces, some not. Accompanying help text often needs spelling, grammar or factual fixes. The 'help' button window refers to a non-existent 'theme...' button. And has mis-spelllings. In general we have an insane number of preferences that seem to do nothing interesting . Probably time to get rid of a lot of them and simplify life. Specific items, with often snarky commentary. ============================= block assignments - should not be allowed underscore assignments - should not be allowed; see Cuis for a way to do it right. Examples - why are they in the tool? Several appear to be unused anyway subpixel rendering - not able to see any difference; is it actually in use? auto-enclose - doesn't match capability with autoEnclose. See TextEditor>>dispatchOnKeyboardEvent: Also, one has char as arg, other has event. Yuck! highlight hovered row in lists - seems wrong to have the preference in PluggableListMorph but used in just two classes that are not related. 'Menu request updates list/tree selection' help text is gibberish 'Use new style balloon morphs' why bother offering the choice instead of dropping the old ones? Browse with drag'n'drop - does this need to be a pref? syntaxHighlightingAsYouType - none of th three seem to have any users Use the new color-picker - is this of any use? Corner Grip * - ditto Flaps - are they still in there? Thorough senders - dump it automaticPlatformSettings - what? modalColorPickers - seems pointless readOnlyMode - no usages? alternateHandlesLook - why? biggerHandles - why? has some interaction with tinyDisplay/bigDisplay haloTransitions - I don't think so magic/maintain/mouseOver-Halos - what? generally halo stuff seems to have an insane number of preferences that are not used. keyboard duplicate/swap stuff - way too complex and poorly explained simpleMenus - doesn't really have much effect timeStampsInMenuTitles - can't see what it is for menuBorderWidth - doesn't actually seem to relate to menus at all menuTitleBorderWidth - ditto - in fact none of the menuXX items seem to be used for menus Show wrap border in code panes & Wrap border limit - why in 'performance' and what are they supposed to be for? alternativeButtonsInScrollbars - any use? too many scrollbar options. must be a better way to make such choices, or actually decide on something and stick to it. inlineServicesInMenu - comment makes no sense. - do we still need the preferences if we always have services? 'Offer native fonts' only works with an apparently unused set of StrikeFont code (#fromUser: etc) and the code even breaks on linux since there are no truetype fonts (on my machine at least) Thuse the list of fonts is nil and the TTFileDescription class>>frontFromUser:allowKeyboard: code breaks. 'Selections may shrink' - is there any case where that would not be true? Font choosing ========= not part of preferencebrowser, which seems odd. appearance->systemfonts menu seems to not be matched to the themes fonts stuff? Preferences class>>restoreDefaultFont probably needs to use the theme data. #setDemoFonts likely simialr, and a 'return to normal' is needed too. 'Offer native fonts' only works with an apparently unused set of StrikeFont code (#fromUser: etc) and the code even breaks on linux since there are no truetype fonts (on my machine at least) Thuse the list of fonts is nil and the TTFileDescription class>>frontFromUser:allowKeyboard: code breaks. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Spell checkers at maximum! Fire! From Das.Linux at gmx.de Thu Aug 11 18:32:36 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Thu Aug 11 18:32:41 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> Message-ID: <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> On 11.08.2016, at 20:14, tim Rowledge wrote: >> On 10-08-2016, at 8:21 AM, marcel.taeumel wrote: >> A first All-In-One can be tried out from here: >> https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip >> > > > I like the idea of the welcome dialogue stuff. But I see some problems that we hopefully still have time to handle. > > -The initial ?welcome? text is in the middle of the screen and then jumps to the top. Seems a bit jarring. > - second ?page? - ?You can try? ? might be better more like ?You can see the effects of these settings in the live and editable windows to the right? > - there?s no hint what many of the settings will do or how they might affect things. Help balloons might be enough to solve this, explaining for example how to see the effect of choosing ?fast drag and resize?. > - at the end of the welcome we are dropped into a dark empty world. I half expect Orcs to come charging at me. Maybe an open browser and workspace ought to be left in place? For experts skipping the whole thing I suspect the first thing we?d do is open a browser/workspace anyway! > - it leaves out the thing I?d suggest is most important of all - urging the user to first save the image in a new place to discourage the ?abuse? of changing the default image. I claim we should conventionally start a new system from the all-in-one, save the image in a local place and thereafter run that image until and unless a fresh image needs to be started. Think of this like many applications that allow opening a new file or a template, with the default image being a very well set up template. > - another useful start-up option here would be entering developer initials > - another would be to point out the help system. Of course, we need to improve the content therein as well. And the swiki as always is in need of love. > > >> Note that we are looking for start-up bugs in the Linux scripts. > > At least for the ARM linux tree the ?squeak? shell script is not so good. > - it ought to be finding the latest vm; this is a little complex because of the naming change from blah-XXXX to blah-2106MMDDHHMM. And of course, affected by which VM is to be delivered anyway. > - the newer versions of the script add an option for a gdb flag. > - it may be appropriate to have the x86 & ARM versions differ in their approach to finding the clib > - at least for the ARM version there is a serious issue with remote displays (that is, ARM linux has the problem, which squeak triggers) and we need to wrap the whole thing in ?sudo -E?. We have a program that can be used to test this at runtime (I can send it to anyone interested) but all my attempts to wrap the final line of the script in the required sudo have met with no success. It is likely some problem with how forking and execing and sudo didn?t get on well as children. A better solution would be to fix linux so it doesn't cause the problem in the first case but it seems to have been around for many years. > > >> Note that we have not yet fixed the Windows .ini bug. >> Note that Windows 10 is quite anxious about starting an unsigned executable. > And you should see how annoyed OS X gets about it. > > The image is frikkin? huge. How on earth do we have 22Mb of ByteArray/BitMap/ByteString around? And it looks like we are keeping a very large amount of MC stuff; 13018 instances of MCVersionInfo/MCVersionName/DateAndTime/Date/Time/UUID. Is that smart? Simply flushing the cached ancestry from the MC browser gets rid of 60% of them and appears to save 3Mb. Except the damn saved image afterwards is exactly the same size! Sigh. We can convert all base64 strings to ascii85 and save some 10-20% ;D > > > tim From leves at caesar.elte.hu Thu Aug 11 19:20:59 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu Aug 11 19:21:03 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.40.mcz In-Reply-To: References: Message-ID: Please do not use #sortBy:. It should have been deprecated in favor of #sorted:. Levente On Thu, 11 Aug 2016, commits@source.squeak.org wrote: > Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: > http://source.squeak.org/trunk/Help-Squeak-Project-mt.40.mcz > > ==================== Summary ==================== > > Name: Help-Squeak-Project-mt.40 > Author: mt > Time: 11 August 2016, 5:26:19.085564 pm > UUID: 06ded287-6848-1844-9baf-ea302e76df60 > Ancestors: Help-Squeak-Project-mt.39 > > Sort release notes so that the latest comes first. > > =============== Diff against Help-Squeak-Project-mt.39 =============== > > Item was changed: > ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- > pages > > | dir | > dir := FileDirectory default directoryNamed: 'doc'. > ^ dir exists > ifFalse: [#()] > + ifTrue: [(dir entries collect: [:entry | entry name]) sortBy: [:a :b | a >= b]]! > - ifTrue: [dir entries collect: [:entry | entry name]]! > > > From asqueaker at gmail.com Thu Aug 11 19:47:55 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Aug 11 19:48:37 2016 Subject: [squeak-dev] Squeak 5.1 PreferenceBrowser notes In-Reply-To: <412D2F72-2043-4FD6-A09E-DDC829BF25A7@rowledge.org> References: <412D2F72-2043-4FD6-A09E-DDC829BF25A7@rowledge.org> Message-ID: Hi Tim, yes, it is known that Preferences has "evolved" over time, and one of the areas I want to clean up, and I think Marcel and others too. I posted my Preferences requirements and goals for what I wanted to accomplish in the refactor earlier this year. It didn't happen this release, but something possibly for the next. Marcel has already collapsed several preferences into the new Theming architecture, probably some more can be next release as well, and some of the ones you mentioned could too. I think you have a pretty good list, but we will use a thoughtful and logical approach and not a snarky one for determining the fate of each and every Preference. Preferences are supposed to resolve our differences, not create them. re: autoEnclose -- Marcel and I spared the squeak-dev list an excruciatingly detailed discussion about autoEnclose, taking into account multiple requirements, editing styles, and keyboard layouts. A ton of thought and discussion went into it with the goal of maximizing the UX and achieve as many use-case combinations as we could. Best, Chris On Thu, Aug 11, 2016 at 1:24 PM, tim Rowledge wrote: > I actually sat and read through, and tried, all the preferences. It was not a lot of fun. Here are some notes resulting from that marathon of pain. > > Basic points > ======== > > Ridiculous mix of upper and lower cased and camel-cased preference names. Some with spaces, some not. Accompanying help text often needs spelling, grammar or factual fixes. > The 'help' button window refers to a non-existent 'theme...' button. And has mis-spelllings. > In general we have an insane number of preferences that seem to do nothing interesting . Probably time to get rid of a lot of them and simplify life. > > Specific items, with often snarky commentary. > ============================= > > block assignments - should not be allowed > > underscore assignments - should not be allowed; see Cuis for a way to do it right. > > Examples - why are they in the tool? Several appear to be unused anyway > > subpixel rendering - not able to see any difference; is it actually in use? > > auto-enclose - doesn't match capability with autoEnclose. See TextEditor>>dispatchOnKeyboardEvent: Also, one has char as arg, other has event. Yuck! > > highlight hovered row in lists - seems wrong to have the preference in PluggableListMorph but used in just two classes that are not related. > > 'Menu request updates list/tree selection' help text is gibberish > > 'Use new style balloon morphs' why bother offering the choice instead of dropping the old ones? > > Browse with drag'n'drop - does this need to be a pref? > > syntaxHighlightingAsYouType - none of th three seem to have any users > > Use the new color-picker - is this of any use? > > Corner Grip * - ditto > > Flaps - are they still in there? > > Thorough senders - dump it > > automaticPlatformSettings - what? > > modalColorPickers - seems pointless > > readOnlyMode - no usages? > > alternateHandlesLook - why? > > biggerHandles - why? has some interaction with tinyDisplay/bigDisplay > > haloTransitions - I don't think so > > magic/maintain/mouseOver-Halos - what? > > generally halo stuff seems to have an insane number of preferences that are not used. > > keyboard duplicate/swap stuff - way too complex and poorly explained > > simpleMenus - doesn't really have much effect > > timeStampsInMenuTitles - can't see what it is for > > menuBorderWidth - doesn't actually seem to relate to menus at all > > menuTitleBorderWidth - ditto > > - in fact none of the menuXX items seem to be used for menus > > Show wrap border in code panes & Wrap border limit - why in 'performance' and what are they supposed to be for? > > alternativeButtonsInScrollbars - any use? > > too many scrollbar options. must be a better way to make such choices, or actually decide on something and stick to it. > > inlineServicesInMenu - comment makes no sense. > - do we still need the preferences if we always have services? > > 'Offer native fonts' only works with an apparently unused set of StrikeFont code (#fromUser: etc) and the code even breaks on linux since there are no truetype fonts (on my machine at least) Thuse the list of fonts is nil and the TTFileDescription class>>frontFromUser:allowKeyboard: code breaks. > > 'Selections may shrink' - is there any case where that would not be true? > > Font choosing > ========= > not part of preferencebrowser, which seems odd. > appearance->systemfonts menu seems to not be matched to the themes fonts stuff? Preferences class>>restoreDefaultFont probably needs to use the theme data. > #setDemoFonts likely simialr, and a 'return to normal' is needed too. > 'Offer native fonts' only works with an apparently unused set of StrikeFont code (#fromUser: etc) and the code even breaks on linux since there are no truetype fonts (on my machine at least) Thuse the list of fonts is nil and the TTFileDescription class>>frontFromUser:allowKeyboard: code breaks. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Spell checkers at maximum! Fire! > > > From commits at source.squeak.org Thu Aug 11 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Thu Aug 11 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160811215503.18637.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068497.html Name: System-mt.877 Ancestors: System-cmm.876 Fixes two bugs in language translation. One prevents an infinite loop, the other avoids the creation of instances of the abstract class NaturalLanguageTranslator. Fall-back to the internal translator instead. Thanks to Tim (F.) ! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068498.html Name: CommandLine-mt.7 Ancestors: CommandLine-mt.6 Fixes small bug in DummyUIManager, which is used during automated generation of release artifacts. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068499.html Name: ST80-mt.215 Ancestors: ST80-mt.214 Fixes bug when generating accessors for MVC menus to spawn other kinds of projects. (Actually, it is strange that extension categories do not remove spaces after the package names ...) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068500.html Name: Graphics-mt.360 Ancestors: Graphics-mt.359 Fixes a bug with FormSetFont, which got colorized inadvertently. Support several options via an extended interface. While there might be the case where we want to colorize the glyphs, do not do it by default. People used to use it to add images into Text because our TextAnchor attribute it not useful for that. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068501.html Name: Tools-mt.713 Ancestors: Tools-mt.712 Fix Morphic dependency for Morphics window reusing mechanism. Tools should also work from within MVC. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068502.html Name: Morphic-mt.1257 Ancestors: Morphic-cmm.1256 Fixes a bug that occured when updating tree morphs (such as in the SqueakMap catalog). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068503.html Name: Compiler-tfel.325 Ancestors: Compiler-mt.324, Compiler-Richo.4 merge squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068504.html Name: Compiler-tfel.326 Ancestors: Compiler-tfel.325 fix printing of MessageNodes and SelectorNodes ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068505.html Name: Compiler-tfel.327 Ancestors: Compiler-tfel.326 - allow using the Encoder without a requestor (useful when feeding it directly without parser/compiler and for testing) - be more robust in MethodNode printing, when the selector node ivar is subclass of SelectorNode (e.g. a SpecialSelectorNode), the code would try to print the special selector as key of an ordinary SelectorNode. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068506.html Name: System-mt.878 Ancestors: System-mt.877 Unplug the code for #storeToMakeRoom because project serialization via image segments is not working at the moment. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068507.html Name: Tools-mt.714 Ancestors: Tools-mt.713 Hotfix to theme all file choosing and FileList2 dialogs. Note that we should refactore/rewrite that code to not depend on Morphic. In the long term, the Tools package should not depend on Morphic being loaded. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068508.html Name: 51Deprecated-tfel.42 Ancestors: 51Deprecated-mt.41 move a boolean preference adding method to deprecated, so that FreeType at least loads from VMMaker update map ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068509.html Name: Collections-mt.704 Ancestors: Collections-mt.703 In preparation for showing the release notes on a help page, make TextReadWriter interface more like ImageReadWriter interface. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068510.html Name: Morphic-mt.1258 Ancestors: Morphic-mt.1257 Fixes a serious regression where the emergency evaluator appeared way too often for even simple drawing errors. New strategy: Try to repaint the world, remembering all errors for various kinds of receivers. Since bad morphs get flagged, this loop terminates. After that, show debuggers for all kinds of errors that appeared. This makes working in Morphic more robust and you can be sure that, after debuggers appear, all drawing glitches have been taken care of. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068511.html Name: Morphic-mt.1258 Ancestors: Morphic-mt.1257 Fixes a serious regression where the emergency evaluator appeared way too often for even simple drawing errors. New strategy: Try to repaint the world, remembering all errors for various kinds of receivers. Since bad morphs get flagged, this loop terminates. After that, show debuggers for all kinds of errors that appeared. This makes working in Morphic more robust and you can be sure that, after debuggers appear, all drawing glitches have been taken care of. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068512.html Name: Collections-mt.705 Ancestors: Collections-mt.704 Fix two small bugs in HTML parser regarding strings in tag properties and href contents. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068513.html Name: Morphic-mt.1259 Ancestors: Morphic-mt.1258 For for interactive release notes, support code URLs in TextURL property. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068514.html Name: Collections-mt.706 Ancestors: Collections-mt.705 Consider UI theme for colorizing text actions. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068515.html Name: System-mt.879 Ancestors: System-mt.878 Text action color in UI themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068516.html Name: Help-Squeak-Project-mt.38 Ancestors: Help-Squeak-Project-mt.37 Get release notes from the file system to not spoil the image with large strings. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068517.html Name: Help-Squeak-Project-mt.39 Ancestors: Help-Squeak-Project-mt.38 Get release notes from the file system to not spoil the image with large strings. (e.g. /doc/release-notes-46). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068518.html Name: Help-Squeak-Project-mt.40 Ancestors: Help-Squeak-Project-mt.39 Sort release notes so that the latest comes first. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068519.html Name: Help-Squeak-Project-mt.41 Ancestors: Help-Squeak-Project-mt.40 Minor release notes clean-up. Should work now. We only have to create/fill the release-notes-XX files. :-) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068520.html Name: Services-Base-mt.60 Ancestors: Services-Base-cmm.59 Fix some old window color left-over. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068521.html Name: Morphic-mt.1260 Ancestors: Morphic-mt.1259 Fix some old window color left-over. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068522.html Name: Morphic-mt.1261 Ancestors: Morphic-mt.1260 Make radio buttons, check boxes, sub-menu markers theme-able. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068523.html Name: System-mt.880 Ancestors: System-mt.879 Discard sub-menu marker from theme because we go with the text color of menu entries. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068524.html Name: Morphic-mt.1262 Ancestors: Morphic-mt.1261 Fixes minor hick-ups with overriding the desktop color and respecting this when changing themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068525.html Name: ReleaseBuilder-mt.148 Ancestors: ReleaseBuilder-mt.147 Small clean-up for background setting. ============================================= From Yoshiki.Ohshima at acm.org Fri Aug 12 01:05:19 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Fri Aug 12 01:05:22 2016 Subject: [squeak-dev] Smallapack In-Reply-To: References: Message-ID: I have not reached the conclusion but would like to give some status report. My test case is simple: ------------------- a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)). b := LapackDGEMatrix rows: #(#(1) (2) (3)). c := LapackLeastSquareProblem matrix: a rhsMatrix: b. c solution. ------------------- If I evaluate this, the external call for 'dgesvd_' in CLapackDLibrary>>xgesvdWithjobu:jobvt:m:n:a:lda:s:u:ldu:vt:ldvt:work:lwork:info: fails. But if I fix it by rewriting the cdecl line to: from it passes. However, the value that gets stored in the 's' instance variable of LapackSVDecomposition is a LapackDGEMatrix, and when the resulting value is used in the #defaultTolerance, I get DNU for '*". On Tue, Aug 9, 2016 at 3:26 PM, Yoshiki Ohshima wrote: > Correction: (sorry) > > In a 64 bit image, TestCBlas runs fine but the ones listed above fails > in a 32-bit image. > > On Tue, Aug 9, 2016 at 3:12 PM, Yoshiki Ohshima wrote: >> Thanks! >> >> I am trying this from a vanilla 5.0 image and I see that >> ConfigurationOfSmallapack-nice.18 is loaded. Now, however, the >> following tests from Smallapack-SUnitTests category fail: >> >> #('TestCBlas>>#testCsscal' 'TestCBlas>>#testSaxpy' >> 'TestCBlas>>#testSgemv' 'TestCBlas>>#testSgemvTrans' >> 'TestCBlas>>#testSger' 'TestCBlas>>#testSscal' 'TestCBlas>>#testStrsm' >> 'TestLapackMatrix>>#testMatrixProduct' 'TestLapackMatrix>>#testSum' >> 'TestRandMatrix>>#testOperationTiming') >> >> As I wrote, TestCBlas used to be all green. I'll check what has >> changed since -nice.16... >> >> On Sat, Aug 6, 2016 at 4:56 PM, Nicolas Cellier >> wrote: >>> This should be fixed in ConfigurationOfSmallapack-nice.18 >>> BTW, I think you can provide the absolute path to the .dylib instead of >>> copying in local repository... >>> >>> >>> 2016-08-06 23:29 GMT+02:00 Nicolas Cellier >>> : >>>> >>>> Hi Yoshiki, >>>> thanks for reporting, I'll try better... >>>> >>>> >>>> 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima : >>>>> >>>>> I see you have some changes but it appears that evaluating the >>>>> Installer do it goes into an infinite loop of #moduleName and >>>>> #masOsxModuleName. >>>>> >>>>> (Thanks again!) >>>>> >>>>> On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima >>>>> wrote: >>>>> > But some of TestLapackMatrix tests fail. A few external functions >>>>> > cannot be found, it looks like. >>>>> > >>>>> > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima >>>>> > wrote: >>>>> >> Great! >>>>> >> >>>>> >> Before (I got into a meeting and then entered the "Friday mode", I was >>>>> >> going down the path of trying to call the Framework functions but >>>>> >> copying files anyway was a simpler solution for now. >>>>> >> >>>>> >> Yes, I got all tests green. Thank you! >>>>> >> >>>>> >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier >>>>> >> wrote: >>>>> >>> OK, what I did on my Mac: >>>>> >>> >>>>> >>> 1) look under the Squeak app and edit the Contents/Info.plist >>>>> >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No" >>>>> >>> otherwise library loading is restricted to the Squeak app bundle >>>>> >>> 3) copy the veclib framework library files (dylib) in same directory >>>>> >>> as >>>>> >>> squeak image >>>>> >>> 4) launch Squeak >>>>> >>> 5) install Smallapack >>>>> >>> follow instruction from >>>>> >>> >>>>> >>> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/SmallapackSqueak >>>>> >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' -> >>>>> >>> 'libBlas.dylib' >>>>> >>> nowadays, cblas and blas are in the same dylib... >>>>> >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' -> >>>>> >>> 'libLapack.dylib' >>>>> >>> idem >>>>> >>> 8) re-initialize the cache (I know, I know, there are too many...) >>>>> >>> CBlasLibrary install. CLapackLibrary install. LapackMatrix >>>>> >>> resetBlasInterfaces; resetLapackInterfaces. >>>>> >>> 9) run the TestCBlas suite >>>>> >>> >>>>> >>> It should be green >>>>> >>> I will commit the changes later, and will probably implement >>>>> >>> moduleNames as >>>>> >>> a Preference (pragma oriented). >>>>> >>> No need to override code anymore :) >>>>> >>> >>>>> >>> I think step 3) is necessary because of ioLoadModuleRaw() in >>>>> >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >>>>> >>> >>>>> >>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >>>>> >>> It would only look those frameworks: >>>>> >>> >>>>> >>> static char *frameworks[]= >>>>> >>> { >>>>> >>> "", >>>>> >>> "/CoreServices.framework/Frameworks", >>>>> >>> "/ApplicationServices.framework/Frameworks", >>>>> >>> "/Carbon.framework/Frameworks", >>>>> >>> 0 >>>>> >>> }; >>>>> >>> >>>>> >>> But I did step 3) before I tried 1) + 2), adn did not retry, so maybe >>>>> >>> I'm >>>>> >>> wrong... >>>>> >>> Scanning all the frameworks is not a solution. And what if we want a >>>>> >>> specific version? >>>>> >>> It would be far better to be able to specify the path to the library >>>>> >>> from >>>>> >>> within the image like VW... >>>>> >>> >>>>> >>> >>>>> >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier >>>>> >>> : >>>>> >>>> >>>>> >>>> >>>>> >>>> >>>>> >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier >>>>> >>>> : >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima >>>>> >>>>> : >>>>> >>>>>> >>>>> >>>>>> First question: >>>>> >>>>>> >>>>> >>>>>> The Mac OS comes with Accelerate.Framework and that contains BLAS. >>>>> >>>>>> But probably I still should compile those libraries, right? >>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> No, it's better to link to accelerated library. >>>>> >>>>> I don't have a Mac handy here to verify how to link to it though. >>>>> >>>>> I'll be able to check latter in the evening >>>>> >>>>> >>>>> >>>> >>>>> >>>> >>>>> >>>> I've downloaded the code, and I see it now: the library names are >>>>> >>>> hardcoded (see implementors of moduleName). >>>>> >>>> For Mac it is libblas.dylib and libcblas.dylib >>>>> >>>> Also note that there is a preference for switching to cblas (blas >>>>> >>>> functions with C interface). >>>>> >>>> This should be faster because we pass some parameters by value >>>>> >>>> rather than >>>>> >>>> allocating them and pass reference... >>>>> >>>> >>>>> >>>> Module names could also be replaced by Preferences eventually, but >>>>> >>>> by now, >>>>> >>>> you'll have to override... >>>>> >>>> >>>>> >>>>>> >>>>> >>>>>> >>>>> >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima >>>>> >>>>>> wrote: >>>>> >>>>>> > Thanks! >>>>> >>>>>> > >>>>> >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier >>>>> >>>>>> > wrote: >>>>> >>>>>> >> Hi Yoshiki, >>>>> >>>>>> >> >>>>> >>>>>> >> Thanks for inquiring about Smallapack. >>>>> >>>>>> >> >>>>> >>>>>> >> This problem has been solved in 2011 as the post tells. >>>>> >>>>>> >> Moreover, it was about alignment of squeak objects that was on >>>>> >>>>>> >> multiple of 4 >>>>> >>>>>> >> on SqueakV3 memory. >>>>> >>>>>> >> Spur is 8 byte aligned, so the problem would have also vanished >>>>> >>>>>> >> without any >>>>> >>>>>> >> patch for those being patient :) >>>>> >>>>>> >> >>>>> >>>>>> >> For the 15 arguments limit, Smallapack comes with it's own >>>>> >>>>>> >> compiler, >>>>> >>>>>> >> so it's >>>>> >>>>>> >> a non issue. >>>>> >>>>>> >> Maybe I should make the documentation more clear on >>>>> >>>>>> >> >>>>> >>>>>> >> >>>>> >>>>>> >> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/SmallapackSqueak >>>>> >>>>>> >> ? >>>>> >>>>>> >> >>>>> >>>>>> >> Unfortunately, there's no Sparse Matrix representation in >>>>> >>>>>> >> Lapack. >>>>> >>>>>> >> If you know of a good package for that, it could be integrated. >>>>> >>>>>> >> >>>>> >>>>>> >> If you have other questions, don't hesitate to ask. >>>>> >>>>>> >> >>>>> >>>>>> >> cheers >>>>> >>>>>> >> >>>>> >>>>>> >> Nicolas >>>>> >>>>>> >> >>>>> >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima >>>>> >>>>>> >> : >>>>> >>>>>> >>> >>>>> >>>>>> >>> I am trying to do a bit of linear algebra stuff that involves >>>>> >>>>>> >>> to >>>>> >>>>>> >>> solve >>>>> >>>>>> >>> a sparse 2D matrix (for a variation of doing least square >>>>> >>>>>> >>> fit). >>>>> >>>>>> >>> >>>>> >>>>>> >>> There was a message from Nicolas: >>>>> >>>>>> >>> >>>>> >>>>>> >>> >>>>> >>>>>> >>> >>>>> >>>>>> >>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2011-August/161113.html >>>>> >>>>>> >>> >>>>> >>>>>> >>> Is this where it stands today, too? It looks like that arg >>>>> >>>>>> >>> count >>>>> >>>>>> >>> problem is still there in 5.0, but is it in a way non-issue as >>>>> >>>>>> >>> it is >>>>> >>>>>> >>> still FFI based? >>>>> >>>>>> >>> >>>>> >>>>>> >>> Thanks! >>>>> >>>>>> >>> >>>>> >>>>>> >>> -- >>>>> >>>>>> >>> -- Yoshiki >>>>> >>>>>> >>> >>>>> >>>>>> >> >>>>> >>>>>> >> >>>>> >>>>>> >> >>>>> >>>>>> >> >>>>> >>>>>> > >>>>> >>>>>> > >>>>> >>>>>> > >>>>> >>>>>> > -- >>>>> >>>>>> > -- Yoshiki >>>>> >>>>>> >>>>> >>>>>> >>>>> >>>>>> >>>>> >>>>>> -- >>>>> >>>>>> -- Yoshiki >>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >> >>>>> >> >>>>> >> >>>>> >> -- >>>>> >> -- Yoshiki >>>>> > >>>>> > >>>>> > >>>>> > -- >>>>> > -- Yoshiki >>>>> >>>>> >>>>> >>>>> -- >>>>> -- Yoshiki >>>>> >>>> >>> >>> >>> >>> >> >> >> >> -- >> -- Yoshiki > > > > -- > -- Yoshiki -- -- Yoshiki From tim at rowledge.org Fri Aug 12 05:49:40 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 12 05:49:46 2016 Subject: [squeak-dev] Squeak 5.1 PreferenceBrowser notes In-Reply-To: References: <412D2F72-2043-4FD6-A09E-DDC829BF25A7@rowledge.org> Message-ID: <4AEFCE20-8343-4CFD-A544-1BBC480D33FC@rowledge.org> > On 11-08-2016, at 12:47 PM, Chris Muller wrote: > I think you have a pretty good list, but we will use a thoughtful and > logical approach and not a snarky one for determining the fate of each > and every Preference. Snarky notes are better than no notes I suspect. At least it is a flag to salute. And the major point - that we have a rather tangled mess of confusion that needs pruning and copy-editing - is valid whether pointed or polite. I just wish I?d had time to do some thing more practically useful before code-freeze. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim World Ends at Ten! Pictures at 11 on Fox News! From commits at source.squeak.org Fri Aug 12 08:05:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:05:18 2016 Subject: [squeak-dev] The Trunk: System-mt.881.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.881.mcz ==================== Summary ==================== Name: System-mt.881 Author: mt Time: 12 August 2016, 10:04:45.678343 am UUID: ce62136b-6f51-ad4c-97fe-c3f04e017deb Ancestors: System-mt.880 Adds missing method to be compatible with Behavior. To be used for balloon help in File Contents Browser. =============== Diff against System-mt.880 =============== Item was added: + ----- Method: PseudoClass>>sourceCodeAt:ifAbsent: (in category 'methods') ----- + sourceCodeAt: sel ifAbsent: block + ^ self sourceCode + at: sel + ifPresent: [:src | src string] + ifAbsent: block! From commits at source.squeak.org Fri Aug 12 08:06:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:06:47 2016 Subject: [squeak-dev] The Trunk: Tools-mt.715.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.715.mcz ==================== Summary ==================== Name: Tools-mt.715 Author: mt Time: 12 August 2016, 10:06:15.482343 am UUID: 8f32b216-0cc1-b14d-93e4-8eaa57fac339 Ancestors: Tools-mt.714 Fixes serious bug with balloon-help for message lists, which occured in the FileContentsBrowser with #balloonHelpInMessageLists preference enabled. =============== Diff against Tools-mt.714 =============== Item was changed: ----- Method: Browser>>messageHelpFor: (in category 'message list') ----- messageHelpFor: aSelector "Show the first n lines of the sources code of the message behind aSelector." | source formatted iconHelp | Preferences balloonHelpInMessageLists ifFalse: [^ nil]. + source := self selectedClassOrMetaClass sourceCodeAt: aSelector ifAbsent: [^ nil]. - source := (self selectedClassOrMetaClass compiledMethodAt: aSelector ifAbsent: [^ nil]) getSource. source lineCount > 5 ifTrue: [ | sourceLines | sourceLines := (source asString lines copyFrom: 1 to: 5) asOrderedCollection. sourceLines add: ' [...]'. source := sourceLines joinSeparatedBy: Character cr]. formatted := (Smalltalk classNamed: #SHTextStylerST80) ifNil: [ source asText ] ifNotNil: [ :SHTextStylerST80 | SHTextStylerST80 new classOrMetaClass: self selectedClassOrMetaClass; styledTextFor: source asText ]. iconHelp := (self messageIconHelpFor: aSelector) ifNotEmpty: [:t | t , Character cr, Character cr]. ^ iconHelp asText append: formatted; yourself! From commits at source.squeak.org Fri Aug 12 08:11:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:11:50 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1263.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1263.mcz ==================== Summary ==================== Name: Morphic-mt.1263 Author: mt Time: 12 August 2016, 10:11:07.792343 am UUID: 88924fd0-05f5-454a-87b7-461a195b3d70 Ancestors: Morphic-mt.1262 Remove obsolete preference for balloon color. It is in the current UI theme now. =============== Diff against Morphic-mt.1262 =============== Item was changed: + (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances. "For more fine-granular visual settings." + Preferences removePreference: #''BalloonMorph>>balloonColor''.'! - (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances. "For more fine-granular visual settings."'! From Marcel.Taeumel at hpi.de Fri Aug 12 08:14:52 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 12 08:15:02 2016 Subject: [squeak-dev] Re: The Trunk: Help-Squeak-Project-mt.40.mcz In-Reply-To: References: Message-ID: <1470989692928-4910638.post@n4.nabble.com> Levente Uzonyi wrote > Please do not use #sortBy:. It should have been deprecated in favor of > #sorted:. > > Levente > > On Thu, 11 Aug 2016, > commits@.squeak > wrote: > >> Marcel Taeumel uploaded a new version of Help-Squeak-Project to project >> The Trunk: >> http://source.squeak.org/trunk/Help-Squeak-Project-mt.40.mcz >> >> ==================== Summary ==================== >> >> Name: Help-Squeak-Project-mt.40 >> Author: mt >> Time: 11 August 2016, 5:26:19.085564 pm >> UUID: 06ded287-6848-1844-9baf-ea302e76df60 >> Ancestors: Help-Squeak-Project-mt.39 >> >> Sort release notes so that the latest comes first. >> >> =============== Diff against Help-Squeak-Project-mt.39 =============== >> >> Item was changed: >> ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') >> ----- >> pages >> >> | dir | >> dir := FileDirectory default directoryNamed: 'doc'. >> ^ dir exists >> ifFalse: [#()] >> + ifTrue: [(dir entries collect: [:entry | entry name]) sortBy: [:a :b >> | a >= b]]! >> - ifTrue: [dir entries collect: [:entry | entry name]]! >> >> >> Hi Levente, ah, because it creates a new instance and does not change data in-place. I see. Will do. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Help-Squeak-Project-mt-40-mcz-tp4910536p4910638.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Aug 12 08:16:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:16:56 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.42.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.42.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.42 Author: mt Time: 12 August 2016, 10:16:46.939343 am UUID: d5ec4812-897a-a44f-afda-c9205f385092 Ancestors: Help-Squeak-Project-mt.41 Use #sorted: because #sortBy: will be deprecated in the future. =============== Diff against Help-Squeak-Project-mt.41 =============== Item was changed: ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- pages | dir | dir := FileDirectory default directoryNamed: self folderName. ^ dir exists ifFalse: [#()] + ifTrue: [(dir entries collect: [:entry | entry name]) sorted: [:a :b | a >= b]]! - ifTrue: [(dir entries collect: [:entry | entry name]) sortBy: [:a :b | a >= b]]! From commits at source.squeak.org Fri Aug 12 08:23:41 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:23:43 2016 Subject: [squeak-dev] The Trunk: Tools-mt.716.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.716.mcz ==================== Summary ==================== Name: Tools-mt.716 Author: mt Time: 12 August 2016, 10:23:20.779343 am UUID: 89d5f9f2-c1ea-b844-ac93-cd650155a5dc Ancestors: Tools-mt.715 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. =============== Diff against Tools-mt.715 =============== Item was changed: ----- Method: MethodFinder>>initialize (in category 'initialize') ----- (excessive size, no diff calculated) Item was changed: ----- Method: MethodFinder>>initialize2 (in category 'initialize') ----- (excessive size, no diff calculated) Item was changed: ----- Method: ProcessBrowser>>updateProcessList (in category 'process list') ----- updateProcessList | oldSelectedProcess newIndex now | now := Time millisecondClockValue. now - lastUpdate < 500 ifTrue: [^ self]. "Don't update too fast" lastUpdate := now. oldSelectedProcess := selectedProcess. processList := selectedProcess := selectedSelector := nil. Smalltalk garbageCollectMost. "lose defunct processes" processList := Process allSubInstances reject: [:each | each isTerminated]. processList := processList + sorted: [:a :b | a priority >= b priority]. - sortBy: [:a :b | a priority >= b priority]. processList := WeakArray withAll: processList. newIndex := processList indexOf: oldSelectedProcess ifAbsent: [0]. self changed: #processNameList. self processListIndex: newIndex! Item was changed: ----- Method: SelectorBrowser>>listFromResult: (in category 'selector finding') ----- listFromResult: resultOC "ResultOC is of the form #('(data1 op data2)' '(...)'). Answer a sorted array." (resultOC first beginsWith: 'no single method') ifTrue: [^ #()]. + ^ resultOC sorted: [:a :b | - ^ resultOC sortBy: [:a :b | (a copyFrom: 6 to: a size) < (b copyFrom: 6 to: b size)]. ! From commits at source.squeak.org Fri Aug 12 08:24:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:24:48 2016 Subject: [squeak-dev] The Trunk: Collections-mt.707.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.707.mcz ==================== Summary ==================== Name: Collections-mt.707 Author: mt Time: 12 August 2016, 10:24:25.707343 am UUID: 08096a9d-2908-cb43-9f45-47106e6f1eb5 Ancestors: Collections-mt.706 Deprecate #sortBy:. =============== Diff against Collections-mt.706 =============== Item was removed: - ----- Method: SequenceableCollection>>sortBy: (in category 'copying') ----- - sortBy: aBlock - "Create a copy that is sorted. Sort criteria is the block that accepts two arguments. - When the block is true, the first arg goes first ([:a :b | a > b] sorts in descending - order)." - - ^ self asOrderedCollection - sort: aBlock; - yourself! From commits at source.squeak.org Fri Aug 12 08:25:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:25:19 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.43.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.43.mcz ==================== Summary ==================== Name: 51Deprecated-mt.43 Author: mt Time: 12 August 2016, 10:25:11.220343 am UUID: b73f0ccb-866f-474a-987a-4c8fe1b1da8a Ancestors: 51Deprecated-tfel.42 Deprecate #sortBy:. =============== Diff against 51Deprecated-tfel.42 =============== Item was added: + ----- Method: SequenceableCollection>>sortBy: (in category '*51Deprecated-copying') ----- + sortBy: aBlock + "Create a copy that is sorted. Sort criteria is the block that accepts two arguments. + When the block is true, the first arg goes first ([:a :b | a > b] sorts in descending + order)." + + self deprecated: 'mt: Use #sorted:.'. + ^ self asOrderedCollection + sort: aBlock; + yourself! From commits at source.squeak.org Fri Aug 12 08:26:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:26:55 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1264.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1264.mcz ==================== Summary ==================== Name: Morphic-mt.1264 Author: mt Time: 12 August 2016, 10:26:01.261343 am UUID: 0c9f94c5-23b0-d44d-963c-4b70b7a58be9 Ancestors: Morphic-mt.1263 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. =============== Diff against Morphic-mt.1263 =============== Item was changed: ----- Method: FileDirectoryWrapper>>contents (in category 'accessing') ----- contents + ^((model directoryNamesFor: item) sorted: [ :a :b | a caseInsensitiveLessOrEqual: b]) collect: [ :n | - ^((model directoryNamesFor: item) sortBy: [ :a :b | a caseInsensitiveLessOrEqual: b]) collect: [ :n | FileDirectoryWrapper with: (item directoryNamed: n) name: n model: self ] ! Item was changed: ----- Method: PasteUpMorph>>sortSubmorphsBy: (in category 'viewing') ----- sortSubmorphsBy: sortOrderSymbol "Sort the receiver's submorphs by the criterion indicated in the provided symbol" self invalidRect: self fullBounds. + submorphs := submorphs sorted: [:a :b | (a perform: sortOrderSymbol) <= (b perform: sortOrderSymbol)]. - submorphs := submorphs sortBy:[:a :b | (a perform: sortOrderSymbol) <= (b perform: sortOrderSymbol)]. self layoutChanged.! Item was changed: ----- Method: TheWorldMainDockingBar>>themesAndWindowColorsOn: (in category 'submenu - extras') ----- themesAndWindowColorsOn: menu | themes | + themes := UserInterfaceTheme allThemes asArray sorted: [:t1 :t2 | - themes := UserInterfaceTheme allThemes asArray sortBy: [:t1 :t2 | t1 name <= t2 name]. menu addItem:[:item| item contents: (Model useColorfulWindows ifTrue: [''] ifFalse: ['']), 'Colorful Windows' translated; target: self; selector: #toggleColorfulWindows]. menu addItem:[:item| item contents: (SystemWindow gradientWindow not ifTrue: [''] ifFalse: ['']), 'Flat Widget Look' translated; target: self; selector: #toggleGradients]. menu addLine. menu addItem:[:item | item contents: (((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow]) ifTrue: [''] ifFalse: ['']), 'Soft Shadows' translated; target: self; selector: #toggleSoftShadows]. menu addItem:[:item | item contents: (((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow not]) ifTrue: [''] ifFalse: ['']), 'Hard Shadows' translated; target: self; selector: #toggleHardShadows]. menu addLine. menu addItem:[:item | item contents: (SystemWindow roundedWindowCorners ifTrue: [''] ifFalse: ['']), 'Rounded Window/Dialog/Menu Look' translated; target: self; selector: #toggleRoundedWindowLook]. menu addItem:[:item | item contents: (PluggableButtonMorph roundedButtonCorners ifTrue: [''] ifFalse: ['']), 'Rounded Button/Scrollbar Look' translated; target: self; selector: #toggleRoundedButtonLook]. menu addLine. themes ifEmpty: [ menu addItem: [ :item | item contents: '(No UI themes found.)' translated; isEnabled: false ] ]. themes do: [ :each | menu addItem: [ :item | item contents: (UserInterfaceTheme current == each ifTrue: [''] ifFalse: ['']), each name; target: each; selector: #apply ] ]. menu addLine; add: 'Edit Current UI Theme...' target: self selector: #editCurrentTheme.! Item was changed: ----- Method: TheWorldMenu>>alphabeticalMorphMenu (in category 'construction') ----- alphabeticalMorphMenu | list splitLists menu firstChar lastChar subMenu | list := Morph withAllSubclasses select: [:m | m includeInNewMorphMenu]. + list := list sorted: [:c1 :c2 | c1 name < c2 name]. - list := list asArray sortBy: [:c1 :c2 | c1 name < c2 name]. splitLists := self splitNewMorphList: list depth: 3. menu := MenuMorph new defaultTarget: self. 1 to: splitLists size do: [:i | firstChar := i = 1 ifTrue: [$A] ifFalse: [((splitLists at: i - 1) last name first asInteger + 1) asCharacter]. lastChar := i = splitLists size ifTrue: [$Z] ifFalse: [(splitLists at: i) last name first]. subMenu := MenuMorph new. (splitLists at: i) do: [:cl | subMenu add: cl name target: self selector: #newMorphOfClass:event: argument: cl]. menu add: firstChar asString , ' - ' , lastChar asString subMenu: subMenu]. ^menu! From commits at source.squeak.org Fri Aug 12 08:27:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:27:12 2016 Subject: [squeak-dev] The Trunk: PackageInfo-Base-mt.69.mcz Message-ID: Marcel Taeumel uploaded a new version of PackageInfo-Base to project The Trunk: http://source.squeak.org/trunk/PackageInfo-Base-mt.69.mcz ==================== Summary ==================== Name: PackageInfo-Base-mt.69 Author: mt Time: 12 August 2016, 10:26:57.349343 am UUID: 82ef9782-996b-714f-b729-849832d38742 Ancestors: PackageInfo-Base-nice.68 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. =============== Diff against PackageInfo-Base-nice.68 =============== Item was changed: ----- Method: PackageInfo>>classes (in category 'listing') ----- classes ^(self systemCategories gather: [:cat | (SystemOrganization listAtCategoryNamed: cat) collect: [:className | Smalltalk at: className]]) + sorted: [:a :b | a className <= b className]! - sortBy: [:a :b | a className <= b className]! From commits at source.squeak.org Fri Aug 12 08:27:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:27:54 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.68.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.68.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.68 Author: mt Time: 12 August 2016, 10:27:47.074343 am UUID: 237e2416-5da6-7549-a396-19873c3342df Ancestors: PreferenceBrowser-mt.67 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. =============== Diff against PreferenceBrowser-mt.67 =============== Item was changed: ----- Method: PreferenceWizardMorph>>initializePage01Themes (in category 'initialization') ----- initializePage01Themes | currentPage | currentPage := pages add: self createPage. currentPage addMorphBack: (self createLabel: 'Choose a theme:' color: Color white). + (UserInterfaceTheme allThemes sorted: [:a :b | a name <= b name]) do: [:ea | - (UserInterfaceTheme allThemes asArray sortBy: [:a :b | a name <= b name]) do: [:ea | currentPage addMorphBack: (self createButton label: ea name; hResizing: #spaceFill; action: #chooseTheme:; arguments: {ea})]. currentPage addMorphBack: self createVerticalSpacer. ! From commits at source.squeak.org Fri Aug 12 08:28:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:28:30 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.149.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.149.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.149 Author: mt Time: 12 August 2016, 10:28:22.806343 am UUID: e0a9276b-28a4-7e41-8c55-72c373516a2d Ancestors: ReleaseBuilder-mt.148 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. =============== Diff against ReleaseBuilder-mt.148 =============== Item was changed: ----- Method: ReleaseBuilder class>>checkForDirtyPackages (in category 'scripts - support') ----- checkForDirtyPackages | modifiedWorkingCopies unmergedWorkingCopies | MCWorkingCopy checkModified: true. modifiedWorkingCopies := MCWorkingCopy allManagers select: [:wc | wc ancestors size = 1 and: [wc modified] ]. unmergedWorkingCopies := MCWorkingCopy allManagers select: [:wc | (wc ancestors size = 1) not ]. unmergedWorkingCopies ifNotEmpty: [ "Sort to simplify exploration. MC browser does also show packages sorted." + (modifiedWorkingCopies sorted: [:wc1 :wc2 | wc1 packageName <= wc2 packageName]) explore. - (modifiedWorkingCopies sortBy: [:wc1 :wc2 | wc1 packageName <= wc2 packageName]) explore. Warning signal: 'There are unmerged packages.']. modifiedWorkingCopies ifNotEmpty: [ "Sort to simplify exploration. MC browser does also show packages sorted." + (modifiedWorkingCopies sorted: [:wc1 :wc2 | wc1 packageName <= wc2 packageName]) explore. - (modifiedWorkingCopies sortBy: [:wc1 :wc2 | wc1 packageName <= wc2 packageName]) explore. (Project current uiManager confirm: 'Do you want to discard all local changes?' orCancel: [^ Error signal: 'Release building canceled.'] title: 'Dirty Packages Found') ifTrue: [modifiedWorkingCopies do: [:wc | [(self buildRepository versionWithInfo: wc ancestors first) load] on: Warning do: [:warning | warning resume]]]].! From commits at source.squeak.org Fri Aug 12 08:32:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:32:43 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.69.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.69.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.69 Author: mt Time: 12 August 2016, 10:32:08.080343 am UUID: ce2056f6-820d-d448-b832-80b223fe87ce Ancestors: PreferenceBrowser-mt.68 Fixes some help/preference texts. Thanks Tim R.! =============== Diff against PreferenceBrowser-mt.68 =============== Item was changed: ----- Method: PreferenceBrowser>>helpText (in category 'preferences search') ----- helpText ^(String streamContents: [:str | str nextPutAll: + 'Many aspects of the system are governed by the settings of various ''Preferences''. - 'Many aspects of the system are goberned by the settings of various ''Preferences''. + Click on any of the categories shown in the list on the left to see all the preferences in that category. Alternatively type into the search box at the top of the window and all Preferences matching whatever you typed will appear in the ''search results'' category. A preference is considered to match your search if either its name matches the text *or* if anything in the preference''s help text does. - Click on any of the categories shown at the left list to see all the preferences in that category. Or type into the search box at the bottom of the window, then hit Search, and all Preferences matching whatever you typed in will appear in the ''search results'' category. A preference is considered to match your search if either its name matches the text *or* if anything in the preference''s help text does. + To find out more about any particular Preference just select it and its help text will appear. The ''more'' button at the end of the hlpe text pops up a menu with some more expert-oriented options. - To find out more about any particular Preference just select it and its help text will appear. Some preferences can be ''local'' instead of global. When a preference is set as global its value will apply to whatever project you are in. A local preference will only be valid in the project that you set it in. The ''Save'' button allow you to quickly save your current settings so it can later be restored with the ''Load'' button. To carry your settings to another Squeak you might want to use the ''Save to disk'' and ''Load from disk'' buttons. The save to disk option will store all your settings in a ''my.prefs'' file in your Squeak''s current directory. + .']) translated! - - Lastly, you can use the "theme..." button to set multiple preferences all at once; click on the "theme..." button and try the themes already provided with your Squeak image.']) translated! From commits at source.squeak.org Fri Aug 12 08:33:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:33:24 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1265.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1265.mcz ==================== Summary ==================== Name: Morphic-mt.1265 Author: mt Time: 12 August 2016, 10:30:46.794343 am UUID: e8a61f3c-df5d-3346-a03f-472bd52be3b6 Ancestors: Morphic-mt.1264 Fixes some help/preference texts. Thanks Tim R.! =============== Diff against Morphic-mt.1264 =============== Item was changed: ----- Method: NewBalloonMorph class>>useNewBalloonMorph (in category 'preferences') ----- useNewBalloonMorph + ^ UseNewBalloonMorph ifNil: [true]! Item was changed: ----- Method: PluggableListMorph class>>highlightHoveredRow (in category 'preferences') ----- highlightHoveredRow ^ HighlightHoveredRow ifNil: [true]! From commits at source.squeak.org Fri Aug 12 08:35:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:35:54 2016 Subject: [squeak-dev] The Trunk: Tools-mt.717.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.717.mcz ==================== Summary ==================== Name: Tools-mt.717 Author: mt Time: 12 August 2016, 10:33:22.251343 am UUID: a5797059-da02-1b4e-b870-d3fccc8fc0a1 Ancestors: Tools-mt.716 Fixes some help/preference texts. Thanks Tim R.! =============== Diff against Tools-mt.716 =============== Item was changed: ----- Method: Debugger class>>wantsAnnotationPane (in category 'preferences') ----- wantsAnnotationPane ^ WantsAnnotationPane ifNil: [false]! From commits at source.squeak.org Fri Aug 12 08:35:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 08:35:58 2016 Subject: [squeak-dev] The Trunk: Tools-mt.717.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.717.mcz ==================== Summary ==================== Name: Tools-mt.717 Author: mt Time: 12 August 2016, 10:33:22.251343 am UUID: a5797059-da02-1b4e-b870-d3fccc8fc0a1 Ancestors: Tools-mt.716 Fixes some help/preference texts. Thanks Tim R.! =============== Diff against Tools-mt.716 =============== Item was changed: ----- Method: Debugger class>>wantsAnnotationPane (in category 'preferences') ----- wantsAnnotationPane ^ WantsAnnotationPane ifNil: [false]! From herbertkoenig at gmx.net Fri Aug 12 08:37:57 2016 From: herbertkoenig at gmx.net (=?ISO-8859-1?Q?Herbert_K=F6nig?=) Date: Fri Aug 12 08:47:32 2016 Subject: AW: [squeak-dev] Squeak 5.1 PreferenceBrowser notes Message-ID: Hi,? Flaps are the only way to move a Moroh from one Project to the next. Well the only convenient way i know of. Please keep them.? Cheers,? Herbert
-------- Urspr?ngliche Nachricht --------
Von: tim Rowledge
Datum:11.08.2016 20:24 (GMT+01:00)
An: The general-purpose Squeak developers list
Betreff: [squeak-dev] Squeak 5.1 PreferenceBrowser notes
I actually sat and read through, and tried, all the preferences. It was not a lot of fun. Here are some notes resulting from that marathon of pain. Basic points ======== Ridiculous mix of upper and lower cased and camel-cased preference names. Some with spaces, some not. Accompanying help text often needs spelling, grammar or factual fixes. The 'help' button window refers to a non-existent 'theme...' button. And has mis-spelllings. In general we have an insane number of preferences that seem to do nothing interesting . Probably time to get rid of a lot of them and simplify life. Specific items, with often snarky commentary. ============================= block assignments - should not be allowed underscore assignments? - should not be allowed; see Cuis for a way to do it right. Examples - why are they in the tool? Several appear to be unused anyway subpixel rendering - not able to see any difference; is it actually in use? auto-enclose - doesn't match capability with autoEnclose. See TextEditor>>dispatchOnKeyboardEvent: Also, one has char as arg, other has event. Yuck! highlight hovered row in lists - seems wrong to have the preference in PluggableListMorph but used in just two classes that are not related. 'Menu request updates list/tree selection' help text is gibberish 'Use new style balloon morphs' why bother offering the choice instead of dropping the old ones? Browse with drag'n'drop - does this need to be a pref? syntaxHighlightingAsYouType - none of th three seem to have any users Use the new color-picker - is this of any use? Corner Grip * - ditto Flaps - are they still in there? Thorough senders - dump it automaticPlatformSettings - what? modalColorPickers - seems pointless readOnlyMode - no usages? alternateHandlesLook - why? biggerHandles - why? has some interaction with tinyDisplay/bigDisplay haloTransitions - I don't think so magic/maintain/mouseOver-Halos - what? generally halo stuff seems to have an insane number of preferences that are not used. keyboard duplicate/swap stuff - way too complex and poorly explained simpleMenus - doesn't really have much effect timeStampsInMenuTitles - can't see what it is for menuBorderWidth - doesn't actually seem to relate to menus at all menuTitleBorderWidth - ditto - in fact none of the menuXX items seem to be used for menus Show wrap border in code panes & Wrap border limit - why in 'performance' and what are they supposed to be for? alternativeButtonsInScrollbars - any use? too many scrollbar options. must be a better way to make such choices, or actually decide on something and stick to it. inlineServicesInMenu - comment makes no sense. - do we still need the preferences if we always have services? 'Offer native fonts' only works with an apparently unused set of StrikeFont code (#fromUser: etc) and the code even breaks on linux since there are no truetype fonts (on my machine at least) Thuse the list of fonts is nil and the TTFileDescription class>>frontFromUser:allowKeyboard: code breaks. 'Selections may shrink' - is there any case where that would not be true? Font choosing ========= not part of preferencebrowser, which seems odd. appearance->systemfonts menu seems to not be matched to the themes fonts stuff? Preferences class>>restoreDefaultFont probably needs to use the theme data. #setDemoFonts likely simialr, and a 'return to normal' is needed too. 'Offer native fonts' only works with an apparently unused set of StrikeFont code (#fromUser: etc) and the code even breaks on linux since there are no truetype fonts (on my machine at least) Thuse the list of fonts is nil and the TTFileDescription class>>frontFromUser:allowKeyboard: code breaks. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Spell checkers at maximum!? Fire! -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160812/4fe5d81c/attachment.htm From Marcel.Taeumel at hpi.de Fri Aug 12 08:51:57 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 12 08:52:07 2016 Subject: [squeak-dev] Re: Squeak 5.1 PreferenceBrowser notes In-Reply-To: <4AEFCE20-8343-4CFD-A544-1BBC480D33FC@rowledge.org> References: <412D2F72-2043-4FD6-A09E-DDC829BF25A7@rowledge.org> <4AEFCE20-8343-4CFD-A544-1BBC480D33FC@rowledge.org> Message-ID: <1470991917103-4910659.post@n4.nabble.com> tim Rowledge wrote >> On 11-08-2016, at 12:47 PM, Chris Muller < > asqueaker@ > > wrote: >> I think you have a pretty good list, but we will use a thoughtful and >> logical approach and not a snarky one for determining the fate of each >> and every Preference. > > Snarky notes are better than no notes I suspect. At least it is a flag to > salute. And the major point - that we have a rather tangled mess of > confusion that needs pruning and copy-editing - is valid whether pointed > or polite. I just wish I?d had time to do some thing more practically > useful before code-freeze. > > > tim > -- > tim Rowledge; > tim@ > ; http://www.rowledge.org/tim > World Ends at Ten! Pictures at 11 on Fox News! Hey Tim, there surely will be another release. ;-) Yeah, for my way of writing source code, #autoEnclose is kind of cumbersome. I disable that and rather work with #encloseSelection, which I learned to love from OCompletion. :-) Still, there are two buglettes in #encloseSelection, namely hitting [9] on a German keyboard under Windows on a selection or the fact that I cannot enclose a selection with single quotes. Anyway, #encloseSelection circumvents the disability of German Windows keyboards to hit the usual keyboard shortcuts to enclose a selection. Awww, this beautiful [AltGr]-Key ... ^___^ Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-1-PreferenceBrowser-notes-tp4910579p4910659.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Fri Aug 12 08:54:13 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 12 08:54:24 2016 Subject: AW: [squeak-dev] Squeak 5.1 PreferenceBrowser notes In-Reply-To: References: Message-ID: <1470992053881-4910661.post@n4.nabble.com> Herbert K?nig wrote > Hi,? > Flaps are the only way to move a Moroh from one Project to the next. Well > the only convenient way i know of. > Please keep them.? > > Cheers,? > Herbert >
> -------- Urspr?ngliche Nachricht -------- >
>
> Von: tim Rowledge < > tim@ > > >
>
> Datum:11.08.2016 20:24 (GMT+01:00) >
>
> An: The general-purpose Squeak developers list < > squeak-dev@.squeakfoundation > > >
>
> Betreff: [squeak-dev] Squeak 5.1 PreferenceBrowser notes >
>
>
> I actually sat and read through, and tried, all the preferences. It was > not a lot of fun. Here are some notes resulting from that marathon of > pain. > > Basic points > ======== > > Ridiculous mix of upper and lower cased and camel-cased preference names. > Some with spaces, some not. Accompanying help text often needs spelling, > grammar or factual fixes. > The 'help' button window refers to a non-existent 'theme...' button. And > has mis-spelllings. > In general we have an insane number of preferences that seem to do nothing > interesting . Probably time to get rid of a lot of them and simplify life. > > Specific items, with often snarky commentary. > ============================= > > block assignments - should not be allowed > > underscore assignments? - should not be allowed; see Cuis for a way to do > it right. > > Examples - why are they in the tool? Several appear to be unused anyway > > subpixel rendering - not able to see any difference; is it actually in > use? > > auto-enclose - doesn't match capability with autoEnclose. See > TextEditor>>dispatchOnKeyboardEvent: Also, one has char as arg, other has > event. Yuck! > > highlight hovered row in lists - seems wrong to have the preference in > PluggableListMorph but used in just two classes that are not related. > > 'Menu request updates list/tree selection' help text is gibberish > > 'Use new style balloon morphs' why bother offering the choice instead of > dropping the old ones? > > Browse with drag'n'drop - does this need to be a pref? > > syntaxHighlightingAsYouType - none of th three seem to have any users > > Use the new color-picker - is this of any use? > > Corner Grip * - ditto > > Flaps - are they still in there? > > Thorough senders - dump it > > automaticPlatformSettings - what? > > modalColorPickers - seems pointless > > readOnlyMode - no usages? > > alternateHandlesLook - why? > > biggerHandles - why? has some interaction with tinyDisplay/bigDisplay > > haloTransitions - I don't think so > > magic/maintain/mouseOver-Halos - what? > > generally halo stuff seems to have an insane number of preferences that > are not used. > > keyboard duplicate/swap stuff - way too complex and poorly explained > > simpleMenus - doesn't really have much effect > > timeStampsInMenuTitles - can't see what it is for > > menuBorderWidth - doesn't actually seem to relate to menus at all > > menuTitleBorderWidth - ditto > > - in fact none of the menuXX items seem to be used for menus > > Show wrap border in code panes & Wrap border limit - why in 'performance' > and what are they supposed to be for? > > alternativeButtonsInScrollbars - any use? > > too many scrollbar options. must be a better way to make such choices, or > actually decide on something and stick to it. > > inlineServicesInMenu - comment makes no sense. > - do we still need the preferences if we always have services? > > 'Offer native fonts' only works with an apparently unused set of > StrikeFont code (#fromUser: etc) and the code even breaks on linux since > there are no truetype fonts (on my machine at least) Thuse the list of > fonts is nil and the TTFileDescription class>>frontFromUser:allowKeyboard: > code breaks. > > 'Selections may shrink' - is there any case where that would not be true? > > Font choosing > ========= > not part of preferencebrowser, which seems odd. > appearance->systemfonts menu seems to not be matched to the themes fonts > stuff? Preferences class>>restoreDefaultFont probably needs to use the > theme data. > #setDemoFonts likely simialr, and a 'return to normal' is needed too. > 'Offer native fonts' only works with an apparently unused set of > StrikeFont code (#fromUser: etc) and the code even breaks on linux since > there are no truetype fonts (on my machine at least) Thuse the list of > fonts is nil and the TTFileDescription class>>frontFromUser:allowKeyboard: > code breaks. > > tim > -- > tim Rowledge; > tim@ > ; http://www.rowledge.org/tim > Spell checkers at maximum!? Fire! Hey Herbert, sure, flaps remain. When I poked around in some flaps code, I noticed big refactoring potential. :) The way global and project-local flaps are initialized, updated, shown, hidden, ... kind of quirky and error-prone. Best, Marcel -- View this message in context: http://forum.world.st/AW-squeak-dev-Squeak-5-1-PreferenceBrowser-notes-tp4910657p4910661.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From leves at caesar.elte.hu Fri Aug 12 09:44:16 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri Aug 12 09:44:20 2016 Subject: [squeak-dev] Re: The Trunk: Help-Squeak-Project-mt.40.mcz In-Reply-To: <1470989692928-4910638.post@n4.nabble.com> References: <1470989692928-4910638.post@n4.nabble.com> Message-ID: Hi Marcel, On Fri, 12 Aug 2016, marcel.taeumel wrote: > Levente Uzonyi wrote >> Please do not use #sortBy:. It should have been deprecated in favor of >> #sorted:. >> >> Levente snip > > Hi Levente, > > ah, because it creates a new instance and does not change data in-place. I No. It's because #sorted: works for all Collections, while #sortBy: is specific to SequenceableCollection. #sortBy:'s comment is inaccurate about the return value (it doesn't create a _copy_ unless the receiver is an OrderedCollection), and it relies on #asOrderedCollection's unusual implementation, which returns a copy even if the receiver is an OrderedCollection. > see. Will do. Thanks! Levente > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Help-Squeak-Project-mt-40-mcz-tp4910536p4910638.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From commits at source.squeak.org Fri Aug 12 09:58:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 09:58:39 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.70.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.70.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.70 Author: mt Time: 12 August 2016, 11:58:31.556343 am UUID: 6d579f33-f1fb-4b48-a851-8b396a061ec0 Ancestors: PreferenceBrowser-mt.69 Make preference wizard not so alien and more easily dismiss-able. =============== Diff against PreferenceBrowser-mt.69 =============== Item was changed: Morph subclass: #PreferenceWizardMorph + instanceVariableNames: 'previewWorld titleMorph buttonRowMorph controlMorph startButton previousButton nextButton pages currentPageIndex pagesLabel skipButton isFullScreen' - instanceVariableNames: 'previewWorld titleMorph buttonRowMorph controlMorph startButton previousButton nextButton pages currentPageIndex pagesLabel skipButton' classVariableNames: '' poolDictionaries: '' category: 'PreferenceBrowser'! Item was changed: ----- Method: PreferenceWizardMorph>>createButton (in category 'initialization') ----- createButton ^ PluggableButtonMorphPlus new setProperty: #noUserInterfaceTheme toValue: true; + offColor: (self defaultColor adjustBrightness: 0.2); + feedbackColor: (self defaultColor adjustBrightness: 0.4); - offColor: (Color gray: 0.2); - feedbackColor: (Color gray: 0.5); model: self; font: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 12); + textColor: self defaultTextColor; + borderColor: self defaultTextColor; + instVarNamed: #borderColor put: self defaultTextColor; "HACK!!" - textColor: Color white; - borderColor: Color white; - instVarNamed: #borderColor put: Color white; "HACK!!" borderWidth: 2; cornerStyle: #rounded; vResizing: #shrinkWrap; hResizing: #shrinkWrap; layoutInset: (20@10 corner: 20@10); yourself! Item was changed: ----- Method: PreferenceWizardMorph>>createCheckbox:for: (in category 'initialization') ----- createCheckbox: label for: selector | box lbl btn | btn := self createButton label: ' '; + onColor: Color white offColor: (self defaultColor adjustBrightness: 0.3); - onColor: Color white offColor: (Color gray: 0.2); vResizing: #rigid; hResizing: #rigid; action: ('toggle', selector) asSymbol; getStateSelector: ('state', selector) asSymbol; extent: 25@25. + lbl := self createLabel: label color: self defaultTextColor. - lbl := self createLabel: label color: Color white. box := Morph new color: Color transparent; changeTableLayout; listDirection: #leftToRight; cellPositioning: #topLeft; hResizing: #spaceFill; vResizing: #shrinkWrap; cellInset: 10; yourself. box addAllMorphs: {btn. lbl}. ^ box! Item was changed: ----- Method: PreferenceWizardMorph>>createLabel: (in category 'initialization') ----- createLabel: aString + ^ self createLabel: aString color: (self defaultTextColor adjustBrightness: -0.1)! - ^ self createLabel: aString color: (Color gray: 0.8)! Item was changed: ----- Method: PreferenceWizardMorph>>createLabel:color: (in category 'initialization') ----- createLabel: aString color: aColor | lbl | lbl := TextMorph new hResizing: #spaceFill; vResizing: #shrinkWrap. lbl newContents:aString. lbl text addAttribute: (TextColor color: aColor); addAttribute: (TextFontReference toFont: ((StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 12))). + lbl lock. ^ lbl! Item was added: + ----- Method: PreferenceWizardMorph>>defaultColor (in category 'initialization') ----- + defaultColor + + ^ Color black! Item was added: + ----- Method: PreferenceWizardMorph>>defaultTextColor (in category 'initialization') ----- + defaultTextColor + + ^ Color white! Item was changed: ----- Method: PreferenceWizardMorph>>initialize (in category 'initialization') ----- initialize super initialize. + isFullScreen := false. + + self color: (self defaultColor alpha: 0.75). - self color: Color black. self setProperty: #indicateKeyboardFocus toValue: #never. Preferences enable: #systemWindowEmbedOK. titleMorph := ('Welcome to Squeak' translated asText + addAttribute: (TextColor color: self defaultTextColor); - addAttribute: (TextColor color: Color white); addAttribute: (TextFontReference toFont: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 20)); + yourself) asMorph lock. - yourself) asMorph. titleMorph margins: (10@0 corner: 10@10). titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0@ 0 corner: 0 @ titleMorph height)). self initializePages; initializeButtons; initializeControlMorph; initializePreviewWorld. self changeProportionalLayout; layoutInset: 20; cellInset: 10; + cellPositioning: #center; addAllMorphs: {titleMorph. buttonRowMorph. controlMorph. previewWorld. startButton. skipButton}. self addKeyboardCaptureFilter: self.! Item was changed: ----- Method: PreferenceWizardMorph>>initializeButtons (in category 'initialization') ----- initializeButtons buttonRowMorph := Morph new color: Color transparent; changeTableLayout; listDirection: #leftToRight; cellInset: 10; layoutInset: (0@20 corner: 0@0); vResizing: #shrinkWrap; hResizing: #spaceFill; yourself. buttonRowMorph addAllMorphs: { previousButton := self createButton action: #previous; label: 'Previous' translated. pagesLabel := (self createLabel: '0 / 0') hResizing: #shrinkWrap; margins: (20@0 corner: 20@0); fullBounds; yourself. nextButton := self createButton action: #next; label: 'Next' translated. self createHorizontalSpacer. self createButton action: #showSqueak; label: 'Done' translated}. buttonRowMorph fullBounds. buttonRowMorph layoutFrame: (LayoutFrame fractions: (0 @ 1 corner: 1 @ 1) offsets: (0@ buttonRowMorph height negated corner: 0 @ 0)). + startButton := (self createButton action: #showPlayfield; label: 'Configure' translated). + skipButton := (self createButton action: #showSqueak; label: 'Skip' translated). + + (startButton width max: skipButton width) in: [:w | + startButton hResizing: #rigid; width: w. + skipButton hResizing: #rigid; width: w. + + startButton layoutFrame: (LayoutFrame fractions: (0.5 @ 0.6 corner: 0.5 @ 0.6) offsets: (2*w negated @ 0 corner: 0 @ 0)). + skipButton layoutFrame: (LayoutFrame fractions: (0.5 @ 0.6 corner: 0.5 @ 0.6) offsets: (0@ 0 corner: 2*w @ 0))].! - startButton := (self createButton action: #showPlayfield; label: 'Continue' translated). - startButton layoutFrame: (LayoutFrame fractions: (0 @ 0.5 corner: 1 @ 0.5) offsets: (0@ 0 corner: 0 @ (titleMorph height * 4))). - skipButton := (self createButton action: #showSqueak; label: 'Skip' translated; borderWidth: 0; color: Color black). - skipButton layoutFrame: (LayoutFrame fractions: (1@1 corner: 1@1) offsets: (skipButton fullBounds width negated @ skipButton fullBounds height negated corner: 0@0)). - ! Item was changed: ----- Method: PreferenceWizardMorph>>intoWorld: (in category 'initialization') ----- intoWorld: world super intoWorld: world. self bounds: world bounds. self fullBounds. self updateWindowBounds. + world activeHand + newKeyboardFocus: self; + newMouseFocus: self. + - world activeHand newKeyboardFocus: self. - self showWelcome.! Item was added: + ----- Method: PreferenceWizardMorph>>mouseDown: (in category 'event handling') ----- + mouseDown: evt + + (self containsPoint: evt position) + ifFalse: [^ self delete].! Item was added: + ----- Method: PreferenceWizardMorph>>mouseUp: (in category 'event handling') ----- + mouseUp: evt + + evt hand newMouseFocus: self.! Item was added: + ----- Method: PreferenceWizardMorph>>processFocusEvent:using: (in category 'event handling') ----- + processFocusEvent: evt using: dispatcher + + ^ dispatcher dispatchFocusEventFully: evt with: self! Item was changed: ----- Method: PreferenceWizardMorph>>showPlayfield (in category 'actions') ----- showPlayfield startButton hide. skipButton hide. + isFullScreen := true. + self step. - self refreshWorld. - (Delay forMilliseconds: 1000) wait. - titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0@ 0 corner: 0 @ titleMorph height)). self refreshWorld. (Delay forMilliseconds: 1000) wait. controlMorph show. self refreshWorld. (Delay forMilliseconds: 1000) wait. previewWorld show. self refreshWorld. (Delay forMilliseconds: 1000) wait. buttonRowMorph show. self next. self refreshWorld. ! Item was changed: ----- Method: PreferenceWizardMorph>>showSqueak (in category 'actions') ----- showSqueak + self isInWelcome ifTrue: [^ self delete]. - self isInWelcome ifTrue: [ - startButton hide. - skipButton hide. - self refreshWorld. - (Delay forMilliseconds: 1000) wait. - titleMorph hide. - self refreshWorld. - (Delay forMilliseconds: 1000) wait. - ^ self delete]. buttonRowMorph hide. self refreshWorld. (Delay forMilliseconds: 1000) wait. controlMorph hide. self refreshWorld. (Delay forMilliseconds: 1000) wait. previewWorld hide. self refreshWorld. (Delay forMilliseconds: 1000) wait. titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1)). self refreshWorld. (Delay forMilliseconds: 1000) wait. self delete.! Item was changed: ----- Method: PreferenceWizardMorph>>showWelcome (in category 'actions') ----- showWelcome + titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0.65) offsets: (0 @0 corner: 0@0)). + isFullScreen := false. + self height: titleMorph fullBounds height * 4. + self step. + self fullBounds. + self step. - titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1)). controlMorph hide. previewWorld hide. buttonRowMorph hide. - titleMorph hide. - startButton hide. - skipButton hide. - self refreshWorld. - - (Delay forMilliseconds: 1000) wait. titleMorph show. - self refreshWorld. - - - (Delay forMilliseconds: 1000) wait. startButton show. skipButton show. + self refreshWorld. ! Item was changed: ----- Method: PreferenceWizardMorph>>step (in category 'stepping and presenter') ----- step + | oldWidth oldBounds | - | oldBounds | "self comeToFront." + isFullScreen == true + ifTrue: [ + oldBounds := self bounds. + self bounds: self world bounds. + self bounds = oldBounds ifFalse: [ + self updateWindowBounds]] + ifFalse: [ + oldWidth := self width. + self width: self world width. + self center: self world center. + self width = oldWidth ifFalse: [ + self updateWindowBounds]].! - oldBounds := self bounds. - self bounds: self world bounds. - self bounds = oldBounds ifFalse: [ - self updateWindowBounds].! Item was changed: ----- Method: PreferenceWizardMorph>>updateWindowBounds (in category 'layout') ----- updateWindowBounds | windows offset | + isFullScreen == false ifTrue: [^ self]. + + self fullBounds. + windows := previewWorld submorphs. offset := 50@50. windows reversed do: [:ea | ea topLeft: previewWorld topLeft + offset; extent: previewWorld extent // 3 * 2. offset := offset + (50@50)].! From commits at source.squeak.org Fri Aug 12 10:12:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 10:12:06 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.89.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.89.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.89 Author: mt Time: 12 August 2016, 12:12:00.396343 pm UUID: 1599374a-dc8c-1d49-978c-922810051739 Ancestors: HelpSystem-Core-mt.88 Small fall-back for not existing keys in generic help topics. =============== Diff against HelpSystem-Core-mt.88 =============== Item was added: + ----- Method: AbstractHelpTopic>>key (in category 'accessing') ----- + key + ^ nil! From commits at source.squeak.org Fri Aug 12 10:12:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 10:12:57 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.150.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.150.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.150 Author: mt Time: 12 August 2016, 12:12:50.338343 pm UUID: 94c3f7c3-28de-e146-ad7c-f29f88692fa7 Ancestors: ReleaseBuilder-mt.149 When preparing the environment, show welcome information again. =============== Diff against ReleaseBuilder-mt.149 =============== Item was changed: ----- Method: ReleaseBuilder class>>openWelcomeWorkspaces (in category 'scripts - support') ----- openWelcomeWorkspaces + | t b | + t := HelpTopic title: 'Welcome to Squeak' readOnlyContents: 'Please choose a topic from the left sidebare.'. + + t subtopics + add: (SqueakHelp asHelpTopic subtopics detect: [:ea | ea key = #introduction]); + add: SqueakLicenseHelp asHelpTopic; + add: (SqueakProjectHelp asHelpTopic subtopics detect: [:ea | ea key = #squeakUserInterface]); + add: (SqueakProjectHelp asHelpTopic subtopics detect: [:ea | ea key = #workingWithSqueak]); + add: SqueakReleaseNotes asHelpTopic. + + b := HelpBrowser openOn: t. + b extent: b world extent * 0.6. + b center: b world center. + b model showFirstTopic.! - " |offset | offset:= 50@50. - #('License Information' 'The Squeak User Interface' 'Working With Squeak' 'Release Notes') - with: #(#licenseInformation #squeakUserInterface #workingWithSqueak #releaseNotes) - do: [ : eachLabel : eachAccessor | - TheWorldMainDockingBar instance - showWelcomeText: eachAccessor - label: eachLabel - in: (offset extent: 500@300). - offset := offset + (30@30)]"! From commits at source.squeak.org Fri Aug 12 10:28:05 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 10:28:07 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.90.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.90.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.90 Author: mt Time: 12 August 2016, 12:28:01.727343 pm UUID: 4ac95aa0-aa5f-334e-8f71-57b608bd5b4b Ancestors: HelpSystem-Core-mt.89 Normalize text attributes when editing help texts via the help browser. This is necessary to produce formatted text that works well with a variety of UI themes. =============== Diff against HelpSystem-Core-mt.89 =============== Item was changed: ----- Method: HelpBrowser>>accept: (in category 'actions') ----- accept: text "Accept edited text. Compile it into a HelpTopic" + | code parent topicClass topicMethod normalizedText colorsToRemove | - | code parent topicClass topicMethod | (self currentParentTopic isNil or: [self currentParentTopic isEditable not]) ifTrue: [^ self inform: 'This help topic cannot be edited.']. self changed: #clearUserEdits. parent := self currentParentTopic. topicClass := parent helpClass. topicMethod := self currentTopic key. + normalizedText := text. + + "Remove default colors for the sake of UI themes." + colorsToRemove := {Color black. Color white}. + normalizedText runs: (normalizedText runs collect: [:attributes | attributes reject: [:attribute | + (((attribute respondsTo: #color) and: [colorsToRemove includes: attribute color]) + or: [attribute respondsTo: #font])]]). code := String streamContents:[:s| s nextPutAll: topicMethod. s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'. s crtab; nextPutAll: '"', self name,' edit: ', topicMethod storeString,'"'. s crtab; nextPutAll: '^HelpTopic'. s crtab: 2; nextPutAll: 'title: ', currentTopic title storeString. s crtab: 2; nextPutAll: 'contents: '. + s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: normalizedText]) storeString. - s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: text]) storeString. s nextPutAll:' readStream nextChunkText'. ]. topicClass class compile: code classified: ((topicClass class organization categoryOfElement: topicMethod) ifNil:['pages']). parent refresh. parent == self rootTopic ifTrue: [self rootTopic: parent]. self currentTopic: (parent subtopics detect: [:t | t key = topicMethod]).! From commits at source.squeak.org Fri Aug 12 10:29:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 10:29:28 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.43.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.43.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.43 Author: mt Time: 12 August 2016, 12:29:16.847343 pm UUID: 90bc4dcb-2b5b-3245-8f04-d8f186d4e2ce Ancestors: Help-Squeak-Project-mt.42 Remove some attributes from welcome text. =============== Diff against Help-Squeak-Project-mt.42 =============== Item was changed: ----- Method: SqueakHelp class>>introduction (in category 'as yet unclassified') ----- introduction "This method was automatically generated. Edit it using:" "a HelpBrowser edit: #introduction" ^HelpTopic title: 'Welcome' contents: 'WELCOME Squeak is a modern, open source, full-featured implementation of the powerful Smalltalk programming language and environment. Squeak is highly-portable - even its virtual machine is written entirely in Smalltalk making it easy to debug, analyze, and change. Squeak is the vehicle for a wide range of projects from multimedia applications, educational platforms to commercial web application development.!! + ]style[(7 2 6 72 9 41 6 70 9 49 6 139)ba0,,ba0,a0,ba0,a0,ba0,a0,ba0,a0,ba0,a0!!' readStream nextChunkText! - ]style[(7 2 6 72 9 41 6 70 9 49 6 139)bcblack;a0FBitmap DejaVu Sans#19,cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14,ba0cblack;FBitmap DejaVu Sans#14,a0cblack;FBitmap DejaVu Sans#14!!' readStream nextChunkText! From commits at source.squeak.org Fri Aug 12 11:31:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 11:31:57 2016 Subject: [squeak-dev] The Trunk: Collections-mt.708.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.708.mcz ==================== Summary ==================== Name: Collections-mt.708 Author: mt Time: 12 August 2016, 1:31:36.259343 pm UUID: cdf7485c-7680-c04f-8808-5b3c84619133 Ancestors: Collections-mt.707 When analyzing the input string to add a text url, give the user a chance to verify and correct the result. (Use to update help texts for the release.) =============== Diff against Collections-mt.707 =============== Item was changed: ----- Method: TextURL>>analyze: (in category 'as yet unclassified') ----- analyze: aString | list | list := super analyze: aString. + + (UIManager default request: 'URL to open' translated initialAnswer: (list at: 1)) + in: [:answer | answer ifEmpty: [url := list at: 1] ifNotEmpty: [url := answer]]. + - url := list at: 1. ^ list at: 2! From commits at source.squeak.org Fri Aug 12 11:41:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 11:41:30 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1266.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1266.mcz ==================== Summary ==================== Name: Morphic-mt.1266 Author: mt Time: 12 August 2016, 1:40:46.810343 pm UUID: 640ce24d-e990-f54e-bc5d-dcdf35cdca3b Ancestors: Morphic-mt.1265 Avoid object-explorer side-effect for arbitrary code execution. Makes writing interactive help texts more powerful. =============== Diff against Morphic-mt.1265 =============== Item was changed: ----- Method: TextURL>>open: (in category '*Morphic') ----- open: anObject anObject isBehavior ifTrue: [ ^ anObject browse]. anObject isCompiledMethod ifTrue: [ ^ ToolSet browse: anObject methodClass selector: anObject selector]. anObject class == MethodReference ifTrue: [ ^ ToolSet browse: anObject actualClass selector: anObject selector]. anObject isSymbol ifTrue: [ SystemNavigation default browseAllImplementorsOf: anObject. SystemNavigation default browseAllCallsOn: anObject. + ^ self].! - ^ self]. - - anObject explore.! From commits at source.squeak.org Fri Aug 12 11:59:31 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 11:59:34 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.44.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.44.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.44 Author: mt Time: 12 August 2016, 1:59:24.229343 pm UUID: 346b01c7-9645-6a45-99c8-0c538cc1b524 Ancestors: Help-Squeak-Project-mt.43 Update Squeak introduction to match contents from squeak.org but be more interactive since we are already in the environment. =============== Diff against Help-Squeak-Project-mt.43 =============== Item was changed: ----- Method: SqueakHelp class>>introduction (in category 'as yet unclassified') ----- introduction "This method was automatically generated. Edit it using:" "a HelpBrowser edit: #introduction" ^HelpTopic title: 'Welcome' contents: + 'Welcome to Squeak (http://www.squeak.org) - 'WELCOME + Squeak is an open-source Smalltalk programming system with fast execution environments for all major platforms. It features the Morphic framework, which promotes low effort graphical, interactive application development and maintenance. Many projects have been successfully created with Squeak. They cover a wide range of domains such as education, multimedia, gaming, research, and commerce. - Squeak is a modern, open source, full-featured implementation of the powerful Smalltalk programming language and environment. + It''s Smalltalk!!!! + Everything is an object. Objects collaborate by exchanging messages to achieve the desired application behavior. The Smalltalk programming language has a concise syntax and simple execution semantics. The Smalltalk system is implemented in itself: Compiler, debugger, programming tools, and so on are all Smalltalk code the user can read and modify. Novice programmers can get started easily and experts can engineer elegant solutions at large. - Squeak is highly-portable - even its virtual machine is written entirely in Smalltalk making it easy to debug, analyze, and change. + Morphic UI Framework + All graphical objects are tangible and interactively changeable. This promotes short feedback loops and low-effort application development. Morphic thus leverages the live programming experience of traditional Smalltalk environments from a mainly text-focused domain to a graphical one. + + Powerful Tooling + The dynamic Squeak environment provides a variety of tools for browsing, writing, executing, and versioning Smalltalk code. Multiple debugging sessions can be served concurrently. Thanks to Morphic, tool customization can be achieved with reasonable effort. + + Fast Virtual Machine + There are several fast Squeak VMs that also support other languages of the Smalltalk family. Meta-tracing, just-in-time compilation, stack-to-register mapping, and aggressive in-line message caching yield efficiency in executing Smalltalk byte code. + + Web Development + With frameworks like Seaside and AIDA, Squeak can be a web server. It provides a layered set of abstractions over HTTP and HTML that let you build highly interactive web applications quickly, reusably,` and maintainably. + + Multi-Platform Support + Squeak supports Windows, Linux, and OS X and is preinstalled on C.H.I.P., Raspberry Pi, and OLPC XO.!! + ]style[(18 1 21 1 396 15 18 6 36 8 87 14 80 8 2 8 2 17 161 20 27 8 254 16 64 8 11 9 6 10 152 20 252 15 22 7 5 4 18 3 164 22 101)a0b,a0,Rhttp://www.squeak.org;,a0,,i,,Rcode://Object;,,Rcode://MessageSend;,,Rcode://HelpBrowser openForCodeOn: TerseGuideHelp;,,Rcode://Compiler;,,Rcode://Debugger;,,Rcode://Browser;,,i,,Rcode://Morph new openInHand;,,i,,Rcode://ToolSet browse: String selector: #findTokens:;,,Rcode://7/0;,,Rcode://MCWorkingCopyBrowser new show;,,i,,i,,Rhttp://www.seaside.st/;,,Rhttp://www.aidaweb.si/;,,Rcode://WebClient;,,i,!!' readStream nextChunkText! - Squeak is the vehicle for a wide range of projects from multimedia applications, educational platforms to commercial web application development.!! - ]style[(7 2 6 72 9 41 6 70 9 49 6 139)ba0,,ba0,a0,ba0,a0,ba0,a0,ba0,a0,ba0,a0!!' readStream nextChunkText! From Marcel.Taeumel at hpi.de Fri Aug 12 12:20:07 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 12 12:20:16 2016 Subject: [squeak-dev] Re: The Trunk: Help-Squeak-Project-mt.40.mcz In-Reply-To: References: <1470989692928-4910638.post@n4.nabble.com> Message-ID: <1471004407345-4910713.post@n4.nabble.com> Levente Uzonyi wrote > Hi Marcel, > > On Fri, 12 Aug 2016, marcel.taeumel wrote: > >> Levente Uzonyi wrote >>> Please do not use #sortBy:. It should have been deprecated in favor of >>> #sorted:. >>> >>> Levente > > snip > >> >> Hi Levente, >> >> ah, because it creates a new instance and does not change data in-place. >> I > > No. It's because #sorted: works for all Collections, while #sortBy: is > specific to SequenceableCollection. #sortBy:'s comment is inaccurate about > the return value (it doesn't create a _copy_ unless the receiver is an > OrderedCollection), and it relies on #asOrderedCollection's unusual > implementation, which returns a copy even if the receiver is an > OrderedCollection. > >> see. Will do. > > Thanks! > > Levente > >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/The-Trunk-Help-Squeak-Project-mt-40-mcz-tp4910536p4910638.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Hi Levente, as far as I could see, the remaining uses of #sortBy: in the image work now fine with #sorted:. #sortBy: is now officially deprecated. Any objections? (It's not even much. Only 20 senders of #sorted:.) Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Help-Squeak-Project-mt-40-mcz-tp4910536p4910713.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Aug 12 14:23:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 14:23:40 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.151.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.151.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.151 Author: mt Time: 12 August 2016, 4:23:33.198343 pm UUID: f39bb7dd-f7ba-ff44-9c9f-a27d89c24359 Ancestors: ReleaseBuilder-mt.150 Simple scripts for ReleaseBuilder to generate mark down for all commit messages between releases. Should help to write release notes. Just call "ReleaseBuilder fileOutChangesBetweenReleases" to try out. =============== Diff against ReleaseBuilder-mt.150 =============== Item was changed: ----- Method: ReleaseBuilder class>>buildConfiguration (in category 'accessing') ----- buildConfiguration + ^ self lastConfigurationIn: self buildRepository map: MCMcmUpdater updateMapName! - | max versionName | - max := 0. - versionName := ''. - - (self buildRepository versionNamesForPackageNamed: MCMcmUpdater updateMapName) do: [:nm | - ((nm findTokens: $.) atLast: 2) asInteger in: [:versionNumber | - versionNumber > max ifTrue: [max := versionNumber. versionName := nm]]]. - - ^ self buildRepository versionNamed: versionName - ! Item was added: + ----- Method: ReleaseBuilder class>>changesBetween:and: (in category 'scripts - support') ----- + changesBetween: startConfiguration and: endConfiguration + + | a b d | + a := startConfiguration. + b := endConfiguration. + d := OrderedDictionary new. + + b dependencies do: [:dep | + | begin end finished started | + finished := false. started := false. + begin := a dependencies + detect: [:ea | ea package = dep package] + ifFound: [:x | x versionInfo] + ifNone: [nil]. + end := dep versionInfo. + + d at: dep package put: OrderedDictionary new. + dep package workingCopy ancestry allAncestorsDo: [:ver | + started := started or: [ver name = end name]. + finished := finished or: [begin notNil and: [ver name = begin name]]. + started & finished not ifTrue: [(d at: dep package) at: ver put: ver message]]]. + ^ d! Item was added: + ----- Method: ReleaseBuilder class>>changesBetweenReleases (in category 'scripts - support') ----- + changesBetweenReleases + + | repos configs result | + repos :=#(41 42 43 44 45 50) collect: [:ea | + (MCHttpRepository + location: 'http://source.squeak.org/squeak', ea + user: 'squeak' + password: 'squeak')]. + configs := repos collect: [:ea | ea description -> (self firstConfigurationIn: ea map: 'update')]. + configs := configs, {(self buildRepository description -> self buildConfiguration)}. + + result := OrderedDictionary new. + configs overlappingPairsDo: [:c1 :c2 | + result + at: c2 key + put: (self changesBetween: c1 value and: c2 value)]. + + ^ result + ! Item was added: + ----- Method: ReleaseBuilder class>>fileOutChangesBetweenReleases (in category 'scripts - support') ----- + fileOutChangesBetweenReleases + "Generate mark-down files with all commit messages by release. To be used to write release notes." + + | fileNames | + fileNames := OrderedCollection new. + + self changesBetweenReleases keysAndValuesDo: [:location :c | + fileNames add: ('commits-{1}.md' format: {(location findTokens: '/') last}). + FileStream fileNamed: fileNames last do: [:strm | + c keysAndValuesDo: [:pkg :changes | + strm nextPutAll: '# '; nextPutAll: pkg name; cr. + changes keysAndValuesDo: [:ver :msg | + msg linesDo: [:line | line withBlanksTrimmed ifNotEmpty: [:m | + (m first isDigit or: [{$*. $-} includes: m first]) + ifTrue: [strm nextPutAll: ' ', m] + ifFalse: [strm nextPutAll: ' - ', m]. + strm cr]]]]]]. + + self inform: 'Files written:\' withCRs, (fileNames joinSeparatedBy: String cr).! Item was added: + ----- Method: ReleaseBuilder class>>firstConfigurationIn:map: (in category 'scripts - support') ----- + firstConfigurationIn: repo map: map + + | min versionName | + min := 999999999. + versionName := ''. + + (repo versionNamesForPackageNamed: map) do: [:nm | + ((nm findTokens: $.) atLast: 2) asInteger in: [:versionNumber | + versionNumber < min ifTrue: [min := versionNumber. versionName := nm]]]. + + ^ repo versionNamed: versionName + ! Item was added: + ----- Method: ReleaseBuilder class>>lastConfigurationIn:map: (in category 'scripts - support') ----- + lastConfigurationIn: repo map: map + + | max versionName | + max := 0. + versionName := ''. + + (repo versionNamesForPackageNamed: map) do: [:nm | + ((nm findTokens: $.) atLast: 2) asInteger in: [:versionNumber | + versionNumber > max ifTrue: [max := versionNumber. versionName := nm]]]. + + ^ repo versionNamed: versionName + ! From commits at source.squeak.org Fri Aug 12 14:28:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 14:28:53 2016 Subject: [squeak-dev] The Trunk: System-mt.882.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.882.mcz ==================== Summary ==================== Name: System-mt.882 Author: mt Time: 12 August 2016, 4:28:29.584343 pm UUID: 385d3544-b41c-a040-a5ff-fc2aeabe6a1d Ancestors: System-mt.881 Fixes small regression regarding language translation (Thanks Tim F.!). =============== Diff against System-mt.881 =============== Item was added: + ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- + availableLanguageLocaleIDs + "Return the locale ids for the currently available languages. + Meaning those which either internally or externally have + translations available." + "NaturalLanguageTranslator availableLanguageLocaleIDs" + ^ self translators values collect:[:each | each localeID]! From commits at source.squeak.org Fri Aug 12 14:41:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 14:41:42 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1267.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1267.mcz ==================== Summary ==================== Name: Morphic-mt.1267 Author: mt Time: 12 August 2016, 4:41:00.889371 pm UUID: c5bc6233-c994-3e4f-bfa8-4fc3edcfa30f Ancestors: Morphic-mt.1266 Since the release artifacts will have the existing MO files with them, make language switching more prominent in the Extras menu of the docking bar. =============== Diff against Morphic-mt.1266 =============== Item was changed: ----- Method: TheWorldMainDockingBar>>extrasMenuOn: (in category 'submenu - extras') ----- extrasMenuOn: aDockingBar aDockingBar addItem: [ :it| it contents: 'Extras' translated; addSubMenu: [:menu| menu addItem:[:item| item contents: 'Recover Changes' translated; help: 'Recover changes after a crash' translated; icon: MenuIcons smallDocumentClockIcon; target: ChangeList; selector: #browseRecentLog]. menu addLine. menu addItem:[:item| item contents: 'Themes & Colors' translated; subMenuUpdater: self selector: #themesAndWindowColorsOn: ]. menu addItem:[:item| item + contents: 'Language' translated; + subMenuUpdater: self + selector: #languageTranslatorsOn: ]. + menu addItem:[:item| + item contents: 'Set Author Initials' translated; help: 'Sets the author initials' translated; icon: MenuIcons smallUserQuestionIcon; target: Utilities; selector: #setAuthorInitials]. menu addItem:[:item| item contents: 'Restore Display (r)' translated; help: 'Redraws the entire display' translated; target: Project current; selector: #restoreDisplay]. menu addItem:[:item| item contents: 'Rebuild Menus' translated; help: 'Rebuilds the menu bar' translated; target: TheWorldMainDockingBar; selector: #updateInstances]. menu addLine. menu addItem:[:item| item contents: 'Start Profiler' translated; help: 'Starts the profiler' translated; icon: MenuIcons smallTimerIcon; target: self; selector: #startMessageTally]. menu addItem:[:item| item contents: 'Collect Garbage' translated; help: 'Run the garbage collector and report space usage' translated; target: Utilities; selector: #garbageCollectAndReport]. menu addItem:[:item| item contents: 'Purge Undo Records' translated; help: 'Save space by removing all the undo information remembered in all projects' translated; target: CommandHistory; selector: #resetAllHistory]. menu addItem:[:item| item contents: 'VM statistics' translated; help: 'Virtual Machine information' translated; target: self; selector: #vmStatistics]. menu addLine. menu addItem:[:item| item contents: 'Graphical Imports' translated; help: 'View the global repository called ImageImports; you can easily import external graphics into ImageImports via the FileList' translated; target: (Imports default); selector: #viewImages]. menu addItem:[:item| item contents: 'Standard Graphics Library' translated; help: 'Lets you view and change the system''s standard library of graphics' translated; target: ScriptingSystem; selector: #inspectFormDictionary]. menu addItem:[:item| item contents: 'Annotation Setup' translated; help: 'Click here to get a little window that will allow you to specify which types of annotations, in which order, you wish to see in the annotation panes of browsers and other tools' translated; target: Preferences; selector: #editAnnotations]. menu addItem:[:item| item contents: 'Browse My Changes' translated; help: 'Browse all of my changes since the last time #condenseSources was run.' translated; target: SystemNavigation new; selector: #browseMyChanges]. ] ]! Item was added: + ----- Method: TheWorldMainDockingBar>>languageTranslatorsOn: (in category 'submenu - extras') ----- + languageTranslatorsOn: menu + + | availableLanguages | + availableLanguages := NaturalLanguageTranslator availableLanguageLocaleIDs + sorted:[:x :y | x displayName < y displayName]. + + availableLanguages do: [:localeID | + menu addUpdating: #stringForLanguageNameIs: target: Locale selector: #switchAndInstallFontToID: argumentList: {localeID}]. + ! From commits at source.squeak.org Fri Aug 12 14:47:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 14:47:50 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.71.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.71.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.71 Author: mt Time: 12 August 2016, 4:47:41.934371 pm UUID: e1d74265-65cb-8647-b860-d4f1ef6390d5 Ancestors: PreferenceBrowser-mt.70 Put preference wizard/assistant in Apps menu so that users can run it later (again). =============== Diff against PreferenceBrowser-mt.70 =============== Item was added: + ----- Method: PreferenceWizardMorph class>>initialize (in category 'class initialization') ----- + initialize + + TheWorldMenu registerOpenCommand: {'Preference Wizard'. {self. #open}}. ! Item was added: + ----- Method: PreferenceWizardMorph class>>open (in category 'instance creation') ----- + open + + ^ PreferenceWizardMorph new openInWorld! From commits at source.squeak.org Fri Aug 12 14:54:15 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 14:54:17 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1268.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1268.mcz ==================== Summary ==================== Name: Morphic-mt.1268 Author: mt Time: 12 August 2016, 4:53:21.972371 pm UUID: ecfe52b7-1986-6a4c-b31a-e6ea7864049c Ancestors: Morphic-mt.1267 Because the desktop background is so easily to change, i.e. overridable, provide a simple way to reset the background for the current UI theme. Same menu: Extras > Themes & Colors. =============== Diff against Morphic-mt.1267 =============== Item was added: + ----- Method: TheWorldMainDockingBar>>restoreThemeBackground (in category 'submenu - extras') ----- + restoreThemeBackground + + Project current world removeProperty: #hasCustomBackground. + UserInterfaceTheme current applyTo: {Project current}.! Item was changed: ----- Method: TheWorldMainDockingBar>>themesAndWindowColorsOn: (in category 'submenu - extras') ----- themesAndWindowColorsOn: menu | themes | themes := UserInterfaceTheme allThemes asArray sorted: [:t1 :t2 | t1 name <= t2 name]. menu addItem:[:item| item contents: (Model useColorfulWindows ifTrue: [''] ifFalse: ['']), 'Colorful Windows' translated; target: self; selector: #toggleColorfulWindows]. menu addItem:[:item| item contents: (SystemWindow gradientWindow not ifTrue: [''] ifFalse: ['']), 'Flat Widget Look' translated; target: self; selector: #toggleGradients]. menu addLine. menu addItem:[:item | item contents: (((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow]) ifTrue: [''] ifFalse: ['']), 'Soft Shadows' translated; target: self; selector: #toggleSoftShadows]. menu addItem:[:item | item contents: (((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow not]) ifTrue: [''] ifFalse: ['']), 'Hard Shadows' translated; target: self; selector: #toggleHardShadows]. menu addLine. menu addItem:[:item | item contents: (SystemWindow roundedWindowCorners ifTrue: [''] ifFalse: ['']), 'Rounded Window/Dialog/Menu Look' translated; target: self; selector: #toggleRoundedWindowLook]. menu addItem:[:item | item contents: (PluggableButtonMorph roundedButtonCorners ifTrue: [''] ifFalse: ['']), 'Rounded Button/Scrollbar Look' translated; target: self; selector: #toggleRoundedButtonLook]. menu addLine. themes ifEmpty: [ menu addItem: [ :item | item contents: '(No UI themes found.)' translated; isEnabled: false ] ]. themes do: [ :each | menu addItem: [ :item | item contents: (UserInterfaceTheme current == each ifTrue: [''] ifFalse: ['']), each name; target: each; selector: #apply ] ]. menu addLine; + add: 'Restore UI Theme Background' translated target: self selector: #restoreThemeBackground; + add: 'Edit Current UI Theme...' translated target: self selector: #editCurrentTheme.! - add: 'Edit Current UI Theme...' target: self selector: #editCurrentTheme.! From Marcel.Taeumel at hpi.de Fri Aug 12 15:08:37 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 12 15:08:48 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> Message-ID: <1471014517691-4910762.post@n4.nabble.com> Tobias Pape wrote > On 11.08.2016, at 20:14, tim Rowledge < > tim@ > > wrote: > >>> On 10-08-2016, at 8:21 AM, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >>> A first All-In-One can be tried out from here: >>> https://www.hpi.uni-potsdam.de/hirschfeld/artefacts/squeak/Squeak5.1beta-16336-r3397-32bit-All-in-One.zip >>> >> >> >> I like the idea of the welcome dialogue stuff. But I see some problems >> that we hopefully still have time to handle. >> >> -The initial ?welcome? text is in the middle of the screen and then jumps >> to the top. Seems a bit jarring. >> - second ?page? - ?You can try? ? might be better more like ?You can see >> the effects of these settings in the live and editable windows to the >> right? >> - there?s no hint what many of the settings will do or how they might >> affect things. Help balloons might be enough to solve this, explaining >> for example how to see the effect of choosing ?fast drag and resize?. >> - at the end of the welcome we are dropped into a dark empty world. I >> half expect Orcs to come charging at me. Maybe an open browser and >> workspace ought to be left in place? For experts skipping the whole thing >> I suspect the first thing we?d do is open a browser/workspace anyway! >> - it leaves out the thing I?d suggest is most important of all - urging >> the user to first save the image in a new place to discourage the ?abuse? >> of changing the default image. I claim we should conventionally start a >> new system from the all-in-one, save the image in a local place and >> thereafter run that image until and unless a fresh image needs to be >> started. Think of this like many applications that allow opening a new >> file or a template, with the default image being a very well set up >> template. >> - another useful start-up option here would be entering developer >> initials >> - another would be to point out the help system. Of course, we need to >> improve the content therein as well. And the swiki as always is in need >> of love. >> >> >>> Note that we are looking for start-up bugs in the Linux scripts. >> >> At least for the ARM linux tree the ?squeak? shell script is not so good. >> - it ought to be finding the latest vm; this is a little complex because >> of the naming change from blah-XXXX to blah-2106MMDDHHMM. And of course, >> affected by which VM is to be delivered anyway. >> - the newer versions of the script add an option for a gdb flag. >> - it may be appropriate to have the x86 & ARM versions differ in their >> approach to finding the clib >> - at least for the ARM version there is a serious issue with remote >> displays (that is, ARM linux has the problem, which squeak triggers) and >> we need to wrap the whole thing in ?sudo -E?. We have a program that can >> be used to test this at runtime (I can send it to anyone interested) but >> all my attempts to wrap the final line of the script in the required sudo >> have met with no success. It is likely some problem with how forking and >> execing and sudo didn?t get on well as children. A better solution would >> be to fix linux so it doesn't cause the problem in the first case but it >> seems to have been around for many years. >> >> >>> Note that we have not yet fixed the Windows .ini bug. >>> Note that Windows 10 is quite anxious about starting an unsigned >>> executable. >> And you should see how annoyed OS X gets about it. >> >> The image is frikkin? huge. How on earth do we have 22Mb of >> ByteArray/BitMap/ByteString around? And it looks like we are keeping a >> very large amount of MC stuff; 13018 instances of >> MCVersionInfo/MCVersionName/DateAndTime/Date/Time/UUID. Is that smart? >> Simply flushing the cached ancestry from the MC browser gets rid of 60% >> of them and appears to save 3Mb. Except the damn saved image afterwards >> is exactly the same size! Sigh. > > We can convert all base64 strings to ascii85 and save some 10-20% ;D > >> >> >> tim Hi, there. We started to put the release artifacts on files.squeak.org. See: http://files.squeak.org/5.0/ http://files.squeak.org/5.1beta/ Here is a new version for you to try out: http://files.squeak.org/5.1beta/Squeak5.1beta-16393-32bit-r3397-All-in-One.zip http://files.squeak.org/5.1beta/Squeak5.1beta-16393-64bit-r201608051639-All-in-One.zip Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910762.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Fri Aug 12 15:18:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 15:18:46 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.152.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.152.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.152 Author: mt Time: 12 August 2016, 5:18:37.645194 pm UUID: 4af37c89-1b93-2040-b211-633213f0b49a Ancestors: ReleaseBuilder-mt.151 Fixes a small bug, which made the preference wizard go behind the opened windows on the first start. =============== Diff against ReleaseBuilder-mt.151 =============== Item was changed: ----- Method: ReleaseBuilder class>>prepareEnvironment (in category 'preparing') ----- prepareEnvironment "Prepare everything that should be done for a new image build. Clear caches, passwords, etc." "ReleaseBuilder prepareNewBuild" self clearCaches; configureTools; setPreferences; configureDesktop. + DeferredTask := [Project current addDeferredUIMessage: [PreferenceWizardMorph new openInWorld]].! - DeferredTask := [PreferenceWizardMorph new openInWorld].! From Marcel.Taeumel at hpi.de Fri Aug 12 16:59:51 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 12 17:00:03 2016 Subject: [squeak-dev] We need your my.prefs! Message-ID: <1471021191806-4910774.post@n4.nabble.com> Hi, there. Please, open your preference browser in your working image (whatever version that might be), click on "save to disk" and upload the resulting my.prefs file (will be in your working directory) and share it here. I will then load those and check compatibility in the next 5.1 release. We need your combination of preferences! :) Please double-check for senstive data. Best, Marcel -- View this message in context: http://forum.world.st/We-need-your-my-prefs-tp4910774.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Fri Aug 12 17:22:06 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 12 17:22:10 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471014517691-4910762.post@n4.nabble.com> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> Message-ID: <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> > On 12-08-2016, at 8:08 AM, marcel.taeumel wrote: > > Here is a new version for you to try out: > http://files.squeak.org/5.1beta/Squeak5.1beta-16393-32bit-r3397-All-in-One.zip Hmm, the welcome stuff seems to be a bit broken in this one; on both Mac and Pi I see a ?Welcome to Squeak? window and a black band underneath it. Clicking pretty much anywhere makes it go away. I did once manage to get a halo for it and drag it enough to see that it is your welcome/configure intro. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Inoculatte (v): To take coffee intravenously when you are running late From tim at rowledge.org Fri Aug 12 17:32:41 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 12 17:32:46 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> Message-ID: > On 12-08-2016, at 10:22 AM, tim Rowledge wrote: > > >> On 12-08-2016, at 8:08 AM, marcel.taeumel wrote: >> >> Here is a new version for you to try out: >> http://files.squeak.org/5.1beta/Squeak5.1beta-16393-32bit-r3397-All-in-One.zip > > Hmm, the welcome stuff seems to be a bit broken in this one; on both Mac and Pi I see a ?Welcome to Squeak? window and a black band underneath it. Clicking pretty much anywhere makes it go away. I did once manage to get a halo for it and drag it enough to see that it is your welcome/configure intro. And if I manually try `PreferenceWizardMorph new openInWorld` I see the entire thing, and on choosing ?configure it looks as if the default window size is too small to fit the config options in. I needed to make it quite a bit bigger to lay out correctly. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: FLR: Flash Lights Randomly From commits at source.squeak.org Fri Aug 12 17:48:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 17:48:07 2016 Subject: [squeak-dev] The Inbox: Morphic-nice.1269.mcz Message-ID: Nicolas Cellier uploaded a new version of Morphic to project The Inbox: http://source.squeak.org/inbox/Morphic-nice.1269.mcz ==================== Summary ==================== Name: Morphic-nice.1269 Author: nice Time: 12 August 2016, 7:43:38.846146 pm UUID: 0fe08891-e1d1-49c3-9aa6-a06a768461a5 Ancestors: Morphic-mt.1268 BUGFIX: tallySelection (tally it) might need a context =============== Diff against Morphic-mt.1268 =============== Item was changed: ----- Method: SmalltalkEditor>>tallySelection (in category 'do-its') ----- tallySelection "Treat the current selection as an expression; evaluate it and return the time took for this evaluation" | result rcvr ctxt valueAsString v | self lineSelectAndEmptyCheck: [^ self]. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := [ | cm | cm := rcvr class evaluatorClass new compiledMethodFor: self selectionAsStream in: ctxt to: rcvr notifying: self ifFail: [morph flash. ^ self]. Time millisecondsToRun: + [v := cm valueWithReceiver: rcvr arguments: (ctxt ifNil: [#()] ifNotNil: [{ctxt}]) ]. - [v := cm valueWithReceiver: rcvr arguments: #() ]. ] on: OutOfScopeNotification do: [ :ex | ex resume: true]. "We do not want to have large result displayed" valueAsString := v printString. (valueAsString size > 30) ifTrue: [valueAsString := (valueAsString copyFrom: 1 to: 30), '...']. PopUpMenu inform: 'Time to compile and execute: ', result printString, 'ms res: ', valueAsString. ! From commits at source.squeak.org Fri Aug 12 17:48:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 17:48:47 2016 Subject: [squeak-dev] The Inbox: ST80-nice.216.mcz Message-ID: Nicolas Cellier uploaded a new version of ST80 to project The Inbox: http://source.squeak.org/inbox/ST80-nice.216.mcz ==================== Summary ==================== Name: ST80-nice.216 Author: nice Time: 12 August 2016, 7:46:54.418146 pm UUID: 1355ad92-746c-4ba6-8255-90bbdc07e4b9 Ancestors: ST80-mt.215 BUGFIX: tallySelection (tally it) might need a context =============== Diff against ST80-mt.215 =============== Item was changed: ----- Method: ParagraphEditor>>tallySelection (in category 'do-its') ----- tallySelection "Treat the current selection as an expression; evaluate it and return the time took for this evaluation" | result rcvr ctxt valueAsString v | self lineSelectAndEmptyCheck: [^self]. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := [ | cm | cm := rcvr class evaluatorClass new compiledMethodFor: self selectionAsStream in: ctxt to: rcvr notifying: self ifFail: [self flash. ^self]. Time millisecondsToRun: + [v := cm valueWithReceiver: rcvr arguments: (ctxt ifNil: [#()] ifNotNil: [{ctxt}]) ]. - [v := cm valueWithReceiver: rcvr arguments: #() ]. ] on: OutOfScopeNotification do: [ :ex | ex resume: true]. "We do not want to have large result displayed" valueAsString := v printString. (valueAsString size > 30) ifTrue: [valueAsString := (valueAsString copyFrom: 1 to: 30), '...']. PopUpMenu inform: 'Time to compile and execute: ', result printString, 'ms res: ', valueAsString. ! From tim at rowledge.org Fri Aug 12 18:42:31 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 12 18:42:39 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> Message-ID: <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> > On 12-08-2016, at 10:32 AM, tim Rowledge wrote: > > >> On 12-08-2016, at 10:22 AM, tim Rowledge wrote: >> >> >>> On 12-08-2016, at 8:08 AM, marcel.taeumel wrote: >>> >>> Here is a new version for you to try out: >>> http://files.squeak.org/5.1beta/Squeak5.1beta-16393-32bit-r3397-All-in-One.zip >> >> Hmm, the welcome stuff seems to be a bit broken in this one; on both Mac and Pi I see a ?Welcome to Squeak? window and a black band underneath it. Clicking pretty much anywhere makes it go away. I did once manage to get a halo for it and drag it enough to see that it is your welcome/configure intro. > > And if I manually try `PreferenceWizardMorph new openInWorld` I see the entire thing, and on choosing ?configure it looks as if the default window size is too small to fit the config options in. I needed to make it quite a bit bigger to lay out correctly. And why the multiple 1 second delays? It makes it appear as if Squeak is really slow, which probably wasn?t the intention. The alpha blending of the welcome stuff background is a bit of a performance issue on a Pi. An ugly but effective solution is a simple `Smalltalk platformSubtype beginsWith: ?arm? ` The rounding of the buttons is still ugly (we mentioned this some time ago) and seems to improve a bit if we set the rounding radius to 10. Here?s some suggested changes to make it fit better in the small window. -------------- next part -------------- A non-text attachment was scrubbed... Name: PrefWizard-tpr-2.1.cs Type: application/octet-stream Size: 5501 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160812/bfc0cb39/PrefWizard-tpr-2.1-0001.obj -------------- next part -------------- tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: COMB: Straighten Wires From herbertkoenig at gmx.net Fri Aug 12 20:25:57 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Fri Aug 12 20:25:54 2016 Subject: [squeak-dev] We need your my.prefs! In-Reply-To: <1471021191806-4910774.post@n4.nabble.com> References: <1471021191806-4910774.post@n4.nabble.com> Message-ID: <6c0fe5dd-ddb6-8800-5a23-0c06c4ead0f0@gmx.net> Hi, a recent my.prefs is over 600 k so you might wand to provide some upload space. All I found on my computer (back to 3.8 :-)) are here: http://www.kostenlose-bauabrechnung.de/downloads/ Cheers, Herbert Am 12.08.2016 um 18:59 schrieb marcel.taeumel: > Hi, there. > > Please, open your preference browser in your working image (whatever version > that might be), click on "save to disk" and upload the resulting my.prefs > file (will be in your working directory) and share it here. I will then load > those and check compatibility in the next 5.1 release. > > We need your combination of preferences! :) Please double-check for senstive > data. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/We-need-your-my-prefs-tp4910774.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Fri Aug 12 20:49:39 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Aug 12 20:50:23 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> Message-ID: >> And if I manually try `PreferenceWizardMorph new openInWorld` I see the entire thing, and on choosing ?configure it looks as if the default window size is too small to fit the config options in. I needed to make it quite a bit bigger to lay out correctly. > > And why the multiple 1 second delays? It makes it appear as if Squeak is really slow, which probably wasn?t the intention. I was just thinking how innovative the little pauses were. A UI tool to delineate and direct the users eyes to the sequence of elements to look at. The delays feel intentional, as if it was designed for a refined human consumption experience. It feels relaxed, not a strained feel as if Squeak were struggling to keep up because it were slow. From herbertkoenig at gmx.net Fri Aug 12 20:51:35 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Fri Aug 12 20:51:33 2016 Subject: [squeak-dev] Squeak under Raspbian from a USB Dongle Message-ID: Hi, I assume it's not possible to run Squeak all in one from a USB dongle under linux because one FAT does not have an executable flag. Or is there a way? Would be too cool to move a USB dongle from my Windows Laptop to the RasPi. Cheers, Herbert From Yoshiki.Ohshima at acm.org Fri Aug 12 20:59:04 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Fri Aug 12 20:59:09 2016 Subject: [squeak-dev] Smallapack In-Reply-To: References: Message-ID: Ok, now I'm getting some success! I start over with the VM: Croquet Closure Cog VM [CoInterpreterPrimitives VMMaker.oscog-eem.1044] Squeak Cog Spur 5.0.3248 and followed Nicolas' instruction in this thread. The image is 32-bit 5.0 image. In this setting all tests passed. Yay. To run the above mentioned example: ------------------- a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)). b := LapackDGEMatrix rows: #(#(1) (2) (3)). c := LapackLeastSquareProblem matrix: a rhsMatrix: b. c solution. ------------------- I needed to fix the processSVD to make it work. The changes are to change: rank := WordArray new: 1. into: rank := ExternalLongArray new: 1. (otherwise #arrayPointer is not understood by 'rank') and also the return value from gelssWithm: has to be stored in 'info' (otherwise it will be always nil). On Thu, Aug 11, 2016 at 6:05 PM, Yoshiki Ohshima wrote: > I have not reached the conclusion but would like to give some status > report. > > My test case is simple: > > ------------------- > a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)). > b := LapackDGEMatrix rows: #(#(1) (2) (3)). > c := LapackLeastSquareProblem matrix: a rhsMatrix: b. > > c solution. > ------------------- > > If I evaluate this, the external call for 'dgesvd_' in > CLapackDLibrary>>xgesvdWithjobu:jobvt:m:n:a:lda:s:u:ldu:vt:ldvt:work: > lwork:info: > fails. > > But if I fix it by rewriting the cdecl line to: > > double * double * long * double * long * double * long * long * ) > module: 'libLAPACK'> > > from > > double * double * long * double * long * double * long * long * )> > > it passes. > > However, the value that gets stored in the 's' instance variable of > LapackSVDecomposition is a LapackDGEMatrix, and when the resulting > value is used in the #defaultTolerance, I get DNU for '*". > > > > On Tue, Aug 9, 2016 at 3:26 PM, Yoshiki Ohshima > wrote: > > Correction: (sorry) > > > > In a 64 bit image, TestCBlas runs fine but the ones listed above fails > > in a 32-bit image. > > > > On Tue, Aug 9, 2016 at 3:12 PM, Yoshiki Ohshima > wrote: > >> Thanks! > >> > >> I am trying this from a vanilla 5.0 image and I see that > >> ConfigurationOfSmallapack-nice.18 is loaded. Now, however, the > >> following tests from Smallapack-SUnitTests category fail: > >> > >> #('TestCBlas>>#testCsscal' 'TestCBlas>>#testSaxpy' > >> 'TestCBlas>>#testSgemv' 'TestCBlas>>#testSgemvTrans' > >> 'TestCBlas>>#testSger' 'TestCBlas>>#testSscal' 'TestCBlas>>#testStrsm' > >> 'TestLapackMatrix>>#testMatrixProduct' 'TestLapackMatrix>>#testSum' > >> 'TestRandMatrix>>#testOperationTiming') > >> > >> As I wrote, TestCBlas used to be all green. I'll check what has > >> changed since -nice.16... > >> > >> On Sat, Aug 6, 2016 at 4:56 PM, Nicolas Cellier > >> wrote: > >>> This should be fixed in ConfigurationOfSmallapack-nice.18 > >>> BTW, I think you can provide the absolute path to the .dylib instead of > >>> copying in local repository... > >>> > >>> > >>> 2016-08-06 23:29 GMT+02:00 Nicolas Cellier > >>> : > >>>> > >>>> Hi Yoshiki, > >>>> thanks for reporting, I'll try better... > >>>> > >>>> > >>>> 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima : > >>>>> > >>>>> I see you have some changes but it appears that evaluating the > >>>>> Installer do it goes into an infinite loop of #moduleName and > >>>>> #masOsxModuleName. > >>>>> > >>>>> (Thanks again!) > >>>>> > >>>>> On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima > >>>>> wrote: > >>>>> > But some of TestLapackMatrix tests fail. A few external functions > >>>>> > cannot be found, it looks like. > >>>>> > > >>>>> > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima > >>>>> > wrote: > >>>>> >> Great! > >>>>> >> > >>>>> >> Before (I got into a meeting and then entered the "Friday mode", > I was > >>>>> >> going down the path of trying to call the Framework functions but > >>>>> >> copying files anyway was a simpler solution for now. > >>>>> >> > >>>>> >> Yes, I got all tests green. Thank you! > >>>>> >> > >>>>> >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier > >>>>> >> wrote: > >>>>> >>> OK, what I did on my Mac: > >>>>> >>> > >>>>> >>> 1) look under the Squeak app and edit the Contents/Info.plist > >>>>> >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No" > >>>>> >>> otherwise library loading is restricted to the Squeak app > bundle > >>>>> >>> 3) copy the veclib framework library files (dylib) in same > directory > >>>>> >>> as > >>>>> >>> squeak image > >>>>> >>> 4) launch Squeak > >>>>> >>> 5) install Smallapack > >>>>> >>> follow instruction from > >>>>> >>> > >>>>> >>> https://github.com/nicolas-cellier-aka-nice/smallapack/ > wiki/SmallapackSqueak > >>>>> >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' -> > >>>>> >>> 'libBlas.dylib' > >>>>> >>> nowadays, cblas and blas are in the same dylib... > >>>>> >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' -> > >>>>> >>> 'libLapack.dylib' > >>>>> >>> idem > >>>>> >>> 8) re-initialize the cache (I know, I know, there are too > many...) > >>>>> >>> CBlasLibrary install. CLapackLibrary install. LapackMatrix > >>>>> >>> resetBlasInterfaces; resetLapackInterfaces. > >>>>> >>> 9) run the TestCBlas suite > >>>>> >>> > >>>>> >>> It should be green > >>>>> >>> I will commit the changes later, and will probably implement > >>>>> >>> moduleNames as > >>>>> >>> a Preference (pragma oriented). > >>>>> >>> No need to override code anymore :) > >>>>> >>> > >>>>> >>> I think step 3) is necessary because of ioLoadModuleRaw() in > >>>>> >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m > >>>>> >>> > >>>>> >>> https://github.com/OpenSmalltalk/opensmalltalk- > vm/blob/Cog/platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m > >>>>> >>> It would only look those frameworks: > >>>>> >>> > >>>>> >>> static char *frameworks[]= > >>>>> >>> { > >>>>> >>> "", > >>>>> >>> "/CoreServices.framework/Frameworks", > >>>>> >>> "/ApplicationServices. > framework/Frameworks", > >>>>> >>> "/Carbon.framework/Frameworks", > >>>>> >>> 0 > >>>>> >>> }; > >>>>> >>> > >>>>> >>> But I did step 3) before I tried 1) + 2), adn did not retry, so > maybe > >>>>> >>> I'm > >>>>> >>> wrong... > >>>>> >>> Scanning all the frameworks is not a solution. And what if we > want a > >>>>> >>> specific version? > >>>>> >>> It would be far better to be able to specify the path to the > library > >>>>> >>> from > >>>>> >>> within the image like VW... > >>>>> >>> > >>>>> >>> > >>>>> >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier > >>>>> >>> : > >>>>> >>>> > >>>>> >>>> > >>>>> >>>> > >>>>> >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier > >>>>> >>>> : > >>>>> >>>>> > >>>>> >>>>> > >>>>> >>>>> > >>>>> >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima > >>>>> >>>>> : > >>>>> >>>>>> > >>>>> >>>>>> First question: > >>>>> >>>>>> > >>>>> >>>>>> The Mac OS comes with Accelerate.Framework and that contains > BLAS. > >>>>> >>>>>> But probably I still should compile those libraries, right? > >>>>> >>>>>> > >>>>> >>>>> > >>>>> >>>>> No, it's better to link to accelerated library. > >>>>> >>>>> I don't have a Mac handy here to verify how to link to it > though. > >>>>> >>>>> I'll be able to check latter in the evening > >>>>> >>>>> > >>>>> >>>> > >>>>> >>>> > >>>>> >>>> I've downloaded the code, and I see it now: the library names > are > >>>>> >>>> hardcoded (see implementors of moduleName). > >>>>> >>>> For Mac it is libblas.dylib and libcblas.dylib > >>>>> >>>> Also note that there is a preference for switching to cblas > (blas > >>>>> >>>> functions with C interface). > >>>>> >>>> This should be faster because we pass some parameters by value > >>>>> >>>> rather than > >>>>> >>>> allocating them and pass reference... > >>>>> >>>> > >>>>> >>>> Module names could also be replaced by Preferences eventually, > but > >>>>> >>>> by now, > >>>>> >>>> you'll have to override... > >>>>> >>>> > >>>>> >>>>>> > >>>>> >>>>>> > >>>>> >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima > >>>>> >>>>>> wrote: > >>>>> >>>>>> > Thanks! > >>>>> >>>>>> > > >>>>> >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier > >>>>> >>>>>> > wrote: > >>>>> >>>>>> >> Hi Yoshiki, > >>>>> >>>>>> >> > >>>>> >>>>>> >> Thanks for inquiring about Smallapack. > >>>>> >>>>>> >> > >>>>> >>>>>> >> This problem has been solved in 2011 as the post tells. > >>>>> >>>>>> >> Moreover, it was about alignment of squeak objects that > was on > >>>>> >>>>>> >> multiple of 4 > >>>>> >>>>>> >> on SqueakV3 memory. > >>>>> >>>>>> >> Spur is 8 byte aligned, so the problem would have also > vanished > >>>>> >>>>>> >> without any > >>>>> >>>>>> >> patch for those being patient :) > >>>>> >>>>>> >> > >>>>> >>>>>> >> For the 15 arguments limit, Smallapack comes with it's own > >>>>> >>>>>> >> compiler, > >>>>> >>>>>> >> so it's > >>>>> >>>>>> >> a non issue. > >>>>> >>>>>> >> Maybe I should make the documentation more clear on > >>>>> >>>>>> >> > >>>>> >>>>>> >> > >>>>> >>>>>> >> https://github.com/nicolas-cellier-aka-nice/smallapack/ > wiki/SmallapackSqueak > >>>>> >>>>>> >> ? > >>>>> >>>>>> >> > >>>>> >>>>>> >> Unfortunately, there's no Sparse Matrix representation in > >>>>> >>>>>> >> Lapack. > >>>>> >>>>>> >> If you know of a good package for that, it could be > integrated. > >>>>> >>>>>> >> > >>>>> >>>>>> >> If you have other questions, don't hesitate to ask. > >>>>> >>>>>> >> > >>>>> >>>>>> >> cheers > >>>>> >>>>>> >> > >>>>> >>>>>> >> Nicolas > >>>>> >>>>>> >> > >>>>> >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima > >>>>> >>>>>> >> : > >>>>> >>>>>> >>> > >>>>> >>>>>> >>> I am trying to do a bit of linear algebra stuff that > involves > >>>>> >>>>>> >>> to > >>>>> >>>>>> >>> solve > >>>>> >>>>>> >>> a sparse 2D matrix (for a variation of doing least square > >>>>> >>>>>> >>> fit). > >>>>> >>>>>> >>> > >>>>> >>>>>> >>> There was a message from Nicolas: > >>>>> >>>>>> >>> > >>>>> >>>>>> >>> > >>>>> >>>>>> >>> > >>>>> >>>>>> >>> http://lists.squeakfoundation. > org/pipermail/squeak-dev/2011-August/161113.html > >>>>> >>>>>> >>> > >>>>> >>>>>> >>> Is this where it stands today, too? It looks like that > arg > >>>>> >>>>>> >>> count > >>>>> >>>>>> >>> problem is still there in 5.0, but is it in a way > non-issue as > >>>>> >>>>>> >>> it is > >>>>> >>>>>> >>> still FFI based? > >>>>> >>>>>> >>> > >>>>> >>>>>> >>> Thanks! > >>>>> >>>>>> >>> > >>>>> >>>>>> >>> -- > >>>>> >>>>>> >>> -- Yoshiki > >>>>> >>>>>> >>> > >>>>> >>>>>> >> > >>>>> >>>>>> >> > >>>>> >>>>>> >> > >>>>> >>>>>> >> > >>>>> >>>>>> > > >>>>> >>>>>> > > >>>>> >>>>>> > > >>>>> >>>>>> > -- > >>>>> >>>>>> > -- Yoshiki > >>>>> >>>>>> > >>>>> >>>>>> > >>>>> >>>>>> > >>>>> >>>>>> -- > >>>>> >>>>>> -- Yoshiki > >>>>> >>>>>> > >>>>> >>>>> > >>>>> >>>> > >>>>> >>> > >>>>> >>> > >>>>> >>> > >>>>> >>> > >>>>> >> > >>>>> >> > >>>>> >> > >>>>> >> -- > >>>>> >> -- Yoshiki > >>>>> > > >>>>> > > >>>>> > > >>>>> > -- > >>>>> > -- Yoshiki > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> -- Yoshiki > >>>>> > >>>> > >>> > >>> > >>> > >>> > >> > >> > >> > >> -- > >> -- Yoshiki > > > > > > > > -- > > -- Yoshiki > > > > -- > -- Yoshiki > -- -- Yoshiki -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160812/42121f1b/attachment.htm From timfelgentreff at gmail.com Fri Aug 12 21:53:58 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Fri Aug 12 21:54:03 2016 Subject: [squeak-dev] Squeak under Raspbian from a USB Dongle In-Reply-To: References: Message-ID: Hi You need to mount with the exec option (or the right umask). Then all files are executable. Best, Tim Am 12.08.2016 22:51 schrieb "Herbert K?nig" : > Hi, > > I assume it's not possible to run Squeak all in one from a USB dongle > under linux because one FAT does not have an executable flag. > > Or is there a way? Would be too cool to move a USB dongle from my Windows > Laptop to the RasPi. > > Cheers, > > > Herbert > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160812/b7c5b94e/attachment.htm From commits at source.squeak.org Fri Aug 12 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 12 21:55:05 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160812215503.5696.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068526.html Name: System-mt.881 Ancestors: System-mt.880 Adds missing method to be compatible with Behavior. To be used for balloon help in File Contents Browser. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068527.html Name: Tools-mt.715 Ancestors: Tools-mt.714 Fixes serious bug with balloon-help for message lists, which occured in the FileContentsBrowser with #balloonHelpInMessageLists preference enabled. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068528.html Name: Morphic-mt.1263 Ancestors: Morphic-mt.1262 Remove obsolete preference for balloon color. It is in the current UI theme now. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068529.html Name: Help-Squeak-Project-mt.42 Ancestors: Help-Squeak-Project-mt.41 Use #sorted: because #sortBy: will be deprecated in the future. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068530.html Name: Tools-mt.716 Ancestors: Tools-mt.715 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068531.html Name: Collections-mt.707 Ancestors: Collections-mt.706 Deprecate #sortBy:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068532.html Name: 51Deprecated-mt.43 Ancestors: 51Deprecated-tfel.42 Deprecate #sortBy:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068533.html Name: Morphic-mt.1264 Ancestors: Morphic-mt.1263 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068534.html Name: PackageInfo-Base-mt.69 Ancestors: PackageInfo-Base-nice.68 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068535.html Name: PreferenceBrowser-mt.68 Ancestors: PreferenceBrowser-mt.67 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068536.html Name: ReleaseBuilder-mt.149 Ancestors: ReleaseBuilder-mt.148 Use #sorted: instead of #sortBy: to better indicate that it is a copy and not an in-place update like #sort:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068537.html Name: PreferenceBrowser-mt.69 Ancestors: PreferenceBrowser-mt.68 Fixes some help/preference texts. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068538.html Name: Morphic-mt.1265 Ancestors: Morphic-mt.1264 Fixes some help/preference texts. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068539.html Name: Tools-mt.717 Ancestors: Tools-mt.716 Fixes some help/preference texts. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068540.html Name: Tools-mt.717 Ancestors: Tools-mt.716 Fixes some help/preference texts. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068541.html Name: PreferenceBrowser-mt.70 Ancestors: PreferenceBrowser-mt.69 Make preference wizard not so alien and more easily dismiss-able. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068542.html Name: HelpSystem-Core-mt.89 Ancestors: HelpSystem-Core-mt.88 Small fall-back for not existing keys in generic help topics. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068543.html Name: ReleaseBuilder-mt.150 Ancestors: ReleaseBuilder-mt.149 When preparing the environment, show welcome information again. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068544.html Name: HelpSystem-Core-mt.90 Ancestors: HelpSystem-Core-mt.89 Normalize text attributes when editing help texts via the help browser. This is necessary to produce formatted text that works well with a variety of UI themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068545.html Name: Help-Squeak-Project-mt.43 Ancestors: Help-Squeak-Project-mt.42 Remove some attributes from welcome text. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068546.html Name: Collections-mt.708 Ancestors: Collections-mt.707 When analyzing the input string to add a text url, give the user a chance to verify and correct the result. (Use to update help texts for the release.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068547.html Name: Morphic-mt.1266 Ancestors: Morphic-mt.1265 Avoid object-explorer side-effect for arbitrary code execution. Makes writing interactive help texts more powerful. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068548.html Name: Help-Squeak-Project-mt.44 Ancestors: Help-Squeak-Project-mt.43 Update Squeak introduction to match contents from squeak.org but be more interactive since we are already in the environment. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068549.html Name: ReleaseBuilder-mt.151 Ancestors: ReleaseBuilder-mt.150 Simple scripts for ReleaseBuilder to generate mark down for all commit messages between releases. Should help to write release notes. Just call "ReleaseBuilder fileOutChangesBetweenReleases" to try out. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068550.html Name: System-mt.882 Ancestors: System-mt.881 Fixes small regression regarding language translation (Thanks Tim F.!). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068551.html Name: Morphic-mt.1267 Ancestors: Morphic-mt.1266 Since the release artifacts will have the existing MO files with them, make language switching more prominent in the Extras menu of the docking bar. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068552.html Name: PreferenceBrowser-mt.71 Ancestors: PreferenceBrowser-mt.70 Put preference wizard/assistant in Apps menu so that users can run it later (again). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068553.html Name: Morphic-mt.1268 Ancestors: Morphic-mt.1267 Because the desktop background is so easily to change, i.e. overridable, provide a simple way to reset the background for the current UI theme. Same menu: Extras > Themes & Colors. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068554.html Name: ReleaseBuilder-mt.152 Ancestors: ReleaseBuilder-mt.151 Fixes a small bug, which made the preference wizard go behind the opened windows on the first start. ============================================= From nicolas.cellier.aka.nice at gmail.com Fri Aug 12 22:06:13 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Fri Aug 12 22:06:16 2016 Subject: [squeak-dev] Could we make list chooser resizable Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: PluggableDialogWindow.png Type: image/png Size: 14394 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160813/0c2c056c/PluggableDialogWindow.png From nicolas.cellier.aka.nice at gmail.com Fri Aug 12 22:07:38 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Fri Aug 12 22:07:44 2016 Subject: [squeak-dev] Smallapack In-Reply-To: References: Message-ID: Thanks Yoshiki, new configuration published. 2016-08-12 22:59 GMT+02:00 Yoshiki Ohshima : > Ok, now I'm getting some success! > > I start over with the VM: Croquet Closure Cog VM [CoInterpreterPrimitives > VMMaker.oscog-eem.1044] Squeak Cog Spur 5.0.3248 > > and followed Nicolas' instruction in this thread. The image is 32-bit 5.0 > image. In this setting all tests passed. Yay. To run the above mentioned > example: > > ------------------- > a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)). > b := LapackDGEMatrix rows: #(#(1) (2) (3)). > c := LapackLeastSquareProblem matrix: a rhsMatrix: b. > > c solution. > ------------------- > > I needed to fix the processSVD to make it work. The changes are to change: > > rank := WordArray new: 1. > > into: > > rank := ExternalLongArray new: 1. > > (otherwise #arrayPointer is not understood by 'rank') and also the return > value from gelssWithm: has to be stored in 'info' (otherwise it will be > always nil). > > > > On Thu, Aug 11, 2016 at 6:05 PM, Yoshiki Ohshima > wrote: > >> I have not reached the conclusion but would like to give some status >> report. >> >> My test case is simple: >> >> ------------------- >> a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)). >> b := LapackDGEMatrix rows: #(#(1) (2) (3)). >> c := LapackLeastSquareProblem matrix: a rhsMatrix: b. >> >> c solution. >> ------------------- >> >> If I evaluate this, the external call for 'dgesvd_' in >> CLapackDLibrary>>xgesvdWithjobu:jobvt:m:n:a:lda:s:u:ldu:vt: >> ldvt:work:lwork:info: >> fails. >> >> But if I fix it by rewriting the cdecl line to: >> >> > double * double * long * double * long * double * long * long * ) >> module: 'libLAPACK'> >> >> from >> >> > double * double * long * double * long * double * long * long * )> >> >> it passes. >> >> However, the value that gets stored in the 's' instance variable of >> LapackSVDecomposition is a LapackDGEMatrix, and when the resulting >> value is used in the #defaultTolerance, I get DNU for '*". >> >> >> >> On Tue, Aug 9, 2016 at 3:26 PM, Yoshiki Ohshima >> wrote: >> > Correction: (sorry) >> > >> > In a 64 bit image, TestCBlas runs fine but the ones listed above fails >> > in a 32-bit image. >> > >> > On Tue, Aug 9, 2016 at 3:12 PM, Yoshiki Ohshima < >> Yoshiki.Ohshima@acm.org> wrote: >> >> Thanks! >> >> >> >> I am trying this from a vanilla 5.0 image and I see that >> >> ConfigurationOfSmallapack-nice.18 is loaded. Now, however, the >> >> following tests from Smallapack-SUnitTests category fail: >> >> >> >> #('TestCBlas>>#testCsscal' 'TestCBlas>>#testSaxpy' >> >> 'TestCBlas>>#testSgemv' 'TestCBlas>>#testSgemvTrans' >> >> 'TestCBlas>>#testSger' 'TestCBlas>>#testSscal' 'TestCBlas>>#testStrsm' >> >> 'TestLapackMatrix>>#testMatrixProduct' 'TestLapackMatrix>>#testSum' >> >> 'TestRandMatrix>>#testOperationTiming') >> >> >> >> As I wrote, TestCBlas used to be all green. I'll check what has >> >> changed since -nice.16... >> >> >> >> On Sat, Aug 6, 2016 at 4:56 PM, Nicolas Cellier >> >> wrote: >> >>> This should be fixed in ConfigurationOfSmallapack-nice.18 >> >>> BTW, I think you can provide the absolute path to the .dylib instead >> of >> >>> copying in local repository... >> >>> >> >>> >> >>> 2016-08-06 23:29 GMT+02:00 Nicolas Cellier >> >>> : >> >>>> >> >>>> Hi Yoshiki, >> >>>> thanks for reporting, I'll try better... >> >>>> >> >>>> >> >>>> 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima : >> >>>>> >> >>>>> I see you have some changes but it appears that evaluating the >> >>>>> Installer do it goes into an infinite loop of #moduleName and >> >>>>> #masOsxModuleName. >> >>>>> >> >>>>> (Thanks again!) >> >>>>> >> >>>>> On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima >> >>>>> wrote: >> >>>>> > But some of TestLapackMatrix tests fail. A few external functions >> >>>>> > cannot be found, it looks like. >> >>>>> > >> >>>>> > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima >> >>>>> > wrote: >> >>>>> >> Great! >> >>>>> >> >> >>>>> >> Before (I got into a meeting and then entered the "Friday mode", >> I was >> >>>>> >> going down the path of trying to call the Framework functions but >> >>>>> >> copying files anyway was a simpler solution for now. >> >>>>> >> >> >>>>> >> Yes, I got all tests green. Thank you! >> >>>>> >> >> >>>>> >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier >> >>>>> >> wrote: >> >>>>> >>> OK, what I did on my Mac: >> >>>>> >>> >> >>>>> >>> 1) look under the Squeak app and edit the Contents/Info.plist >> >>>>> >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No" >> >>>>> >>> otherwise library loading is restricted to the Squeak app >> bundle >> >>>>> >>> 3) copy the veclib framework library files (dylib) in same >> directory >> >>>>> >>> as >> >>>>> >>> squeak image >> >>>>> >>> 4) launch Squeak >> >>>>> >>> 5) install Smallapack >> >>>>> >>> follow instruction from >> >>>>> >>> >> >>>>> >>> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/ >> SmallapackSqueak >> >>>>> >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' -> >> >>>>> >>> 'libBlas.dylib' >> >>>>> >>> nowadays, cblas and blas are in the same dylib... >> >>>>> >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' -> >> >>>>> >>> 'libLapack.dylib' >> >>>>> >>> idem >> >>>>> >>> 8) re-initialize the cache (I know, I know, there are too >> many...) >> >>>>> >>> CBlasLibrary install. CLapackLibrary install. LapackMatrix >> >>>>> >>> resetBlasInterfaces; resetLapackInterfaces. >> >>>>> >>> 9) run the TestCBlas suite >> >>>>> >>> >> >>>>> >>> It should be green >> >>>>> >>> I will commit the changes later, and will probably implement >> >>>>> >>> moduleNames as >> >>>>> >>> a Preference (pragma oriented). >> >>>>> >>> No need to override code anymore :) >> >>>>> >>> >> >>>>> >>> I think step 3) is necessary because of ioLoadModuleRaw() in >> >>>>> >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >> >>>>> >>> >> >>>>> >>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/ >> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >> >>>>> >>> It would only look those frameworks: >> >>>>> >>> >> >>>>> >>> static char *frameworks[]= >> >>>>> >>> { >> >>>>> >>> "", >> >>>>> >>> "/CoreServices.framework/Frameworks", >> >>>>> >>> "/ApplicationServices.framewo >> rk/Frameworks", >> >>>>> >>> "/Carbon.framework/Frameworks", >> >>>>> >>> 0 >> >>>>> >>> }; >> >>>>> >>> >> >>>>> >>> But I did step 3) before I tried 1) + 2), adn did not retry, so >> maybe >> >>>>> >>> I'm >> >>>>> >>> wrong... >> >>>>> >>> Scanning all the frameworks is not a solution. And what if we >> want a >> >>>>> >>> specific version? >> >>>>> >>> It would be far better to be able to specify the path to the >> library >> >>>>> >>> from >> >>>>> >>> within the image like VW... >> >>>>> >>> >> >>>>> >>> >> >>>>> >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier >> >>>>> >>> : >> >>>>> >>>> >> >>>>> >>>> >> >>>>> >>>> >> >>>>> >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier >> >>>>> >>>> : >> >>>>> >>>>> >> >>>>> >>>>> >> >>>>> >>>>> >> >>>>> >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima >> >>>>> >>>>> : >> >>>>> >>>>>> >> >>>>> >>>>>> First question: >> >>>>> >>>>>> >> >>>>> >>>>>> The Mac OS comes with Accelerate.Framework and that contains >> BLAS. >> >>>>> >>>>>> But probably I still should compile those libraries, right? >> >>>>> >>>>>> >> >>>>> >>>>> >> >>>>> >>>>> No, it's better to link to accelerated library. >> >>>>> >>>>> I don't have a Mac handy here to verify how to link to it >> though. >> >>>>> >>>>> I'll be able to check latter in the evening >> >>>>> >>>>> >> >>>>> >>>> >> >>>>> >>>> >> >>>>> >>>> I've downloaded the code, and I see it now: the library names >> are >> >>>>> >>>> hardcoded (see implementors of moduleName). >> >>>>> >>>> For Mac it is libblas.dylib and libcblas.dylib >> >>>>> >>>> Also note that there is a preference for switching to cblas >> (blas >> >>>>> >>>> functions with C interface). >> >>>>> >>>> This should be faster because we pass some parameters by value >> >>>>> >>>> rather than >> >>>>> >>>> allocating them and pass reference... >> >>>>> >>>> >> >>>>> >>>> Module names could also be replaced by Preferences eventually, >> but >> >>>>> >>>> by now, >> >>>>> >>>> you'll have to override... >> >>>>> >>>> >> >>>>> >>>>>> >> >>>>> >>>>>> >> >>>>> >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima >> >>>>> >>>>>> wrote: >> >>>>> >>>>>> > Thanks! >> >>>>> >>>>>> > >> >>>>> >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier >> >>>>> >>>>>> > wrote: >> >>>>> >>>>>> >> Hi Yoshiki, >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> Thanks for inquiring about Smallapack. >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> This problem has been solved in 2011 as the post tells. >> >>>>> >>>>>> >> Moreover, it was about alignment of squeak objects that >> was on >> >>>>> >>>>>> >> multiple of 4 >> >>>>> >>>>>> >> on SqueakV3 memory. >> >>>>> >>>>>> >> Spur is 8 byte aligned, so the problem would have also >> vanished >> >>>>> >>>>>> >> without any >> >>>>> >>>>>> >> patch for those being patient :) >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> For the 15 arguments limit, Smallapack comes with it's own >> >>>>> >>>>>> >> compiler, >> >>>>> >>>>>> >> so it's >> >>>>> >>>>>> >> a non issue. >> >>>>> >>>>>> >> Maybe I should make the documentation more clear on >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> https://github.com/nicolas-cel >> lier-aka-nice/smallapack/wiki/SmallapackSqueak >> >>>>> >>>>>> >> ? >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> Unfortunately, there's no Sparse Matrix representation in >> >>>>> >>>>>> >> Lapack. >> >>>>> >>>>>> >> If you know of a good package for that, it could be >> integrated. >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> If you have other questions, don't hesitate to ask. >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> cheers >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> Nicolas >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima >> >>>>> >>>>>> >> : >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >>> I am trying to do a bit of linear algebra stuff that >> involves >> >>>>> >>>>>> >>> to >> >>>>> >>>>>> >>> solve >> >>>>> >>>>>> >>> a sparse 2D matrix (for a variation of doing least square >> >>>>> >>>>>> >>> fit). >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >>> There was a message from Nicolas: >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >>> http://lists.squeakfoundation. >> org/pipermail/squeak-dev/2011-August/161113.html >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >>> Is this where it stands today, too? It looks like that >> arg >> >>>>> >>>>>> >>> count >> >>>>> >>>>>> >>> problem is still there in 5.0, but is it in a way >> non-issue as >> >>>>> >>>>>> >>> it is >> >>>>> >>>>>> >>> still FFI based? >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >>> Thanks! >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >>> -- >> >>>>> >>>>>> >>> -- Yoshiki >> >>>>> >>>>>> >>> >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> >> >>>>> >>>>>> > >> >>>>> >>>>>> > >> >>>>> >>>>>> > >> >>>>> >>>>>> > -- >> >>>>> >>>>>> > -- Yoshiki >> >>>>> >>>>>> >> >>>>> >>>>>> >> >>>>> >>>>>> >> >>>>> >>>>>> -- >> >>>>> >>>>>> -- Yoshiki >> >>>>> >>>>>> >> >>>>> >>>>> >> >>>>> >>>> >> >>>>> >>> >> >>>>> >>> >> >>>>> >>> >> >>>>> >>> >> >>>>> >> >> >>>>> >> >> >>>>> >> >> >>>>> >> -- >> >>>>> >> -- Yoshiki >> >>>>> > >> >>>>> > >> >>>>> > >> >>>>> > -- >> >>>>> > -- Yoshiki >> >>>>> >> >>>>> >> >>>>> >> >>>>> -- >> >>>>> -- Yoshiki >> >>>>> >> >>>> >> >>> >> >>> >> >>> >> >>> >> >> >> >> >> >> >> >> -- >> >> -- Yoshiki >> > >> > >> > >> > -- >> > -- Yoshiki >> >> >> >> -- >> -- Yoshiki >> > > > > -- > -- Yoshiki > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160813/1571ea8d/attachment-0001.htm From Yoshiki.Ohshima at acm.org Fri Aug 12 22:46:14 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Fri Aug 12 22:46:17 2016 Subject: [squeak-dev] Smallapack In-Reply-To: References: Message-ID: Thanks! I had not been able to focus on getting this to work so it's been almost two weeks now but as finally the basic case finally going, I am now happy. Thanks for the help! On Fri, Aug 12, 2016 at 3:07 PM, Nicolas Cellier wrote: > Thanks Yoshiki, new configuration published. > > 2016-08-12 22:59 GMT+02:00 Yoshiki Ohshima : >> >> Ok, now I'm getting some success! >> >> I start over with the VM: Croquet Closure Cog VM [CoInterpreterPrimitives >> VMMaker.oscog-eem.1044] Squeak Cog Spur 5.0.3248 >> >> and followed Nicolas' instruction in this thread. The image is 32-bit 5.0 >> image. In this setting all tests passed. Yay. To run the above mentioned >> example: >> >> ------------------- >> a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)). >> b := LapackDGEMatrix rows: #(#(1) (2) (3)). >> c := LapackLeastSquareProblem matrix: a rhsMatrix: b. >> >> c solution. >> ------------------- >> >> I needed to fix the processSVD to make it work. The changes are to >> change: >> >> rank := WordArray new: 1. >> >> into: >> >> rank := ExternalLongArray new: 1. >> >> (otherwise #arrayPointer is not understood by 'rank') and also the return >> value from gelssWithm: has to be stored in 'info' (otherwise it will be >> always nil). >> >> >> >> On Thu, Aug 11, 2016 at 6:05 PM, Yoshiki Ohshima >> wrote: >>> >>> I have not reached the conclusion but would like to give some status >>> report. >>> >>> My test case is simple: >>> >>> ------------------- >>> a := LapackDGEMatrix rows: #(#(3 2 4) #(2 -5 -1) #(1 -2 2)). >>> b := LapackDGEMatrix rows: #(#(1) (2) (3)). >>> c := LapackLeastSquareProblem matrix: a rhsMatrix: b. >>> >>> c solution. >>> ------------------- >>> >>> If I evaluate this, the external call for 'dgesvd_' in >>> >>> CLapackDLibrary>>xgesvdWithjobu:jobvt:m:n:a:lda:s:u:ldu:vt:ldvt:work:lwork:info: >>> fails. >>> >>> But if I fix it by rewriting the cdecl line to: >>> >>> >> double * double * long * double * long * double * long * long * ) >>> module: 'libLAPACK'> >>> >>> from >>> >>> >> double * double * long * double * long * double * long * long * )> >>> >>> it passes. >>> >>> However, the value that gets stored in the 's' instance variable of >>> LapackSVDecomposition is a LapackDGEMatrix, and when the resulting >>> value is used in the #defaultTolerance, I get DNU for '*". >>> >>> >>> >>> On Tue, Aug 9, 2016 at 3:26 PM, Yoshiki Ohshima >>> wrote: >>> > Correction: (sorry) >>> > >>> > In a 64 bit image, TestCBlas runs fine but the ones listed above fails >>> > in a 32-bit image. >>> > >>> > On Tue, Aug 9, 2016 at 3:12 PM, Yoshiki Ohshima >>> > wrote: >>> >> Thanks! >>> >> >>> >> I am trying this from a vanilla 5.0 image and I see that >>> >> ConfigurationOfSmallapack-nice.18 is loaded. Now, however, the >>> >> following tests from Smallapack-SUnitTests category fail: >>> >> >>> >> #('TestCBlas>>#testCsscal' 'TestCBlas>>#testSaxpy' >>> >> 'TestCBlas>>#testSgemv' 'TestCBlas>>#testSgemvTrans' >>> >> 'TestCBlas>>#testSger' 'TestCBlas>>#testSscal' 'TestCBlas>>#testStrsm' >>> >> 'TestLapackMatrix>>#testMatrixProduct' 'TestLapackMatrix>>#testSum' >>> >> 'TestRandMatrix>>#testOperationTiming') >>> >> >>> >> As I wrote, TestCBlas used to be all green. I'll check what has >>> >> changed since -nice.16... >>> >> >>> >> On Sat, Aug 6, 2016 at 4:56 PM, Nicolas Cellier >>> >> wrote: >>> >>> This should be fixed in ConfigurationOfSmallapack-nice.18 >>> >>> BTW, I think you can provide the absolute path to the .dylib instead >>> >>> of >>> >>> copying in local repository... >>> >>> >>> >>> >>> >>> 2016-08-06 23:29 GMT+02:00 Nicolas Cellier >>> >>> : >>> >>>> >>> >>>> Hi Yoshiki, >>> >>>> thanks for reporting, I'll try better... >>> >>>> >>> >>>> >>> >>>> 2016-08-01 0:48 GMT+02:00 Yoshiki Ohshima : >>> >>>>> >>> >>>>> I see you have some changes but it appears that evaluating the >>> >>>>> Installer do it goes into an infinite loop of #moduleName and >>> >>>>> #masOsxModuleName. >>> >>>>> >>> >>>>> (Thanks again!) >>> >>>>> >>> >>>>> On Sat, Jul 30, 2016 at 8:23 AM, Yoshiki Ohshima >>> >>>>> wrote: >>> >>>>> > But some of TestLapackMatrix tests fail. A few external >>> >>>>> > functions >>> >>>>> > cannot be found, it looks like. >>> >>>>> > >>> >>>>> > On Sat, Jul 30, 2016 at 7:55 AM, Yoshiki Ohshima >>> >>>>> > wrote: >>> >>>>> >> Great! >>> >>>>> >> >>> >>>>> >> Before (I got into a meeting and then entered the "Friday mode", >>> >>>>> >> I was >>> >>>>> >> going down the path of trying to call the Framework functions >>> >>>>> >> but >>> >>>>> >> copying files anyway was a simpler solution for now. >>> >>>>> >> >>> >>>>> >> Yes, I got all tests green. Thank you! >>> >>>>> >> >>> >>>>> >> On Fri, Jul 29, 2016 at 3:24 PM, Nicolas Cellier >>> >>>>> >> wrote: >>> >>>>> >>> OK, what I did on my Mac: >>> >>>>> >>> >>> >>>>> >>> 1) look under the Squeak app and edit the Contents/Info.plist >>> >>>>> >>> 2) change value of SqueakPluginsBuiltInOrLocalOnly to "No" >>> >>>>> >>> otherwise library loading is restricted to the Squeak app >>> >>>>> >>> bundle >>> >>>>> >>> 3) copy the veclib framework library files (dylib) in same >>> >>>>> >>> directory >>> >>>>> >>> as >>> >>>>> >>> squeak image >>> >>>>> >>> 4) launch Squeak >>> >>>>> >>> 5) install Smallapack >>> >>>>> >>> follow instruction from >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> >>> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/SmallapackSqueak >>> >>>>> >>> 6) change CBlasLibrary class>>moduleName 'libcblas.dylib' -> >>> >>>>> >>> 'libBlas.dylib' >>> >>>>> >>> nowadays, cblas and blas are in the same dylib... >>> >>>>> >>> 7) change CLapackLibrary class>>moduleName 'libclapack.dylib' >>> >>>>> >>> -> >>> >>>>> >>> 'libLapack.dylib' >>> >>>>> >>> idem >>> >>>>> >>> 8) re-initialize the cache (I know, I know, there are too >>> >>>>> >>> many...) >>> >>>>> >>> CBlasLibrary install. CLapackLibrary install. LapackMatrix >>> >>>>> >>> resetBlasInterfaces; resetLapackInterfaces. >>> >>>>> >>> 9) run the TestCBlas suite >>> >>>>> >>> >>> >>>>> >>> It should be green >>> >>>>> >>> I will commit the changes later, and will probably implement >>> >>>>> >>> moduleNames as >>> >>>>> >>> a Preference (pragma oriented). >>> >>>>> >>> No need to override code anymore :) >>> >>>>> >>> >>> >>>>> >>> I think step 3) is necessary because of ioLoadModuleRaw() in >>> >>>>> >>> platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> >>> https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/Cog/platforms/iOS/vm/OSX/sqMacUnixExternalPrims.m >>> >>>>> >>> It would only look those frameworks: >>> >>>>> >>> >>> >>>>> >>> static char *frameworks[]= >>> >>>>> >>> { >>> >>>>> >>> "", >>> >>>>> >>> "/CoreServices.framework/Frameworks", >>> >>>>> >>> >>> >>>>> >>> "/ApplicationServices.framework/Frameworks", >>> >>>>> >>> "/Carbon.framework/Frameworks", >>> >>>>> >>> 0 >>> >>>>> >>> }; >>> >>>>> >>> >>> >>>>> >>> But I did step 3) before I tried 1) + 2), adn did not retry, so >>> >>>>> >>> maybe >>> >>>>> >>> I'm >>> >>>>> >>> wrong... >>> >>>>> >>> Scanning all the frameworks is not a solution. And what if we >>> >>>>> >>> want a >>> >>>>> >>> specific version? >>> >>>>> >>> It would be far better to be able to specify the path to the >>> >>>>> >>> library >>> >>>>> >>> from >>> >>>>> >>> within the image like VW... >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> >>> 2016-07-29 19:41 GMT+02:00 Nicolas Cellier >>> >>>>> >>> : >>> >>>>> >>>> >>> >>>>> >>>> >>> >>>>> >>>> >>> >>>>> >>>> 2016-07-29 19:28 GMT+02:00 Nicolas Cellier >>> >>>>> >>>> : >>> >>>>> >>>>> >>> >>>>> >>>>> >>> >>>>> >>>>> >>> >>>>> >>>>> 2016-07-29 19:02 GMT+02:00 Yoshiki Ohshima >>> >>>>> >>>>> : >>> >>>>> >>>>>> >>> >>>>> >>>>>> First question: >>> >>>>> >>>>>> >>> >>>>> >>>>>> The Mac OS comes with Accelerate.Framework and that contains >>> >>>>> >>>>>> BLAS. >>> >>>>> >>>>>> But probably I still should compile those libraries, right? >>> >>>>> >>>>>> >>> >>>>> >>>>> >>> >>>>> >>>>> No, it's better to link to accelerated library. >>> >>>>> >>>>> I don't have a Mac handy here to verify how to link to it >>> >>>>> >>>>> though. >>> >>>>> >>>>> I'll be able to check latter in the evening >>> >>>>> >>>>> >>> >>>>> >>>> >>> >>>>> >>>> >>> >>>>> >>>> I've downloaded the code, and I see it now: the library names >>> >>>>> >>>> are >>> >>>>> >>>> hardcoded (see implementors of moduleName). >>> >>>>> >>>> For Mac it is libblas.dylib and libcblas.dylib >>> >>>>> >>>> Also note that there is a preference for switching to cblas >>> >>>>> >>>> (blas >>> >>>>> >>>> functions with C interface). >>> >>>>> >>>> This should be faster because we pass some parameters by value >>> >>>>> >>>> rather than >>> >>>>> >>>> allocating them and pass reference... >>> >>>>> >>>> >>> >>>>> >>>> Module names could also be replaced by Preferences eventually, >>> >>>>> >>>> but >>> >>>>> >>>> by now, >>> >>>>> >>>> you'll have to override... >>> >>>>> >>>> >>> >>>>> >>>>>> >>> >>>>> >>>>>> >>> >>>>> >>>>>> On Thu, Jul 28, 2016 at 4:11 PM, Yoshiki Ohshima >>> >>>>> >>>>>> wrote: >>> >>>>> >>>>>> > Thanks! >>> >>>>> >>>>>> > >>> >>>>> >>>>>> > On Thu, Jul 28, 2016 at 4:04 PM, Nicolas Cellier >>> >>>>> >>>>>> > wrote: >>> >>>>> >>>>>> >> Hi Yoshiki, >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> Thanks for inquiring about Smallapack. >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> This problem has been solved in 2011 as the post tells. >>> >>>>> >>>>>> >> Moreover, it was about alignment of squeak objects that >>> >>>>> >>>>>> >> was on >>> >>>>> >>>>>> >> multiple of 4 >>> >>>>> >>>>>> >> on SqueakV3 memory. >>> >>>>> >>>>>> >> Spur is 8 byte aligned, so the problem would have also >>> >>>>> >>>>>> >> vanished >>> >>>>> >>>>>> >> without any >>> >>>>> >>>>>> >> patch for those being patient :) >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> For the 15 arguments limit, Smallapack comes with it's >>> >>>>> >>>>>> >> own >>> >>>>> >>>>>> >> compiler, >>> >>>>> >>>>>> >> so it's >>> >>>>> >>>>>> >> a non issue. >>> >>>>> >>>>>> >> Maybe I should make the documentation more clear on >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> https://github.com/nicolas-cellier-aka-nice/smallapack/wiki/SmallapackSqueak >>> >>>>> >>>>>> >> ? >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> Unfortunately, there's no Sparse Matrix representation in >>> >>>>> >>>>>> >> Lapack. >>> >>>>> >>>>>> >> If you know of a good package for that, it could be >>> >>>>> >>>>>> >> integrated. >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> If you have other questions, don't hesitate to ask. >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> cheers >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> Nicolas >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> 2016-07-29 0:22 GMT+02:00 Yoshiki Ohshima >>> >>>>> >>>>>> >> : >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> I am trying to do a bit of linear algebra stuff that >>> >>>>> >>>>>> >>> involves >>> >>>>> >>>>>> >>> to >>> >>>>> >>>>>> >>> solve >>> >>>>> >>>>>> >>> a sparse 2D matrix (for a variation of doing least >>> >>>>> >>>>>> >>> square >>> >>>>> >>>>>> >>> fit). >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> There was a message from Nicolas: >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2011-August/161113.html >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> Is this where it stands today, too? It looks like that >>> >>>>> >>>>>> >>> arg >>> >>>>> >>>>>> >>> count >>> >>>>> >>>>>> >>> problem is still there in 5.0, but is it in a way >>> >>>>> >>>>>> >>> non-issue as >>> >>>>> >>>>>> >>> it is >>> >>>>> >>>>>> >>> still FFI based? >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> Thanks! >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >>> -- >>> >>>>> >>>>>> >>> -- Yoshiki >>> >>>>> >>>>>> >>> >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> >> >>> >>>>> >>>>>> > >>> >>>>> >>>>>> > >>> >>>>> >>>>>> > >>> >>>>> >>>>>> > -- >>> >>>>> >>>>>> > -- Yoshiki >>> >>>>> >>>>>> >>> >>>>> >>>>>> >>> >>>>> >>>>>> >>> >>>>> >>>>>> -- >>> >>>>> >>>>>> -- Yoshiki >>> >>>>> >>>>>> >>> >>>>> >>>>> >>> >>>>> >>>> >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> >>> >>> >>>>> >> >>> >>>>> >> >>> >>>>> >> >>> >>>>> >> -- >>> >>>>> >> -- Yoshiki >>> >>>>> > >>> >>>>> > >>> >>>>> > >>> >>>>> > -- >>> >>>>> > -- Yoshiki >>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> -- >>> >>>>> -- Yoshiki >>> >>>>> >>> >>>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >> >>> >> >>> >> >>> >> -- >>> >> -- Yoshiki >>> > >>> > >>> > >>> > -- >>> > -- Yoshiki >>> >>> >>> >>> -- >>> -- Yoshiki >> >> >> >> >> -- >> -- Yoshiki >> >> >> >> > > > > -- -- Yoshiki From nicolas.cellier.aka.nice at gmail.com Fri Aug 12 22:50:07 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Fri Aug 12 22:50:11 2016 Subject: [squeak-dev] Preferences menuTitleBorderColor unexpected behavior Message-ID: Open preferences, click on button next to menuTitleBorderColor Unexpectingly, it raises the borderStyleMenu Then things end with a MNU strange hack seems located in PBColorPreferenceView>>colorMenuButton -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160813/68348203/attachment.htm From tim at rowledge.org Fri Aug 12 22:57:59 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 12 22:58:01 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> Message-ID: <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> > On 12-08-2016, at 1:49 PM, Chris Muller wrote: > >>> And if I manually try `PreferenceWizardMorph new openInWorld` I see the entire thing, and on choosing ?configure it looks as if the default window size is too small to fit the config options in. I needed to make it quite a bit bigger to lay out correctly. >> >> And why the multiple 1 second delays? It makes it appear as if Squeak is really slow, which probably wasn?t the intention. > > I was just thinking how innovative the little pauses were. A UI tool > to delineate and direct the users eyes to the sequence of elements to > look at. > > The delays feel intentional, as if it was designed for a refined human > consumption experience. It feels relaxed, not a strained feel as if Squeak were > struggling to keep up because it were slow. If we were fading in/out smoothly - which usually requires some exponential rate of change with acceleration and decceleration - I?d likely agree. And of course, I?m testing this out on a box that is maybe 10% of your machine?s performance. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: IO: Illogical Or From commits at source.squeak.org Sat Aug 13 05:52:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 05:52:48 2016 Subject: [squeak-dev] The Trunk: MorphicTests-mt.36.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicTests to project The Trunk: http://source.squeak.org/trunk/MorphicTests-mt.36.mcz ==================== Summary ==================== Name: MorphicTests-mt.36 Author: mt Time: 13 August 2016, 7:52:42.982008 am UUID: 7d5e8b2d-a89b-3643-8921-aa71cc575a6f Ancestors: MorphicTests-mt.35 Adds a test that verifies that Morphs do not have to set the #wasHandled: flag in an event, even now in the face of the latest event bubbling changed. =============== Diff against MorphicTests-mt.35 =============== Item was changed: Morph subclass: #MorphForEventTests + instanceVariableNames: 'eventsDuringCapture eventsDuringBubble eventsRejected eventsFiltered handlesMouseDown keyStrokesReceived' - instanceVariableNames: 'eventsDuringCapture eventsDuringBubble eventsRejected eventsFiltered handlesMouseDown' classVariableNames: '' poolDictionaries: '' category: 'MorphicTests-Events'! Item was added: + ----- Method: MorphForEventTests>>keyStroke: (in category 'event handling') ----- + keyStroke: evt + + self keyStrokesReceived add: evt.! Item was added: + ----- Method: MorphForEventTests>>keyStrokesReceived (in category 'accessing') ----- + keyStrokesReceived + ^ keyStrokesReceived ifNil: [keyStrokesReceived := OrderedCollection new]! Item was added: + ----- Method: MorphicEventDispatcherTests>>test10NoDuplicateKeyStroke (in category 'tests') ----- + test10NoDuplicateKeyStroke + "Verifies that the event bubbling mechanism does not send keystroke events twice after the event was handled, as usual, by a morph." + + | m1 m2 m3 | + m1 := MorphForEventTests new. + m2 := MorphForEventTests new. + m3 := MorphForEventTests new. + + m1 addMorph: m2. + m2 addMorph: m3. + + m1 openInWorld: world. + + self assert: m3 keyStrokesReceived isEmpty. + self assert: m2 keyStrokesReceived isEmpty. + self assert: m1 keyStrokesReceived isEmpty. + + hand handleEvent: (self keystroke: $x at: m3 center). + + self assert: (m3 eventsDuringBubble anySatisfy: [:ea | ea isKeystroke]). + self assert: (m2 eventsDuringBubble anySatisfy: [:ea | ea isKeystroke]). + self assert: (m1 eventsDuringBubble anySatisfy: [:ea | ea isKeystroke]). + + self assert: m3 keyStrokesReceived first keyCharacter = $x. + self assert: m2 keyStrokesReceived isEmpty. + self assert: m1 keyStrokesReceived isEmpty. + ! From Marcel.Taeumel at hpi.de Sat Aug 13 06:00:53 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 06:01:09 2016 Subject: [squeak-dev] Re: Could we make list chooser resizable In-Reply-To: References: Message-ID: <1471068053733-4910833.post@n4.nabble.com> Nicolas Cellier wrote > Hi, > the new list chooser is not bad, except that it should be resizable. > It has sliders, OK, but I have space on screen and want to see more at > once. > For example, when I want to copy a MC version to another repository, it's > quite unusable. > > More over try to resize with halo: the halo for inner list appears outside > the Window Morph, and when we click outside guess what? Yeah popular > preference, dismiss the window... > > Nicolas > > > > > PluggableDialogWindow.png (19K) > <http://forum.world.st/attachment/4910819/0/PluggableDialogWindow.png> Hi Nicolas, it *is* resizable. That's why that inner border is so big. Due to the construction of dialogs, however, that "being resizable" behavior comes from the special contents of this dialog. Try to move your mouse to one of the corners of the inner list. Maybe we can make this more discoverable. Best, Marcel P.S.: It's merely "growable" because if you try to shrink it again, some specialties of our TableLayout kicks in. :-D -- View this message in context: http://forum.world.st/Could-we-make-list-chooser-resizable-tp4910819p4910833.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Aug 13 06:01:43 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 06:01:58 2016 Subject: [squeak-dev] Re: We need your my.prefs! In-Reply-To: <6c0fe5dd-ddb6-8800-5a23-0c06c4ead0f0@gmx.net> References: <1471021191806-4910774.post@n4.nabble.com> <6c0fe5dd-ddb6-8800-5a23-0c06c4ead0f0@gmx.net> Message-ID: <1471068103624-4910834.post@n4.nabble.com> Herbert K?nig wrote > Hi, > > a recent my.prefs is over 600 k so you might wand to provide some upload > space. > > All I found on my computer (back to 3.8 :-)) are here: > > http://www.kostenlose-bauabrechnung.de/downloads/ > > Cheers, > > Herbert > > Am 12.08.2016 um 18:59 schrieb marcel.taeumel: >> Hi, there. >> >> Please, open your preference browser in your working image (whatever >> version >> that might be), click on "save to disk" and upload the resulting my.prefs >> file (will be in your working directory) and share it here. I will then >> load >> those and check compatibility in the next 5.1 release. >> >> We need your combination of preferences! :) Please double-check for >> senstive >> data. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/We-need-your-my-prefs-tp4910774.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> Thanks. Best, Marcel -- View this message in context: http://forum.world.st/We-need-your-my-prefs-tp4910774p4910834.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Aug 13 06:13:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 06:13:37 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1269.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1269.mcz ==================== Summary ==================== Name: Morphic-mt.1269 Author: mt Time: 13 August 2016, 8:13:02.213008 am UUID: 14e0c993-d184-e14a-bb7a-4ebfc5fdc15e Ancestors: Morphic-mt.1268 Remove some old preferences, which are now in the UI themes but whose getter methods remain existing and deprecated for applications to access. =============== Diff against Morphic-mt.1268 =============== Item was changed: (PackageInfo named: 'Morphic') postscript: 'TheWorldMainDockingBar updateInstances. "For more fine-granular visual settings." + + "These are all in UI Themes now but remained as deprecated, so the preference got not removed automatically." + Preferences removePreference: #''BalloonMorph>>balloonColor''. + Preferences removePreference: #''MenuMorph>>menuBorderColor''. + Preferences removePreference: #''MenuMorph>>menuBorderWidth''. + Preferences removePreference: #''MenuMorph>>menuColor''. + Preferences removePreference: #''MenuMorph>>menuLineColor''. + Preferences removePreference: #''MenuMorph>>menuSelectionColor''. + Preferences removePreference: #''MenuMorph>>menuTitleBorderColor''. + Preferences removePreference: #''MenuMorph>>menuTitleBorderWidth''. + Preferences removePreference: #''MenuMorph>>menuTitleColor''. + '! - Preferences removePreference: #''BalloonMorph>>balloonColor''.'! From Marcel.Taeumel at hpi.de Sat Aug 13 06:15:40 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 06:15:55 2016 Subject: [squeak-dev] Re: Preferences menuTitleBorderColor unexpected behavior In-Reply-To: References: Message-ID: <1471068940266-4910836.post@n4.nabble.com> Nicolas Cellier wrote > Open preferences, click on button next to menuTitleBorderColor > Unexpectingly, it raises the borderStyleMenu > Then things end with a MNU > > strange hack seems located in PBColorPreferenceView>>colorMenuButton Thanks. Those shouldn't be there because they are in the UI themes now. http://forum.world.st/The-Trunk-Morphic-mt-1269-mcz-tp4910835.html Best, Marcel -- View this message in context: http://forum.world.st/Preferences-menuTitleBorderColor-unexpected-behavior-tp4910824p4910836.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Aug 13 06:20:52 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 06:21:08 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> Message-ID: <1471069252501-4910837.post@n4.nabble.com> tim Rowledge wrote >> On 12-08-2016, at 1:49 PM, Chris Muller < > asqueaker@ > > wrote: >> >>>> And if I manually try `PreferenceWizardMorph new openInWorld` I see the >>>> entire thing, and on choosing ?configure it looks as if the default >>>> window size is too small to fit the config options in. I needed to make >>>> it quite a bit bigger to lay out correctly. >>> >>> And why the multiple 1 second delays? It makes it appear as if Squeak is >>> really slow, which probably wasn?t the intention. >> >> I was just thinking how innovative the little pauses were. A UI tool >> to delineate and direct the users eyes to the sequence of elements to >> look at. >> >> The delays feel intentional, as if it was designed for a refined human >> consumption experience. It feels relaxed, not a strained feel as if >> Squeak were >> struggling to keep up because it were slow. > > If we were fading in/out smoothly - which usually requires some > exponential rate of change with acceleration and decceleration - I?d > likely agree. And of course, I?m testing this out on a box that is maybe > 10% of your machine?s performance. > > tim > -- > tim Rowledge; > tim@ > ; http://www.rowledge.org/tim > Strange OpCodes: IO: Illogical Or We had a little hick-up with that one build, here is what it looks like with http://files.squeak.org/5.1beta/Squeak5.1beta-16395-32bit-r3397-All-in-One.zip Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910837.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Aug 13 07:06:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:06:22 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.72.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.72.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.72 Author: mt Time: 13 August 2016, 9:06:15.228008 am UUID: 2c9a92f3-159d-b54a-abaf-a78af7ea82f5 Ancestors: PreferenceBrowser-mt.71 Account for low-performance platforms such as ARM. In that case, switch some settings to accommodate that and inform the user. =============== Diff against PreferenceBrowser-mt.71 =============== Item was changed: Morph subclass: #PreferenceWizardMorph + instanceVariableNames: 'previewWorld titleMorph buttonRowMorph controlMorph startButton previousButton nextButton pages currentPageIndex pagesLabel skipButton isFullScreen lowPerformanceMorph' - instanceVariableNames: 'previewWorld titleMorph buttonRowMorph controlMorph startButton previousButton nextButton pages currentPageIndex pagesLabel skipButton isFullScreen' classVariableNames: '' poolDictionaries: '' category: 'PreferenceBrowser'! Item was added: + ----- Method: PreferenceWizardMorph>>adjustSettingsForLowPerformance (in category 'actions') ----- + adjustSettingsForLowPerformance + + self stateGradients "flat look" ifFalse: [self toggleGradients]. + self stateBlinkingCursor ifTrue: [self toggleBlinkingCursor]. + self stateFastDrag ifFalse: [self toggleFastDrag]. + + self stateSoftShadows ifTrue: [self toggleSoftShadows]. + self stateHardShadows ifTrue: [self toggleHardShadows]. + + self stateRoundedWindowLook ifTrue: [self toggleRoundedWindowLook]. + self stateRoundedButtonLook ifTrue: [self toggleRoundedButtonLook]. + + self stateAttachToolsToMouse ifTrue: [self toggleAttachToolsToMouse]. + self stateToolAndMenuIcons ifTrue: [self toggleToolAndMenuIcons]. + + "Set simple background." + ActiveWorld setAsBackground: MorphicProject defaultFill. + previewWorld fillStyle: ActiveWorld fillStyle. + ! Item was changed: ----- Method: PreferenceWizardMorph>>createButton (in category 'initialization') ----- createButton ^ PluggableButtonMorphPlus new setProperty: #noUserInterfaceTheme toValue: true; offColor: (self defaultColor adjustBrightness: 0.2); feedbackColor: (self defaultColor adjustBrightness: 0.4); model: self; font: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 12); textColor: self defaultTextColor; borderColor: self defaultTextColor; instVarNamed: #borderColor put: self defaultTextColor; "HACK!!" borderWidth: 2; + cornerStyle: (self hasLowPerformance ifTrue: [#square] ifFalse: [#rounded]); - cornerStyle: #rounded; vResizing: #shrinkWrap; hResizing: #shrinkWrap; layoutInset: (20@10 corner: 20@10); yourself! Item was changed: ----- Method: PreferenceWizardMorph>>createLabel:color: (in category 'initialization') ----- createLabel: aString color: aColor + ^ self createLabel: aString color: aColor pointSize: 12! - | lbl | - lbl := TextMorph new hResizing: #spaceFill; vResizing: #shrinkWrap. - lbl newContents:aString. - lbl text - addAttribute: (TextColor color: aColor); - addAttribute: (TextFontReference toFont: ((StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 12))). - lbl lock. - ^ lbl! Item was added: + ----- Method: PreferenceWizardMorph>>createLabel:color:pointSize: (in category 'initialization') ----- + createLabel: aString color: aColor pointSize: size + + | lbl | + lbl := TextMorph new hResizing: #spaceFill; vResizing: #shrinkWrap. + lbl newContents:aString. + lbl text + addAttribute: (TextColor color: aColor); + addAttribute: (TextFontReference toFont: ((StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: size))). + lbl lock. + ^ lbl! Item was added: + ----- Method: PreferenceWizardMorph>>hasLowPerformance (in category 'testing') ----- + hasLowPerformance + "If the wizard is started on a machine with low performance, the wizard will change some settings automatically on startup." + + ^ Smalltalk platformSubtype beginsWith: 'arm'! Item was changed: ----- Method: PreferenceWizardMorph>>initialize (in category 'initialization') ----- initialize super initialize. isFullScreen := false. + self hasLowPerformance + ifTrue: [self color: self defaultColor] + ifFalse: [self color: (self defaultColor alpha: 0.75)]. + - self color: (self defaultColor alpha: 0.75). self setProperty: #indicateKeyboardFocus toValue: #never. Preferences enable: #systemWindowEmbedOK. titleMorph := ('Welcome to Squeak' translated asText addAttribute: (TextColor color: self defaultTextColor); addAttribute: (TextFontReference toFont: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 20)); yourself) asMorph lock. titleMorph margins: (10@0 corner: 10@10). titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0@ 0 corner: 0 @ titleMorph height)). self initializePages; initializeButtons; initializeControlMorph; + initializePreviewWorld; + initializeForLowPerformance. - initializePreviewWorld. self changeProportionalLayout; layoutInset: 20; cellInset: 10; cellPositioning: #center; + addAllMorphs: {titleMorph. buttonRowMorph. controlMorph. previewWorld. startButton. skipButton. lowPerformanceMorph}. - addAllMorphs: {titleMorph. buttonRowMorph. controlMorph. previewWorld. startButton. skipButton}. self addKeyboardCaptureFilter: self.! Item was added: + ----- Method: PreferenceWizardMorph>>initializeForLowPerformance (in category 'initialization') ----- + initializeForLowPerformance + + lowPerformanceMorph := ('Settings were adjusted for low performance.' translated asText + addAttribute: (TextColor color: (Color gray: 0.7)); + addAttribute: (TextFontReference toFont: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9)); + yourself) asMorph lock. + + lowPerformanceMorph layoutFrame: (LayoutFrame fractions: (1 @ 1 corner: 1 @ 1) offsets: (lowPerformanceMorph fullBounds width negated @ lowPerformanceMorph fullBounds height negated corner: 20 @ 20 "Into margins")). + + self hasLowPerformance ifTrue: [self adjustSettingsForLowPerformance].! Item was changed: ----- Method: PreferenceWizardMorph>>initializePreviewWorld (in category 'initialization') ----- initializePreviewWorld | w1 w2 w3 | previewWorld := PasteUpMorph new hResizing: #spaceFill; vResizing: #spaceFill; viewBox: (0@0 corner: 500@500); layoutFrame: (LayoutFrame fractions: (0.3 @ 0 corner: 1.0 @ 1.0) offsets: (0@ titleMorph height corner: 0 @ buttonRowMorph height negated)); fillStyle: ActiveWorld fillStyle; borderWidth: 2; borderColor: Color white; + cornerStyle: (self hasLowPerformance ifTrue: [#square] ifFalse: [#rounded]); - cornerStyle: #rounded; yourself. w1 := ToolBuilder open: (Browser new setClass: Morph selector: #drawOn:). w2 := ToolSet browseMessageSet: (SystemNavigation default allCallsOn: #negated) name: 'Senders' translated autoSelect: 'negated'. w3 := (Workspace new contents: '3+4 "Select and hit [CMD]+[P]."') openLabel: 'Workspace'. {w1. w2. w3} do: [:ea | ea makeUnclosable. previewWorld addMorph: ea]. self updateWindowBounds.! Item was changed: ----- Method: PreferenceWizardMorph>>showPlayfield (in category 'actions') ----- showPlayfield startButton hide. skipButton hide. + lowPerformanceMorph hide. isFullScreen := true. self step. titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0@ 0 corner: 0 @ titleMorph height)). self refreshWorld. (Delay forMilliseconds: 1000) wait. controlMorph show. self refreshWorld. (Delay forMilliseconds: 1000) wait. previewWorld show. self refreshWorld. (Delay forMilliseconds: 1000) wait. buttonRowMorph show. self next. self refreshWorld. ! Item was changed: ----- Method: PreferenceWizardMorph>>showWelcome (in category 'actions') ----- showWelcome titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0.65) offsets: (0 @0 corner: 0@0)). isFullScreen := false. self height: titleMorph fullBounds height * 4. self step. self fullBounds. self step. controlMorph hide. previewWorld hide. buttonRowMorph hide. titleMorph show. startButton show. skipButton show. + self hasLowPerformance + ifFalse: [lowPerformanceMorph hide] + ifTrue: [lowPerformanceMorph show]. + self world fullBounds. self refreshWorld. ! From commits at source.squeak.org Sat Aug 13 07:10:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:10:52 2016 Subject: [squeak-dev] The Trunk: UpdateStream-mt.6.mcz Message-ID: Marcel Taeumel uploaded a new version of UpdateStream to project The Trunk: http://source.squeak.org/trunk/UpdateStream-mt.6.mcz ==================== Summary ==================== Name: UpdateStream-mt.6 Author: mt Time: 13 August 2016, 9:10:46.906008 am UUID: 0d515b59-0cec-ba45-91ff-575f12eaeaba Ancestors: UpdateStream-ul.5 Preference help text updates. Thanks Tim R.! =============== Diff against UpdateStream-ul.5 =============== Item was changed: ----- Method: UpdateStreamDownloader class>>promptForUpdateServer (in category 'preferences') ----- promptForUpdateServer ^PromptForUpdateServer ifNil: [ false ]! From commits at source.squeak.org Sat Aug 13 07:11:46 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:11:49 2016 Subject: [squeak-dev] The Trunk: Tools-mt.718.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.718.mcz ==================== Summary ==================== Name: Tools-mt.718 Author: mt Time: 13 August 2016, 9:11:27.321008 am UUID: 21a2d9cb-0d56-3c48-ac99-b16f63109e57 Ancestors: Tools-mt.717 Preference help text updates. Thanks Tim R.! =============== Diff against Tools-mt.717 =============== Item was changed: ----- Method: CodeHolder class>>useMultiWindowBrowsers (in category 'preferences') ----- useMultiWindowBrowsers ^MultiWindowBrowsers ifNil: [false]! Item was changed: ----- Method: Workspace class>>shouldStyle (in category 'preferences') ----- shouldStyle ^ ShouldStyle ifNil: [ false ]! From commits at source.squeak.org Sat Aug 13 07:12:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:12:36 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.105.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.105.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.105 Author: mt Time: 13 August 2016, 9:12:29.389008 am UUID: 9e2c9bf8-02c8-a549-a725-af4644e7b9a5 Ancestors: ToolBuilder-Kernel-mt.104 Preference help text updates. Thanks Tim R.! =============== Diff against ToolBuilder-Kernel-mt.104 =============== Item was changed: ----- Method: ToolBuilder class>>openToolsAttachedToMouseCursor (in category 'preferences') ----- openToolsAttachedToMouseCursor ^ OpenToolsAttachedToMouseCursor ifNil: [false]! From commits at source.squeak.org Sat Aug 13 07:13:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:13:24 2016 Subject: [squeak-dev] The Trunk: Sound-mt.57.mcz Message-ID: Marcel Taeumel uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-mt.57.mcz ==================== Summary ==================== Name: Sound-mt.57 Author: mt Time: 13 August 2016, 9:13:15.074008 am UUID: 04593cdd-b915-1549-817d-b69cffe2b9e4 Ancestors: Sound-mt.56 Preference help text updates. Thanks Tim R.! =============== Diff against Sound-mt.56 =============== Item was changed: ----- Method: SoundPlayer class>>soundQuickStart (in category 'preferences') ----- soundQuickStart ^SoundsShouldStartQuick ifNil: [self defaultQuickStartForPlatform]! From commits at source.squeak.org Sat Aug 13 07:14:05 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:14:07 2016 Subject: [squeak-dev] The Trunk: SUnit-mt.105.mcz Message-ID: Marcel Taeumel uploaded a new version of SUnit to project The Trunk: http://source.squeak.org/trunk/SUnit-mt.105.mcz ==================== Summary ==================== Name: SUnit-mt.105 Author: mt Time: 13 August 2016, 9:13:59.488008 am UUID: 7dac7cca-3f8c-9943-8fad-33753c294bbf Ancestors: SUnit-pre.104 Preference help text updates. Thanks Tim R.! =============== Diff against SUnit-pre.104 =============== Item was changed: ----- Method: LongTestCase class>>shouldRun (in category 'accessing') ----- shouldRun ^ShouldRun ifNil: [ true ]! From commits at source.squeak.org Sat Aug 13 07:15:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:15:15 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-mt.182.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-mt.182.mcz ==================== Summary ==================== Name: MorphicExtras-mt.182 Author: mt Time: 13 August 2016, 9:14:59.600008 am UUID: eaec9364-637c-7d44-a06e-8e1b2cb3f2ba Ancestors: MorphicExtras-mt.181 Preference help text updates. Thanks Tim R.! =============== Diff against MorphicExtras-mt.181 =============== Item was changed: ----- Method: TrashCanMorph class>>preserveTrash (in category 'preferences') ----- preserveTrash + - ^ PreserveTrash ifNil: [false].! From commits at source.squeak.org Sat Aug 13 07:17:54 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:17:55 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1270.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1270.mcz ==================== Summary ==================== Name: Morphic-mt.1270 Author: mt Time: 13 August 2016, 9:17:19.163008 am UUID: 8ca7cb11-3c50-814f-9986-d3f24d7d7410 Ancestors: Morphic-mt.1269 Preference help text updates. Thanks Tim R.! =============== Diff against Morphic-mt.1269 =============== Item was changed: ----- Method: CornerGripMorph class>>drawCornerResizeHandles (in category 'preferences') ----- drawCornerResizeHandles ^ DrawCornerResizeHandles ifNil: [ false ]! Item was changed: ----- Method: DialogWindow class>>roundedDialogCorners (in category 'preferences') ----- roundedDialogCorners ^ RoundedDialogCorners ifNil: [ true ]! Item was changed: ----- Method: PluggableButtonMorph class>>roundedButtonCorners (in category 'preferences') ----- roundedButtonCorners ^ RoundedButtonCorners ifNil: [ true ]! Item was changed: ----- Method: PluggableTextMorph class>>simpleFrameAdornments (in category 'frame adornments') ----- simpleFrameAdornments ^SimpleFrameAdornments ifNil:[false]! Item was changed: ----- Method: SystemWindow class>>hideExpandButton (in category 'preferences') ----- hideExpandButton ^ HideExpandButton ifNil: [ false ] ! Item was changed: ----- Method: SystemWindow class>>roundedWindowCorners (in category 'preferences') ----- roundedWindowCorners ^ RoundedWindowCorners ifNil: [false]! Item was changed: ----- Method: TextEditor class>>autoEnclose (in category 'preferences') ----- autoEnclose ^ AutoEnclose ifNil: [ false ]! Item was changed: ----- Method: TextEditor class>>encloseSelection (in category 'preferences') ----- encloseSelection ' categoryList: #('Morphic' 'editing') + description: 'When true, selecting text and typing an opening parenthesis, bracket, square-bracket, single quote, or double quote will add corresponding character around the selection without requiring a cmd key.' - description: 'When true, selecting text and typing an opening parenthesis, bracket, square-bracket, single quote, or double quote will add corresponding character around the selection.' type: #Boolean> ^ EncloseSelection ifNil: [ false ]! From commits at source.squeak.org Sat Aug 13 07:18:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:18:35 2016 Subject: [squeak-dev] The Trunk: CommandLine-mt.8.mcz Message-ID: Marcel Taeumel uploaded a new version of CommandLine to project The Trunk: http://source.squeak.org/trunk/CommandLine-mt.8.mcz ==================== Summary ==================== Name: CommandLine-mt.8 Author: mt Time: 13 August 2016, 9:18:30.702008 am UUID: 995054da-cd48-aa4c-8c25-9fe62cf683eb Ancestors: CommandLine-mt.7 Preference help text updates. Thanks Tim R.! =============== Diff against CommandLine-mt.7 =============== Item was changed: ----- Method: CommandLineToolSet class>>saveSnapshotOnError (in category 'preferences') ----- saveSnapshotOnError ^ SaveSnapshotOnError ifNil: [SaveSnapshotOnError := false].! From commits at source.squeak.org Sat Aug 13 07:19:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:19:35 2016 Subject: [squeak-dev] The Trunk: Collections-mt.709.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.709.mcz ==================== Summary ==================== Name: Collections-mt.709 Author: mt Time: 13 August 2016, 9:19:13.299008 am UUID: be99cb4b-3143-1c48-8258-5df83e13745e Ancestors: Collections-mt.708 Preference help text updates. Thanks Tim R.! =============== Diff against Collections-mt.708 =============== Item was changed: ----- Method: TranscriptStream class>>redirectToStdOut (in category 'preferences') ----- redirectToStdOut ^ RedirectToStdOut ifNil: [false]! From nicolas.cellier.aka.nice at gmail.com Sat Aug 13 07:24:09 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sat Aug 13 07:24:13 2016 Subject: [squeak-dev] Re: Could we make list chooser resizable In-Reply-To: <1471068053733-4910833.post@n4.nabble.com> References: <1471068053733-4910833.post@n4.nabble.com> Message-ID: Ah OK, I didn't even think of it. the inner border was not looking thick in attached png, maybe I'm not using the right theme. and also, it's rather unusual UI. 2016-08-13 8:00 GMT+02:00 marcel.taeumel : > Nicolas Cellier wrote > > Hi, > > the new list chooser is not bad, except that it should be resizable. > > It has sliders, OK, but I have space on screen and want to see more at > > once. > > For example, when I want to copy a MC version to another repository, it's > > quite unusable. > > > > More over try to resize with halo: the halo for inner list appears > outside > > the Window Morph, and when we click outside guess what? Yeah popular > > preference, dismiss the window... > > > > Nicolas > > > > > > > > > > PluggableDialogWindow.png (19K) > > <http://forum.world.st/attachment/4910819/0/ > PluggableDialogWindow.png> > > Hi Nicolas, > > it *is* resizable. That's why that inner border is so big. Due to the > construction of dialogs, however, that "being resizable" behavior comes > from > the special contents of this dialog. Try to move your mouse to one of the > corners of the inner list. > > Maybe we can make this more discoverable. > > Best, > Marcel > > P.S.: It's merely "growable" because if you try to shrink it again, some > specialties of our TableLayout kicks in. :-D > > > > -- > View this message in context: http://forum.world.st/Could- > we-make-list-chooser-resizable-tp4910819p4910833.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160813/17fb230b/attachment.htm From commits at source.squeak.org Sat Aug 13 07:30:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:30:14 2016 Subject: [squeak-dev] The Trunk: Morphic-nice.1269.mcz Message-ID: Nicolas Cellier uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-nice.1269.mcz ==================== Summary ==================== Name: Morphic-nice.1269 Author: nice Time: 12 August 2016, 7:43:38.846146 pm UUID: 0fe08891-e1d1-49c3-9aa6-a06a768461a5 Ancestors: Morphic-mt.1268 BUGFIX: tallySelection (tally it) might need a context =============== Diff against Morphic-mt.1268 =============== Item was changed: ----- Method: SmalltalkEditor>>tallySelection (in category 'do-its') ----- tallySelection "Treat the current selection as an expression; evaluate it and return the time took for this evaluation" | result rcvr ctxt valueAsString v | self lineSelectAndEmptyCheck: [^ self]. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := [ | cm | cm := rcvr class evaluatorClass new compiledMethodFor: self selectionAsStream in: ctxt to: rcvr notifying: self ifFail: [morph flash. ^ self]. Time millisecondsToRun: + [v := cm valueWithReceiver: rcvr arguments: (ctxt ifNil: [#()] ifNotNil: [{ctxt}]) ]. - [v := cm valueWithReceiver: rcvr arguments: #() ]. ] on: OutOfScopeNotification do: [ :ex | ex resume: true]. "We do not want to have large result displayed" valueAsString := v printString. (valueAsString size > 30) ifTrue: [valueAsString := (valueAsString copyFrom: 1 to: 30), '...']. PopUpMenu inform: 'Time to compile and execute: ', result printString, 'ms res: ', valueAsString. ! From commits at source.squeak.org Sat Aug 13 07:30:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:30:29 2016 Subject: [squeak-dev] The Trunk: ST80-nice.216.mcz Message-ID: Nicolas Cellier uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-nice.216.mcz ==================== Summary ==================== Name: ST80-nice.216 Author: nice Time: 12 August 2016, 7:46:54.418146 pm UUID: 1355ad92-746c-4ba6-8255-90bbdc07e4b9 Ancestors: ST80-mt.215 BUGFIX: tallySelection (tally it) might need a context =============== Diff against ST80-mt.215 =============== Item was changed: ----- Method: ParagraphEditor>>tallySelection (in category 'do-its') ----- tallySelection "Treat the current selection as an expression; evaluate it and return the time took for this evaluation" | result rcvr ctxt valueAsString v | self lineSelectAndEmptyCheck: [^self]. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := [ | cm | cm := rcvr class evaluatorClass new compiledMethodFor: self selectionAsStream in: ctxt to: rcvr notifying: self ifFail: [self flash. ^self]. Time millisecondsToRun: + [v := cm valueWithReceiver: rcvr arguments: (ctxt ifNil: [#()] ifNotNil: [{ctxt}]) ]. - [v := cm valueWithReceiver: rcvr arguments: #() ]. ] on: OutOfScopeNotification do: [ :ex | ex resume: true]. "We do not want to have large result displayed" valueAsString := v printString. (valueAsString size > 30) ifTrue: [valueAsString := (valueAsString copyFrom: 1 to: 30), '...']. PopUpMenu inform: 'Time to compile and execute: ', result printString, 'ms res: ', valueAsString. ! From commits at source.squeak.org Sat Aug 13 07:34:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:34:01 2016 Subject: [squeak-dev] The Trunk: System-mt.883.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.883.mcz ==================== Summary ==================== Name: System-mt.883 Author: mt Time: 13 August 2016, 9:33:30.812008 am UUID: 42eb0bfd-e8b1-9844-b820-45ca18f89bf5 Ancestors: System-mt.882 Accommodate Monticello behavior regarding automatic detection of packages based on extension categories. MC does not trim trailing blanks. =============== Diff against System-mt.882 =============== Item was changed: ----- Method: Preferences class>>compileAccessorForPreference: (in category 'private') ----- compileAccessorForPreference: aPreference "Compile an accessor method for the given preference" self class compileSilently: ( '{1} ^self valueOfFlag: {2} ifAbsent: [ {3} ]' format: { aPreference name asString. aPreference name asSymbol printString. aPreference defaultValue storeString }) + classified: '*autogenerated-standard queries'! - classified: '*autogenerated - standard queries'! From commits at source.squeak.org Sat Aug 13 07:37:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 07:37:23 2016 Subject: [squeak-dev] The Trunk: Morphic-nice.1271.mcz Message-ID: Nicolas Cellier uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-nice.1271.mcz ==================== Summary ==================== Name: Morphic-nice.1271 Author: nice Time: 13 August 2016, 9:36:14.224536 am UUID: 81bd8809-f130-4f38-b153-c427d78ccbac Ancestors: Morphic-mt.1270, Morphic-nice.1269 merge Morphic-mt.1270: Preference help text updates. Thanks Tim R.! Morphic-nice.1269: BUGFIX: tallySelection (tally it) might need a context =============== Diff against Morphic-mt.1270 =============== Item was changed: ----- Method: SmalltalkEditor>>tallySelection (in category 'do-its') ----- tallySelection "Treat the current selection as an expression; evaluate it and return the time took for this evaluation" | result rcvr ctxt valueAsString v | self lineSelectAndEmptyCheck: [^ self]. (model respondsTo: #doItReceiver) ifTrue: [ rcvr := model doItReceiver. ctxt := model doItContext] ifFalse: [rcvr := ctxt := nil]. result := [ | cm | cm := rcvr class evaluatorClass new compiledMethodFor: self selectionAsStream in: ctxt to: rcvr notifying: self ifFail: [morph flash. ^ self]. Time millisecondsToRun: + [v := cm valueWithReceiver: rcvr arguments: (ctxt ifNil: [#()] ifNotNil: [{ctxt}]) ]. - [v := cm valueWithReceiver: rcvr arguments: #() ]. ] on: OutOfScopeNotification do: [ :ex | ex resume: true]. "We do not want to have large result displayed" valueAsString := v printString. (valueAsString size > 30) ifTrue: [valueAsString := (valueAsString copyFrom: 1 to: 30), '...']. PopUpMenu inform: 'Time to compile and execute: ', result printString, 'ms res: ', valueAsString. ! From Marcel.Taeumel at hpi.de Sat Aug 13 07:43:34 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 07:43:52 2016 Subject: [squeak-dev] Re: Could we make list chooser resizable In-Reply-To: References: <1471068053733-4910833.post@n4.nabble.com> Message-ID: <1471074214750-4910855.post@n4.nabble.com> Nicolas Cellier wrote > Ah OK, > I didn't even think of it. > the inner border was not looking thick in attached png, maybe I'm not > using > the right theme. > and also, it's rather unusual UI. > > > 2016-08-13 8:00 GMT+02:00 marcel.taeumel < > Marcel.Taeumel@ > >: > >> Nicolas Cellier wrote >> > Hi, >> > the new list chooser is not bad, except that it should be resizable. >> > It has sliders, OK, but I have space on screen and want to see more at >> > once. >> > For example, when I want to copy a MC version to another repository, >> it's >> > quite unusable. >> > >> > More over try to resize with halo: the halo for inner list appears >> outside >> > the Window Morph, and when we click outside guess what? Yeah popular >> > preference, dismiss the window... >> > >> > Nicolas >> > >> > >> > >> > >> > PluggableDialogWindow.png (19K) >> > <http://forum.world.st/attachment/4910819/0/ >> PluggableDialogWindow.png> >> >> Hi Nicolas, >> >> it *is* resizable. That's why that inner border is so big. Due to the >> construction of dialogs, however, that "being resizable" behavior comes >> from >> the special contents of this dialog. Try to move your mouse to one of the >> corners of the inner list. >> >> Maybe we can make this more discoverable. >> >> Best, >> Marcel >> >> P.S.: It's merely "growable" because if you try to shrink it again, some >> specialties of our TableLayout kicks in. :-D >> >> >> >> -- >> View this message in context: http://forum.world.st/Could- >> we-make-list-chooser-resizable-tp4910819p4910833.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Yeah, it's a trade-off. Let me just colorize those handles... (It's not theme-releated.) Best, Marcel -- View this message in context: http://forum.world.st/Could-we-make-list-chooser-resizable-tp4910819p4910855.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Aug 13 08:00:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 08:00:50 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1272.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1272.mcz ==================== Summary ==================== Name: Morphic-mt.1272 Author: mt Time: 13 August 2016, 10:00:05.281008 am UUID: 7b157358-ad69-ec40-9b8e-ae321fcd28bb Ancestors: Morphic-nice.1271 Decide for each corner grip individually whether to draw it or not. =============== Diff against Morphic-nice.1271 =============== Item was added: + ----- Method: CornerGripMorph>>drawCornerResizeHandles (in category 'accessing') ----- + drawCornerResizeHandles + ^ self valueOfProperty: #drawCornerResizeHandles ifAbsent: [self class drawCornerResizeHandles]! Item was added: + ----- Method: CornerGripMorph>>drawCornerResizeHandles: (in category 'accessing') ----- + drawCornerResizeHandles: aBoolean + self setProperty: #drawCornerResizeHandles toValue: aBoolean. + self changed.! Item was changed: ----- Method: CornerGripMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas + self drawCornerResizeHandles - self class drawCornerResizeHandles ifTrue: [ bounds := self bounds. aCanvas translucentImage: (self alphaHandle) at: (bounds origin ) sourceRect: (self handleOrigin extent: bounds extent)]! From commits at source.squeak.org Sat Aug 13 08:02:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 08:02:08 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.184.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.184.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.184 Author: mt Time: 13 August 2016, 10:01:58.488008 am UUID: 7d47b09b-da3d-8444-aa3a-dd40a91a7b99 Ancestors: ToolBuilder-Morphic-mt.183 When building a dialog with grips, show those grips because they are inside, not outside due to dialog window layout limitations. =============== Diff against ToolBuilder-Morphic-mt.183 =============== Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableDialog: (in category 'widgets optional') ----- buildPluggableDialog: aSpec | widget | widget := self dialogClass new. self register: widget id: aSpec name. widget model: aSpec model. "Set child dependent layout properties. The pane morph holds the special contents." widget paneMorph wantsPaneSplitters: (aSpec wantsResizeHandles ifNil: [true]). self setLayoutHintsFor: widget paneMorph spec: aSpec. widget paneMorph layoutInset: (aSpec padding ifNil: [ProportionalSplitterMorph gripThickness]). widget paneMorph cellInset: (aSpec spacing ifNil: [ProportionalSplitterMorph gripThickness]). + widget paneMorph wantsPaneSplitters ifTrue: [ + widget paneMorph addCornerGrips"addEdgeGrips". + widget paneMorph grips do: [:ea | ea drawCornerResizeHandles: true]]. - widget paneMorph wantsPaneSplitters ifTrue: [widget paneMorph addCornerGrips"addEdgeGrips"]. "Now create the children." panes := OrderedCollection new. aSpec children isSymbol ifTrue: [ widget getChildrenSelector: aSpec children. widget update: aSpec children] ifFalse: [ self buildAll: aSpec children in: widget paneMorph]. "Now create the buttons." aSpec buttons isSymbol ifTrue: [ widget getButtonsSelector: aSpec buttons. widget update: aSpec buttons] ifFalse: [ self buildAll: aSpec buttons in: widget buttonRowMorph. widget updateButtonProperties]. aSpec title ifNotNil: [:label | label isSymbol ifTrue:[widget getTitleSelector: label; update: label] ifFalse:[widget title: label]]. aSpec message ifNotNil: [:label | label isSymbol ifTrue:[widget getMessageSelector: label; update: label] ifFalse:[widget message: label]]. "Interaction behavior." aSpec autoCancel ifNotNil: [:b | widget autoCancel: b]. aSpec exclusive ifNotNil: [:b | widget exclusive: b]. widget closeDialogSelector: aSpec closeAction. self buildHelpFor: widget spec: aSpec. "Everything is shrink-wrapped around the pane morph." widget paneMorph extent: (aSpec extent ifNil:[widget initialExtent]). ^ widget! From commits at source.squeak.org Sat Aug 13 08:04:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 08:04:39 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.153.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.153.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.153 Author: mt Time: 13 August 2016, 10:04:29.083008 am UUID: 16484378-ce1c-f243-a2e9-c369007044ad Ancestors: ReleaseBuilder-mt.152 Set color of corner grips when preparing the release. Note that corner grips are NOT in the UI theme yet. I think we can live with that for now. Their implementation seems to be rather complicated and not to easily themeable. =============== Diff against ReleaseBuilder-mt.152 =============== Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. ToolBuilder openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; encloseSelection: false ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. Model windowActiveOnFirstClick: false. "Not good for little screen real estate." Model useColorfulWindows: false. Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. + CornerGripMorph + drawCornerResizeHandles: false; + passiveColor: (Color gray: 0.85); + activeColor: (Color r: 1 g: 0.599 b: 0.0). - CornerGripMorph drawCornerResizeHandles: false. ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; disable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 6. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From Marcel.Taeumel at hpi.de Sat Aug 13 08:06:30 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 08:06:45 2016 Subject: [squeak-dev] Re: Could we make list chooser resizable In-Reply-To: <1471074214750-4910855.post@n4.nabble.com> References: <1471068053733-4910833.post@n4.nabble.com> <1471074214750-4910855.post@n4.nabble.com> Message-ID: <1471075590964-4910869.post@n4.nabble.com> marcel.taeumel wrote > > Nicolas Cellier wrote >> Ah OK, >> I didn't even think of it. >> the inner border was not looking thick in attached png, maybe I'm not >> using >> the right theme. >> and also, it's rather unusual UI. >> >> >> 2016-08-13 8:00 GMT+02:00 marcel.taeumel < >> Marcel.Taeumel@ >> >: >> >>> Nicolas Cellier wrote >>> > Hi, >>> > the new list chooser is not bad, except that it should be resizable. >>> > It has sliders, OK, but I have space on screen and want to see more at >>> > once. >>> > For example, when I want to copy a MC version to another repository, >>> it's >>> > quite unusable. >>> > >>> > More over try to resize with halo: the halo for inner list appears >>> outside >>> > the Window Morph, and when we click outside guess what? Yeah popular >>> > preference, dismiss the window... >>> > >>> > Nicolas >>> > >>> > >>> > >>> > >>> > PluggableDialogWindow.png (19K) >>> > <http://forum.world.st/attachment/4910819/0/ >>> PluggableDialogWindow.png> >>> >>> Hi Nicolas, >>> >>> it *is* resizable. That's why that inner border is so big. Due to the >>> construction of dialogs, however, that "being resizable" behavior comes >>> from >>> the special contents of this dialog. Try to move your mouse to one of >>> the >>> corners of the inner list. >>> >>> Maybe we can make this more discoverable. >>> >>> Best, >>> Marcel >>> >>> P.S.: It's merely "growable" because if you try to shrink it again, some >>> specialties of our TableLayout kicks in. :-D >>> >>> >>> >>> -- >>> View this message in context: http://forum.world.st/Could- >>> we-make-list-chooser-resizable-tp4910819p4910833.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>> >>> > Yeah, it's a trade-off. Let me just colorize those handles... > > (It's not theme-releated.) > > Best, > Marcel Hi Nicolas, you should see them now: http://forum.world.st/The-Trunk-ToolBuilder-Morphic-mt-184-mcz-td4910867.html Best, Marcel -- View this message in context: http://forum.world.st/Could-we-make-list-chooser-resizable-tp4910819p4910869.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Aug 13 08:22:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 08:22:12 2016 Subject: [squeak-dev] The Trunk: System-mt.884.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.884.mcz ==================== Summary ==================== Name: System-mt.884 Author: mt Time: 13 August 2016, 10:21:45.116894 am UUID: 01c8c7a5-5baa-fa4c-99a4-6ae20e0b838b Ancestors: System-mt.883 Reverts a change that generated preference accessors into an *autogenerated category. This, however, will recategorize several accessors from 'standard queries' into that 'Autogenerated' package, occasionally. We do not want to risk losing getters needed by existing applications. =============== Diff against System-mt.883 =============== Item was changed: ----- Method: Preferences class>>compileAccessorForPreference: (in category 'private') ----- compileAccessorForPreference: aPreference "Compile an accessor method for the given preference" self class compileSilently: ( '{1} ^self valueOfFlag: {2} ifAbsent: [ {3} ]' format: { aPreference name asString. aPreference name asSymbol printString. + aPreference defaultValue storeString }) + classified: 'standard queries'! - aPreference defaultValue storeString }) - classified: '*autogenerated-standard queries'! From karlramberg at gmail.com Sat Aug 13 09:34:10 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sat Aug 13 09:34:13 2016 Subject: [squeak-dev] Image pops up quit dialog upon start Message-ID: When I start the image and click anywhere the quit dialog appears and I can not escape it. Squeak5.1beta-16395-64bit-r201608051639-Windows I quit the image by clicking the window close ( X ) button. If I delete the dialog with halo handle it will still pop up again on next click. Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160813/dcc4dc89/attachment.htm From commits at source.squeak.org Sat Aug 13 09:46:15 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 09:46:18 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-mt.183.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-mt.183.mcz ==================== Summary ==================== Name: MorphicExtras-mt.183 Author: mt Time: 13 August 2016, 11:46:01.701735 am UUID: 77716d2d-5f7e-7748-882b-ce302d86fbc5 Ancestors: MorphicExtras-mt.182 Due to popular request, theme the classic ProgressMorph and ProgressBarMorph according to the settings of the system progress bar. Note that we *do not* (yet) theme all morphs in 'MorphicExtras' but only the ones used for system tools. Those are in 'Morphic'. As for the ProgressMorph, you have to re-create it after you change a theme. For the future, we plan to refactor SystemProgressMorph, SystemProgressBarMorph, ProgressMorph, and ProgressBarMorph to have a common base class at least. Maybe also add a PluggableProgressMorph and integrate it into ToolBuilder (with specs). =============== Diff against MorphicExtras-mt.182 =============== Item was changed: ----- Method: ProgressBarMorph>>initialize (in category 'initialization') ----- initialize super initialize. + self setDefaultParameters. - progressColor := Color green. self value: (ValueHolder new contents: 0.0). lastValue := 0.0! Item was added: + ----- Method: ProgressBarMorph>>setDefaultParameters (in category 'initialization') ----- + setDefaultParameters + + self + borderColor: ((UserInterfaceTheme current get: #borderColor for: SystemProgressBarMorph) ifNil: [Color black]); + borderWidth: ((UserInterfaceTheme current get: #borderWidth for: SystemProgressBarMorph) ifNil: [2]); + color: ((UserInterfaceTheme current get: #color for: SystemProgressBarMorph) ifNil: [Color white]); + progressColor: ((UserInterfaceTheme current get: #barColor for: SystemProgressBarMorph) ifNil: [Color green]).! Item was changed: ----- Method: ProgressMorph>>initLabelMorph (in category 'initialization') ----- initLabelMorph + ^ labelMorph := (StringMorph contents: '') + font: ((UserInterfaceTheme current get: #font for: SystemProgressMorph) ifNil: [TextStyle defaultFont]); + color: ((UserInterfaceTheme current get: #textColor for: SystemProgressMorph) ifNil: [Color black]); + yourself! - ^ labelMorph := StringMorph contents: '' font: (self fontOfPointSize: 14)! Item was changed: ----- Method: ProgressMorph>>initProgressMorph (in category 'initialization') ----- initProgressMorph progress := ProgressBarMorph new. + progress borderColor: ((UserInterfaceTheme current get: #borderColor for: SystemProgressBarMorph) ifNil: [Color black]). + progress borderWidth: ((UserInterfaceTheme current get: #borderWidth for: SystemProgressBarMorph) ifNil: [1]). + progress color: ((UserInterfaceTheme current get: #color for: SystemProgressBarMorph) ifNil: [Color white]). + progress progressColor: ((UserInterfaceTheme current get: #barColor for: SystemProgressBarMorph) ifNil: [Color gray]). - progress borderWidth: 1. - progress color: Color white. - progress progressColor: Color gray. progress extent: 200 @ 15. ! Item was changed: ----- Method: ProgressMorph>>initSubLabelMorph (in category 'initialization') ----- initSubLabelMorph + ^ subLabelMorph := (StringMorph contents: '') + font: ((UserInterfaceTheme current get: #font for: PluggableButtonMorph) ifNil: [TextStyle defaultFont]); + color: ((UserInterfaceTheme current get: #textColor for: PluggableButtonMorph) ifNil: [Color black]); + yourself! - ^ subLabelMorph := StringMorph contents: '' font: (self fontOfPointSize: 12)! Item was changed: ----- Method: ProgressMorph>>setupMorphs (in category 'initialization') ----- setupMorphs | | self initProgressMorph. self layoutPolicy: TableLayout new; listDirection: #topToBottom; cellPositioning: #topCenter; listCentering: #center; hResizing: #shrinkWrap; vResizing: #shrinkWrap; color: Color transparent. self addMorphBack: self labelMorph. self addMorphBack: self subLabelMorph. self addMorphBack: self progress. + self borderWidth: ((UserInterfaceTheme current get: #borderWidth for: SystemProgressMorph) ifNil: [2]). + self borderColor: ((UserInterfaceTheme current get: #borderColor for: SystemProgressMorph) ifNil: [Color black]). - self borderWidth: 2. - self borderColor: Color black. + self color: ((UserInterfaceTheme current get: #color for: SystemProgressMorph) ifNil: [Color veryLightGray]). - self color: Color veryLightGray. self align: self fullBounds center with: Display boundingBox center ! From Marcel.Taeumel at hpi.de Sat Aug 13 09:54:25 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 09:54:41 2016 Subject: [squeak-dev] Re: Image pops up quit dialog upon start In-Reply-To: References: Message-ID: <1471082065453-4910886.post@n4.nabble.com> Karl Ramberg wrote > When I start the image and click anywhere the quit dialog appears and I > can > not escape it. > > Squeak5.1beta-16395-64bit-r201608051639-Windows > > I quit the image by clicking the window close ( X ) button. > > If I delete the dialog with halo handle it will still pop up again on next > click. > > Best, > Karl Hi Karl, I cannot reproduce that behavior on my Windows 10 machine (Version 1607). Note that all 64-bit builds are experimental for you to try out only. The underlying VMs might behave bogus, especially for Windows, this is the first attempt to have at least the StackVM (no JIT) working in 64-bit mode. Thanks Nicolas for this! While you might be more lucky on other platforms and experience no bugs at all, we will only release Squeak 5.1 in 32-bit as stable, while 64-bit will be experimental. We will update squeak.org accordingly. Best, Marcel -- View this message in context: http://forum.world.st/Image-pops-up-quit-dialog-upon-start-tp4910884p4910886.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Aug 13 11:04:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 11:04:36 2016 Subject: [squeak-dev] The Trunk: Collections-mt.710.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.710.mcz ==================== Summary ==================== Name: Collections-mt.710 Author: mt Time: 13 August 2016, 1:04:17.836735 pm UUID: dd858f23-f52e-0440-af76-9431683dd8e9 Ancestors: Collections-mt.709 To avoid code duplication, add a simple attribute check to texts (in addition to #unembellished). =============== Diff against Collections-mt.709 =============== Item was added: + ----- Method: Text>>hasClickableAttribute (in category 'testing') ----- + hasClickableAttribute + + ^ self runs anySatisfy: [:attrs | attrs anySatisfy: [:attr | + attr respondsTo: #mayActOnClick]]! Item was added: + ----- Method: Text>>hasColorAttribute (in category 'testing') ----- + hasColorAttribute + + ^ self runs anySatisfy: [:attrs | attrs anySatisfy: [:attr | + attr respondsTo: #color]]! Item was added: + ----- Method: Text>>hasFontAttribute (in category 'testing') ----- + hasFontAttribute + + ^ self runs anySatisfy: [:attrs | attrs anySatisfy: [:attr | + (attr respondsTo: #fontNumber) or: [attr respondsTo: #font]]]! Item was changed: + ----- Method: Text>>isText (in category 'testing') ----- - ----- Method: Text>>isText (in category 'comparing') ----- isText ^ true! Item was changed: + ----- Method: Text>>unembellished (in category 'testing') ----- - ----- Method: Text>>unembellished (in category 'attributes') ----- unembellished "Return true if the only emphases are the default font and bold" | font1 bold | font1 := TextFontChange defaultFontChange. bold := TextEmphasis bold. Text ignoreStyleIfOnlyBold ifFalse: ["Ignore font1 only or font1-bold followed by font1-plain" ^ (runs values = (Array with: (Array with: font1))) or: [runs values = (Array with: (Array with: font1 with: bold) with: (Array with: font1))]]. "If preference is set, then ignore any combo of font1 and bold" runs withStartStopAndValueDo: [:start :stop :emphArray | emphArray do: [:emph | (font1 = emph or: [bold = emph]) ifFalse: [^ false]]]. ^ true! From commits at source.squeak.org Sat Aug 13 11:06:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 11:06:21 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1273.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1273.mcz ==================== Summary ==================== Name: Morphic-mt.1273 Author: mt Time: 13 August 2016, 1:05:42.232735 pm UUID: a498c86a-0209-bc43-80d0-03a0fa6ec7d2 Ancestors: Morphic-mt.1272 Fixes a bug in new-style balloon morphs, which did not honor custom text attributes and the ballon-owner's balloon color. =============== Diff against Morphic-mt.1272 =============== Item was changed: ----- Method: NewBalloonMorph>>balloonOwner: (in category 'accessing') ----- balloonOwner: aMorph + balloonOwner == aMorph ifTrue: [^ self]. + balloonOwner := aMorph. + self updateColorsForBalloonOwner.! - balloonOwner := aMorph.! Item was changed: ----- Method: NewBalloonMorph>>setText: (in category 'initialization') ----- setText: stringOrText | text | text := stringOrText asText. + text hasColorAttribute ifFalse: [ - text unembellished ifTrue: [ text addAttribute: (TextColor color: (self userInterfaceTheme textColor ifNil: [Color black]))]. + text hasFontAttribute ifFalse: [ + text addAttribute: (TextFontReference toFont: (self userInterfaceTheme font ifNil: [TextStyle defaultFont]))]. - - text addAttribute: (TextFontReference toFont: (self userInterfaceTheme font ifNil: [TextStyle defaultFont])). self textMorph wrapFlag: false. self textMorph newContents: text. self textMorph fullBounds. (self maximumWidth > 0 and: [self textMorph width > self maximumWidth]) ifTrue: [ self textMorph wrapFlag: true; width: self maximumWidth]. self updateLayout.! Item was added: + ----- Method: NewBalloonMorph>>updateColorsForBalloonOwner (in category 'updating') ----- + updateColorsForBalloonOwner + + self color: self balloonOwner balloonColor. + + "If the balloon owner has a custom balloon color, derive the balloon border color from it." + self flag: #refactor. "mt: Add #balloonBorderColor *width etc. to Morph." + (self balloonOwner hasProperty: #balloonColor) + ifTrue: [self borderColor: (self color adjustBrightness: -0.2)].! From commits at source.squeak.org Sat Aug 13 11:07:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 11:07:16 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.73.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.73.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.73 Author: mt Time: 13 August 2016, 1:07:09.565735 pm UUID: 95e77d64-3b9f-4745-9257-da98ac0eb40f Ancestors: PreferenceBrowser-mt.72 Add balloon help to preference wizard. Reuse existing preference help texts as much as possible. Add custom ones where the negation of the preference made the existing help text look awkward. =============== Diff against PreferenceBrowser-mt.72 =============== Item was changed: ----- Method: PreferenceWizardMorph>>createCheckbox:for: (in category 'initialization') ----- createCheckbox: label for: selector + ^ self + createCheckbox: label + for: selector + help: #()! - | box lbl btn | - - btn := self createButton - label: ' '; - onColor: Color white offColor: (self defaultColor adjustBrightness: 0.3); - vResizing: #rigid; - hResizing: #rigid; - action: ('toggle', selector) asSymbol; - getStateSelector: ('state', selector) asSymbol; - extent: 25@25. - - lbl := self createLabel: label color: self defaultTextColor. - - box := Morph new - color: Color transparent; - changeTableLayout; - listDirection: #leftToRight; - cellPositioning: #topLeft; - hResizing: #spaceFill; - vResizing: #shrinkWrap; - cellInset: 10; - yourself. - - box addAllMorphs: {btn. lbl}. - ^ box! Item was added: + ----- Method: PreferenceWizardMorph>>createCheckbox:for:help: (in category 'initialization') ----- + createCheckbox: label for: selector help: terms + + | box lbl btn | + + btn := self createButton + label: ' '; + onColor: Color white offColor: (self defaultColor adjustBrightness: 0.3); + vResizing: #rigid; + hResizing: #rigid; + action: ('toggle', selector) asSymbol; + getStateSelector: ('state', selector) asSymbol; + extent: 25@25. + + lbl := self createLabel: label color: self defaultTextColor. + + box := Morph new + color: Color transparent; + changeTableLayout; + listDirection: #leftToRight; + cellPositioning: #topLeft; + hResizing: #spaceFill; + vResizing: #shrinkWrap; + cellInset: 10; + yourself. + + box addAllMorphs: {btn. lbl}. + self + setBalloonText: (terms isString ifTrue: [terms] ifFalse: [self findHelpStringFor: terms]) + for: box. + ^ box! Item was added: + ----- Method: PreferenceWizardMorph>>findHelpStringFor: (in category 'initialization') ----- + findHelpStringFor: someTerms + + someTerms ifEmpty: [^ '']. + + ^ Preferences allPreferences + detect:[:pref | someTerms allSatisfy: [:term| pref name includesSubstring: term caseSensitive: false]] + ifFound: [:pref | (pref helpString lines joinSeparatedBy: ' ') withBlanksTrimmed] + ifNone: ['']! Item was changed: ----- Method: PreferenceWizardMorph>>initializeControlMorph (in category 'initialization') ----- initializeControlMorph controlMorph := Morph new color: Color transparent; changeTableLayout; listDirection: #topToBottom; hResizing: #spaceFill; vResizing: #spaceFill; layoutInset: (0@0 corner: 10@0); layoutFrame: (LayoutFrame fractions: (0.0 @ 0 corner: 0.3 @ 1.0) offsets: (0@ titleMorph height corner: 0 @ buttonRowMorph height negated)); yourself. + controlMorph addMorph: (self createLabel: 'Please take a few minutes and configure the look-and-feel of the environment. You can always adjust these settings later. You can see the effects of these settings in the live and editable windows to the right.' translated).! - controlMorph addMorph: (self createLabel: 'Please take a few minutes and configure the look-and-feel of the environment. You can adjust these settings later if you like.\\You can try out the current settings in the right area.' withCRs).! Item was changed: ----- Method: PreferenceWizardMorph>>initializePage02Visuals (in category 'initialization') ----- initializePage02Visuals | currentPage | currentPage := pages add: self createPage. currentPage addMorphBack: (self createLabel: 'Choose visual settings' color: Color white). currentPage addAllMorphsBack: { + self createCheckbox: 'Colorful windows' translated for: #UseColorfulWindows help: #(color window). + self createCheckbox: 'Flat widget look' translated for: #Gradients help: 'Whether to use gradients or not.' translated. - self createCheckbox: 'Colorful windows' translated for: #UseColorfulWindows. - self createCheckbox: 'Flat widget look' translated for: #Gradients. self createVerticalSpace. + self createCheckbox: 'Rounded windows' translated for: #RoundedWindowLook help: #(round window). + self createCheckbox: 'Rounded buttons' translated for: #RoundedButtonLook help: #(round button). - self createCheckbox: 'Rounded windows' translated for: #RoundedWindowLook. - self createCheckbox: 'Rounded buttons' translated for: #RoundedButtonLook. self createVerticalSpace. + self createCheckbox: 'Soft shadows' translated for: #SoftShadows help: #(soft shadow). + self createCheckbox: 'Hard shadows' translated for: #HardShadows help: 'Whether to use a hard shadow for windows, menus, and dialogs.' translated. - self createCheckbox: 'Soft shadows' translated for: #SoftShadows. - self createCheckbox: 'Hard shadows' translated for: #HardShadows. self createVerticalSpace. + self createCheckbox: 'Fast drag and resize' translated for: #FastDrag help: #(fast drag). + self createCheckbox: 'Blinking text cursor' translated for: #BlinkingCursor help: #(blinking cursor). + self createCheckbox: 'Show keyboard focus' translated for: #ShowKeyboardFocus help: #(keyboard indicate). + self createCheckbox: 'Simple edit indication' translated for: #SimpleFrameAdornments help: #(adornment simple). - self createCheckbox: 'Fast drag and resize' translated for: #FastDrag. - self createCheckbox: 'Blinking text cursor' translated for: #BlinkingCursor. - self createCheckbox: 'Show keyboard focus' translated for: #ShowKeyboardFocus. - self createCheckbox: 'Simple edit indication' translated for: #SimpleFrameAdornments. }. currentPage addMorphBack: self createVerticalSpacer. ! Item was changed: ----- Method: PreferenceWizardMorph>>initializePage03Interaction (in category 'initialization') ----- initializePage03Interaction | currentPage | currentPage := pages add: self createPage. currentPage addMorphBack: (self createLabel: 'Choose interaction settings' color: Color white). currentPage addAllMorphsBack: { + self createCheckbox: 'Swap mouse buttons' translated for: #SwapMouseButtons help: #(swap mouse). + self createCheckbox: 'Focus follows mouse' translated for: #FocusFollowsMouse help: #(mouse over keyboard). + self createCheckbox: 'Mouse wheel to focus' translated for: #SendMouseWheelToKeyboardFocus help: #(wheel keyboard). - self createCheckbox: 'Swap mouse buttons' translated for: #SwapMouseButtons. - self createCheckbox: 'Focus follows mouse' translated for: #FocusFollowsMouse. - self createCheckbox: 'Mouse wheel to focus' translated for: #SendMouseWheelToKeyboardFocus. self createVerticalSpace. + self createCheckbox: 'Auto enclose brackets' translated for: #AutoEnclose help: #(auto enclose). + self createCheckbox: 'Auto indent lines' translated for: #AutoIndent help: #(auto indent). + self createCheckbox: 'Enclose text selections' translated for: #EncloseSelection help: #(enclose selection). - self createCheckbox: 'Auto enclose brackets' translated for: #AutoEnclose. - self createCheckbox: 'Auto indent lines' translated for: #AutoIndent. - self createCheckbox: 'Enclose text selections' translated for: #EncloseSelection. self createVerticalSpace. + self createCheckbox: 'Arrows in scrollbar' translated for: #ScrollBarsWithoutArrowButtons help: 'Whether to show arrows for scrolling or not.' translated. + self createCheckbox: 'Menu in scrollbar' translated for: #ScrollBarsWithoutMenuButton help: 'Whether to show a menu button or not.' translated. + self createCheckbox: 'Scrollbars on the right' translated for: #ScrollBarsOnRight help: #(right scroll). + self createCheckbox: 'Retractable scrollbars' translated for: #UseRetractableScrollBars help: #(retractable). + self createCheckbox: 'Narrow scrollbars' translated for: #ScrollBarsNarrow help: #(narrow scroll). - self createCheckbox: 'Arrows in scrollbar' translated for: #ScrollBarsWithoutArrowButtons. - self createCheckbox: 'Menu in scrollbar' translated for: #ScrollBarsWithoutMenuButton. - self createCheckbox: 'Scrollbars on the right' translated for: #ScrollBarsOnRight. - self createCheckbox: 'Retractable scrollbars' translated for: #UseRetractableScrollBars. - self createCheckbox: 'Narrow scrollbars' translated for: #ScrollBarsNarrow. }. currentPage addMorphBack: self createVerticalSpacer. ! Item was changed: ----- Method: PreferenceWizardMorph>>initializePage04InteractionMore (in category 'initialization') ----- initializePage04InteractionMore | currentPage | currentPage := pages add: self createPage. currentPage addMorphBack: (self createLabel: 'Choose more interaction settings' color: Color white). currentPage addAllMorphsBack: { + self createCheckbox: 'Windows raise on click' translated for: #WindowsRaiseOnClick help: #(window raise). + self createCheckbox: 'Windows always active' for: #WindowsAlwaysActive help: #(window content active). + self createCheckbox: 'Window buttons always active' translated for: #WindowButtonsAlwaysActive help: #(window control active). - self createCheckbox: 'Windows raise on click' translated for: #WindowsRaiseOnClick. - self createCheckbox: 'Windows always active' for: #WindowsAlwaysActive. - self createCheckbox: 'Window buttons always active' translated for: #WindowButtonsAlwaysActive. self createVerticalSpace. + self createCheckbox: 'Smart horizontal splitters' translated for: #SmartHorizontalSplitters help: #(horizontal splitter). + self createCheckbox: 'Smart vertical splitters' translated for: #SmartVerticalSplitters help: #(vertical splitter). - self createCheckbox: 'Smart horizontal splitters' translated for: #SmartHorizontalSplitters. - self createCheckbox: 'Smart vertical splitters' translated for: #SmartVerticalSplitters. self createVerticalSpace. + self createCheckbox: 'Filterable lists and trees' translated for: #FilterableLists help: #(filterable). + self createCheckbox: 'Filters clear if unfocused' translated for: #ClearFilterAutomatically help: #(filter clear). - self createCheckbox: 'Filterable lists and trees' translated for: #FilterableLists. - self createCheckbox: 'Filters clear if unfocused' translated for: #ClearFilterAutomatically. self createVerticalSpace. + self createCheckbox: 'Attach tools to mouse' translated for: #AttachToolsToMouse help: #(tools attach). - self createCheckbox: 'Attach tools to mouse' translated for: #AttachToolsToMouse. }. currentPage addMorphBack: self createVerticalSpacer. ! Item was changed: ----- Method: PreferenceWizardMorph>>initializePage05Tools (in category 'initialization') ----- initializePage05Tools | currentPage | currentPage := pages add: self createPage. currentPage addMorphBack: (self createLabel: 'Choose other settings' color: Color white). currentPage addAllMorphsBack: { + self createCheckbox: 'Trace messages browser' translated for: #TraceMessages help: #(trace message). + self createCheckbox: 'Reuse tool windows' translated for: #ReuseWindows help: #(window reuse). + self createCheckbox: 'Tool and menu icons' translated for: #ToolAndMenuIcons help: 'Whether to show icons in tools and menus.' translated. - self createCheckbox: 'Trace messages browser' translated for: #TraceMessages. - self createCheckbox: 'Reuse tool windows' translated for: #ReuseWindows. - self createCheckbox: 'Tool and menu icons' translated for: #ToolAndMenuIcons. }. currentPage addMorphBack: self createVerticalSpacer. ! Item was added: + ----- Method: PreferenceWizardMorph>>setBalloonText:for: (in category 'initialization') ----- + setBalloonText: string for: morph + + morph + balloonColor: ((self defaultColor alpha: self color alpha) adjustBrightness: 0.2); + balloonText: (string asText + addAttribute: (TextFontReference toFont: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9)); + addAttribute: (TextColor color: Color banana)).! From commits at source.squeak.org Sat Aug 13 11:38:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 11:38:46 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1274.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1274.mcz ==================== Summary ==================== Name: Morphic-mt.1274 Author: mt Time: 13 August 2016, 1:38:02.926735 pm UUID: 16e0b9e2-ca0a-5443-a4b5-2953bc5935ad Ancestors: Morphic-mt.1273 Fix the bug where new windows were occluded by the ones that provided the pop-up menu for a certain action. For example, right click on a text selection, invoking the menu, debug it. =============== Diff against Morphic-mt.1273 =============== Item was removed: - ----- Method: PluggableTextMorph>>yellowButtonActivity: (in category 'menu commands') ----- - yellowButtonActivity: shiftKeyState - "Called when the shifted-menu's 'more' item is chosen" - | menu | - (menu := self getMenu: shiftKeyState) - ifNotNil: ["" - menu setInvokingView: self. - menu invokeModal]! Item was changed: ----- Method: TextMorph>>yellowButtonActivity: (in category 'event handling') ----- yellowButtonActivity: shiftKeyState "Invoke the text-editing menu" | menu | (menu := self getMenu: shiftKeyState) ifNotNil: ["" menu setInvokingView: self editor. + self flag: #refactor. "mt: This should work non-modally..." menu invokeModal. self changed]! From Marcel.Taeumel at hpi.de Sat Aug 13 11:41:25 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 11:41:42 2016 Subject: [squeak-dev] Re: Windows opening in background In-Reply-To: <1470939783308-4910577.post@n4.nabble.com> References: <1470939783308-4910577.post@n4.nabble.com> Message-ID: <1471088485133-4910899.post@n4.nabble.com> marcel.taeumel wrote > > Nicolas Cellier wrote >> It often happens that a window opens behind the currently active one. >> Typically, I want to 'debug it' on a subexpression in the debugger. >> The second debugger opens in background, or does it go into background >> after opening? >> Anyway, it's sufficiently fast that I got no feedback for my action until >> I >> minimize or move the original debugger. >> >> With respect to my own workflow, this is sufficiently annoying to call >> that >> a regression. >> Is it just me? >> >> Nicolas > Hi Nicolas, > > this happens when you "debug it" via the context menu, right? It should > not happen when you press CMD+SHIFT+D. > > Best, > Marcel Hi Nicolas, fixed: http://forum.world.st/The-Trunk-Morphic-mt-1274-mcz-td4910898.html Best, Marcel -- View this message in context: http://forum.world.st/Windows-opening-in-background-tp4910565p4910899.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Aug 13 11:54:05 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 11:54:07 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1275.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1275.mcz ==================== Summary ==================== Name: Morphic-mt.1275 Author: mt Time: 13 August 2016, 1:53:31.042735 pm UUID: a619070a-afa4-844f-b11f-27b54d59c771 Ancestors: Morphic-mt.1274 Due to the previous fix, restore the original keyboard focus again when dismissing the pop-up menu. =============== Diff against Morphic-mt.1274 =============== Item was changed: Morph subclass: #MenuMorph + instanceVariableNames: 'defaultTarget selectedItem stayUp popUpOwner activeSubMenu originalFocusHolder' - instanceVariableNames: 'defaultTarget selectedItem stayUp popUpOwner activeSubMenu' classVariableNames: 'CloseBoxImage CloseBoxImageFlat CloseBoxImageGradient GradientMenu MenuBorderColor MenuBorderWidth MenuColor MenuLineColor MenuSelectionColor MenuTitleBorderColor MenuTitleBorderWidth MenuTitleColor PushPinImage RoundedMenuCorners' poolDictionaries: '' category: 'Morphic-Menus'! !MenuMorph commentStamp: '' prior: 0! Instance variables: defaultTarget The default target for creating menu items selectedItem The currently selected item in the receiver stayUp True if the receiver should stay up after clicks popUpOwner The menu item that automatically invoked the receiver, if any. activeSubMenu The currently active submenu.! Item was changed: ----- Method: MenuMorph>>deactivate: (in category 'events') ----- deactivate: evt "If a stand-alone menu, just delete it" popUpOwner ifNil: [ + self deleteIfPopUp: evt. - self delete. ^true ]. "If a sub-menu, then deselect, and return focus to outer menu" self selectItem: nil event: evt. evt hand newMouseFocus: popUpOwner owner. evt hand newKeyboardFocus: popUpOwner owner! Item was changed: ----- Method: MenuMorph>>deleteIfPopUp: (in category 'control') ----- deleteIfPopUp: evt "Remove this menu from the screen if stayUp is not true. If it is a submenu, also remove its owning menu." stayUp ifFalse: [self topRendererOrSelf delete]. (popUpOwner notNil) ifTrue: [ popUpOwner isSelected: false. popUpOwner deleteIfPopUp: evt]. + evt ifNotNil: [ + evt hand releaseMouseFocus: self. + originalFocusHolder ifNotNil: [ + evt hand newKeyboardFocus: originalFocusHolder. + originalFocusHolder := nil]].! - evt ifNotNil:[evt hand releaseMouseFocus: self].! Item was changed: ----- Method: MenuMorph>>popUpAt:forHand:in:allowKeyboard: (in category 'control') ----- popUpAt: aPoint forHand: hand in: aWorld allowKeyboard: aBoolean "Present this menu at the given point under control of the given hand." | evt | aWorld submorphs select: [:each | (each isKindOf: MenuMorph) and: [each stayUp not]] thenCollect: [:menu | menu delete]. self items isEmpty ifTrue: [^ self]. MenuIcons decorateMenu: self. (self submorphs select: [:m | m isKindOf: UpdatingMenuItemMorph]) do: [:m | m updateContents]. "precompute width" self positionAt: aPoint relativeTo: (selectedItem ifNil: [self items first]) inWorld: aWorld. aWorld addMorphFront: self. "Acquire focus for valid pop up behavior" hand newMouseFocus: self. aBoolean + ifTrue: [ + originalFocusHolder := hand keyboardFocus. + hand newKeyboardFocus: self. - ifTrue: [hand newKeyboardFocus: self. self showKeyboardHelp]. evt := hand lastEvent. (evt isKeyboard or: [evt isMouse and: [evt anyButtonPressed not]]) ifTrue: ["Select first item if button not down" self moveSelectionDown: 1 event: evt "Select first item if button not down"]. self updateColor. self changed! Item was changed: ----- Method: MenuMorph>>stayUp: (in category 'accessing') ----- stayUp: aBoolean stayUp := aBoolean. + aBoolean ifTrue: [ self removeStayUpBox ]. + originalFocusHolder := nil. "Not needed anymore."! - aBoolean ifTrue: [ self removeStayUpBox ].! From nicolas.cellier.aka.nice at gmail.com Sat Aug 13 12:12:11 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Sat Aug 13 12:12:28 2016 Subject: [squeak-dev] Re: Windows opening in background In-Reply-To: <1471088485133-4910899.post@n4.nabble.com> References: <1470939783308-4910577.post@n4.nabble.com> <1471088485133-4910899.post@n4.nabble.com> Message-ID: thanks! I just wonder out of where you found the fix, it does not seem at all obvious to me. 2016-08-13 13:41 GMT+02:00 marcel.taeumel : > marcel.taeumel wrote > > > > Nicolas Cellier wrote > >> It often happens that a window opens behind the currently active one. > >> Typically, I want to 'debug it' on a subexpression in the debugger. > >> The second debugger opens in background, or does it go into background > >> after opening? > >> Anyway, it's sufficiently fast that I got no feedback for my action > until > >> I > >> minimize or move the original debugger. > >> > >> With respect to my own workflow, this is sufficiently annoying to call > >> that > >> a regression. > >> Is it just me? > >> > >> Nicolas > > Hi Nicolas, > > > > this happens when you "debug it" via the context menu, right? It should > > not happen when you press CMD+SHIFT+D. > > > > Best, > > Marcel > > Hi Nicolas, > > fixed: http://forum.world.st/The-Trunk-Morphic-mt-1274-mcz-td4910898.html > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Windows- > opening-in-background-tp4910565p4910899.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160813/167dae5c/attachment.htm From Marcel.Taeumel at hpi.de Sat Aug 13 12:36:38 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 12:36:55 2016 Subject: [squeak-dev] Re: Windows opening in background In-Reply-To: References: <1470939783308-4910577.post@n4.nabble.com> <1471088485133-4910899.post@n4.nabble.com> Message-ID: <1471091798751-4910906.post@n4.nabble.com> Nicolas Cellier wrote > thanks! > I just wonder out of where you found the fix, it does not seem at all > obvious to me. > > 2016-08-13 13:41 GMT+02:00 marcel.taeumel < > Marcel.Taeumel@ > >: > >> marcel.taeumel wrote >> > >> > Nicolas Cellier wrote >> >> It often happens that a window opens behind the currently active one. >> >> Typically, I want to 'debug it' on a subexpression in the debugger. >> >> The second debugger opens in background, or does it go into background >> >> after opening? >> >> Anyway, it's sufficiently fast that I got no feedback for my action >> until >> >> I >> >> minimize or move the original debugger. >> >> >> >> With respect to my own workflow, this is sufficiently annoying to call >> >> that >> >> a regression. >> >> Is it just me? >> >> >> >> Nicolas >> > Hi Nicolas, >> > >> > this happens when you "debug it" via the context menu, right? It should >> > not happen when you press CMD+SHIFT+D. >> > >> > Best, >> > Marcel >> >> Hi Nicolas, >> >> fixed: http://forum.world.st/The-Trunk-Morphic-mt-1274-mcz-td4910898.html >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Windows- >> opening-in-background-tp4910565p4910899.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Hi Nicolas, this is how I did it: (1) There is a window coming to front, so put "self haltOnce" in SystemWindow >> #comeToFront. (2) Specialize that breakpoint with "if you are a workspace and the current top window is a message set" like around a workspace where I used the menu to open "implementors" on some text selection. (3) The stack showed me that there is event bubbling going on after the menu dismissed, which surprised me because my mental model of pop-up menus in Morphic is state-based not function-based (i.e. spinning on the stack). (4) Then I found that #yellowButtonActivity: does this functional spinning for pluggable text morphs where any other scroll pane (e.g. pluggable list morphs) do it state-based. This most tricky part was to interpret the stack of the debugger and it required much knowledge about the event dispatching mechanism in Morphic, which I worked on a lot in the past months. In the end, I agree with Bert's argument that function-based spinning (i.e. modal invocation) from the old MVC days is not appropriate for Morphic because it causes many sorts of bugs, which are hard to debug. Morphic's tools and halos work better with state-based challenges/bugs. :-) For later, I also flagged TextMorph >> #yellowButtonActivity: because I have no idea how this code gets called at all. Their senders might rely on having a function-based invocation of menu. Best, Marcel -- View this message in context: http://forum.world.st/Windows-opening-in-background-tp4910565p4910906.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Aug 13 13:11:33 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 13:11:49 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471069252501-4910837.post@n4.nabble.com> References: <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> Message-ID: <1471093893291-4910908.post@n4.nabble.com> marcel.taeumel wrote > > tim Rowledge wrote >>> On 12-08-2016, at 1:49 PM, Chris Muller < >> asqueaker@ >> > wrote: >>> >>>>> And if I manually try `PreferenceWizardMorph new openInWorld` I see >>>>> the entire thing, and on choosing ?configure it looks as if the >>>>> default window size is too small to fit the config options in. I >>>>> needed to make it quite a bit bigger to lay out correctly. >>>> >>>> And why the multiple 1 second delays? It makes it appear as if Squeak >>>> is really slow, which probably wasn?t the intention. >>> >>> I was just thinking how innovative the little pauses were. A UI tool >>> to delineate and direct the users eyes to the sequence of elements to >>> look at. >>> >>> The delays feel intentional, as if it was designed for a refined human >>> consumption experience. It feels relaxed, not a strained feel as if >>> Squeak were >>> struggling to keep up because it were slow. >> >> If we were fading in/out smoothly - which usually requires some >> exponential rate of change with acceleration and decceleration - I?d >> likely agree. And of course, I?m testing this out on a box that is maybe >> 10% of your machine?s performance. >> >> tim >> -- >> tim Rowledge; >> tim@ >> ; http://www.rowledge.org/tim >> Strange OpCodes: IO: Illogical Or > We had a little hick-up with that one build, here is what it looks like > with > http://files.squeak.org/5.1beta/Squeak5.1beta-16395-32bit-r3397-All-in-One.zip > > Best, > Marcel Hi, there. Sorry, due to a small mistake from our side, all previous Squeak5.1beta bundles are gone for good. :-( We will provide new bundles as fast as possible. Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910908.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Aug 13 14:20:08 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 13 14:20:24 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471093893291-4910908.post@n4.nabble.com> References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> Message-ID: <1471098008117-4910909.post@n4.nabble.com> Hi there, here are new builds: http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ Note that the VM version in the file name is true for 32-bit but not so true for 64-bit because the 64-bit Windows VM is different but the version comes from the macOS VM, which is used to update the image. Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Aug 13 16:00:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 16:00:05 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.154.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.154.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.154 Author: mt Time: 13 August 2016, 5:59:57.676324 pm UUID: a87e47ea-bd78-3d41-9f1c-a5a4ca1f714d Ancestors: ReleaseBuilder-mt.153 Increase the default rounded corner radius from 6 to 8 to look better. Note that we need to improve the corner rounding in the Balloon plugin for numbers smaller than 8. Always hide horizontal scroll bar to increase usable area in lists. Multi-line text fields wrap anyway. Preference can be re-enabled if needed. =============== Diff against ReleaseBuilder-mt.153 =============== Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. ToolBuilder openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; encloseSelection: false ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. Model windowActiveOnFirstClick: false. "Not good for little screen real estate." Model useColorfulWindows: false. Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false; passiveColor: (Color gray: 0.85); activeColor: (Color r: 1 g: 0.599 b: 0.0). ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; + enable: #alwaysHideHScrollbar; - disable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." + Morph preferredCornerRadius: 8. - Morph preferredCornerRadius: 6. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From commits at source.squeak.org Sat Aug 13 16:46:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 16:46:28 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1276.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1276.mcz ==================== Summary ==================== Name: Morphic-mt.1276 Author: mt Time: 13 August 2016, 6:45:52.669628 pm UUID: e5626038-7071-954f-a49e-76ff67cee78a Ancestors: Morphic-mt.1275 Makes project labels in nested projects have the correct font and color. Fix look of docking bar when entering nested projects. =============== Diff against Morphic-mt.1275 =============== Item was changed: ----- Method: TheWorldMainDockingBar>>createDockingBar (in category 'construction') ----- createDockingBar "Create a docking bar from the receiver's representation" | dockingBar | dockingBar := DockingBarMorph new adhereToTop; - color: MenuMorph menuColor; - autoGradient: MenuMorph gradientMenu; borderWidth: 0. self fillDockingBar: dockingBar. self labelIfNeeded: dockingBar. ^ dockingBar! Item was changed: ----- Method: TheWorldMainDockingBar>>projectNameOn: (in category 'right side') ----- projectNameOn: aDockingBar | morph | morph := StringMorph contents: ''. + morph + color: (self userInterfaceTheme textColor ifNil: [Color black]); + font: (self userInterfaceTheme font ifNil: [TextStyle defaultFont]). morph setProperty: #projectNameMorph toValue: #projectNameMorph. aDockingBar addMorphBack: morph. self labelIfNeeded: aDockingBar! From commits at source.squeak.org Sat Aug 13 19:28:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 19:28:39 2016 Subject: [squeak-dev] The Trunk: Network-ul.182.mcz Message-ID: Levente Uzonyi uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-ul.182.mcz ==================== Summary ==================== Name: Network-ul.182 Author: ul Time: 13 August 2016, 9:27:46.042121 pm UUID: 55cbd441-e7a5-4651-a45f-45e6e94e47aa Ancestors: Network-ul.180 Socket: - use #isConnected instead of #isThisEndConnected and #isOtherEndConnected while the VMs don't fully support half-open connections SocketStream: - do not recreate the buffers in #resetBuffers when nothing would change =============== Diff against Network-ul.180 =============== Item was changed: ----- Method: Socket>>closeAndDestroy: (in category 'connection open/close') ----- closeAndDestroy: timeoutSeconds "First, try to close this connection gracefully. If the close attempt fails or times out, abort the connection. In either case, destroy the socket. Do nothing if the socket has already been destroyed (i.e., if its socketHandle is nil)." socketHandle ifNil: [ ^self ]. + self isConnected ifTrue: [ - self isThisEndConnected ifTrue: [ self close. "Close this end." ]. (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ "The other end has not closed the connect yet, so we will just abort it." self primSocketAbortConnection: socketHandle ]. self destroy! Item was changed: ----- Method: Socket>>discardReceivedData (in category 'receiving') ----- discardReceivedData "Discard any data received up until now, and return the number of bytes discarded." | buf totalBytesDiscarded | buf := String new: 10000. totalBytesDiscarded := 0. + [self isConnected and: [self dataAvailable]] whileTrue: [ - [self isOtherEndConnected and: [self dataAvailable]] whileTrue: [ totalBytesDiscarded := totalBytesDiscarded + (self receiveDataInto: buf)]. ^ totalBytesDiscarded ! Item was changed: ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category 'waiting') ----- waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock "Wait for the given nr of seconds for data to arrive." | deadline timeLeft | socketHandle ifNil: [ ^closedBlock value ]. deadline := Time millisecondClockValue + (timeout * 1000) truncated. [ (self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ]. + self isConnected ifFalse: [ ^closedBlock value ]. - self isOtherEndConnected ifFalse: [ ^closedBlock value ]. (timeLeft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^timedOutBlock value ]. "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." readSemaphore waitTimeoutMSecs: (timeLeft min: self class maximumReadSemaphoreWaitTimeout) ] repeat! Item was changed: ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') ----- waitForDataIfClosed: closedBlock "Wait indefinitely for data to arrive. This method will block until data is available or the socket is closed." socketHandle ifNil: [ ^closedBlock value ]. [ (self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ]. + self isConnected ifFalse: [ ^closedBlock value ]. - self isOtherEndConnected ifFalse: [ ^closedBlock value ]. "ul 8/13/2014 21:16 Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Replace the ""waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout"" part with ""wait"" when the bug is fixed." readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout ] repeat! Item was changed: ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting') ----- waitForDisconnectionFor: timeout "Wait for the given nr of seconds for the connection to be broken. Return true if it is broken by the deadline, false if not. The client should know the connection is really going to be closed (e.g., because he has called 'close' to send a close request to the other end) before calling this method." | deadline | deadline := Time millisecondClockValue + (timeout * 1000) truncated. + [ self isConnected and: [ deadline - Time millisecondClockValue > 0 ] ] - [ self isOtherEndConnected and: [ deadline - Time millisecondClockValue > 0 ] ] whileTrue: [ self discardReceivedData. "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." readSemaphore waitTimeoutMSecs: (deadline - Time millisecondClockValue min: self class maximumReadSemaphoreWaitTimeout) ]. + ^self isConnected! - ^self isOtherEndConnected! Item was changed: ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') ----- waitForSendDoneFor: timeout "Wait up until the given deadline for the current send operation to complete. Return true if it completes by the deadline, false if not." | deadline timeleft | deadline := Time millisecondClockValue + (timeout * 1000) truncated. [ (self primSocketSendDone: socketHandle) ifTrue: [ ^true ]. + self isConnected ifFalse: [ ^false ]. - self isThisEndConnected ifFalse: [ ^false ]. (timeleft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^false ]. writeSemaphore waitTimeoutMSecs: timeleft ] repeat! Item was changed: ----- Method: SocketStream>>resetBuffers (in category 'private') ----- resetBuffers "Recreate the buffers with default start sizes." + (inBuffer isNil or: [ inBuffer size ~= bufferSize ]) ifTrue: [ + inBuffer := self streamBuffer: bufferSize ]. - inBuffer := self streamBuffer: bufferSize. lastRead := 0. inNextToWrite := 1. + (outBuffer isNil or: [ outBuffer size ~= bufferSize ]) ifTrue: [ + outBuffer := self streamBuffer: bufferSize ]. - outBuffer := self streamBuffer: bufferSize. outNextToWrite := 1! From commits at source.squeak.org Sat Aug 13 20:25:05 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 20:25:07 2016 Subject: [squeak-dev] The Trunk: System-cmm.885.mcz Message-ID: Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.885.mcz ==================== Summary ==================== Name: System-cmm.885 Author: cmm Time: 13 August 2016, 3:24:30.956748 pm UUID: 15a3a5a3-dad4-4dfd-bdb5-f8eb77d2ba3e Ancestors: System-mt.884 Theme setting the regular ProgressMorph, thanks Chris Cunningham, and a final tweaks for better visibility of "print it" output (which renders as #dbInvalid when syntax-highlighting is on). =============== Diff against System-mt.884 =============== Item was added: + ----- Method: CommunityTheme class>>addDarkProgressMorph: (in category 'instance creation') ----- + addDarkProgressMorph: aUserInterfaceTheme + "self createDark apply." + aUserInterfaceTheme + set: #borderColor for: #ProgressMorph to: Color lightGray ; + set: #color for: #ProgressMorph to: Color black . + ! Item was changed: ----- Method: CommunityTheme class>>addDarkScrollables: (in category 'instance creation') ----- addDarkScrollables: aUserInterfaceTheme "self createDark apply." "Scroll bars" aUserInterfaceTheme set: #thumbColor for: #ScrollBar to: self dbGray; set: #thumbBorderColor for: #ScrollBar to: self dbGray twiceDarker. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." aUserInterfaceTheme set: #borderColor for: #ScrollPane to: (Color transparent) ; "So the search box isn't outlined." set: #color for: #ScrollPane to: self dbBackground. "List widgets" aUserInterfaceTheme set: #textColor for: #PluggableListMorph to: (Color gray: 0.9); set: #selectionColor for: #PluggableListMorph to: self dbSelection; set: #selectionTextColor for: #PluggableListMorph to: Color white ; derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c twiceDarker]; set: #filterColor for: #PluggableListMorph to: (self dbYellow alpha: 0.4); derive: #filterTextColor for: #PluggableListMorph from: #PluggableListMorph at: #textColor ; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker ] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c twiceDarker alpha: 0.5 ] ]. "Tree widgets" aUserInterfaceTheme set: #highlightTextColor for: #SimpleHierarchicalListMorph to: self dbYellow lighter lighter; set: #lineColor for: #SimpleHierarchicalListMorph to: Color gray. "Text widgets" aUserInterfaceTheme set: #textColor for: #PluggableTextMorph to: (Color gray: 0.9); set: #caretColor for: #PluggableTextMorph to: Color orange darker; + set: #selectionColor for: #PluggableTextMorph to: (self dbSelection duller duller); - set: #selectionColor for: #PluggableTextMorph to: (self dbSelection darker duller); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | c duller] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: self dbPurple; set: #adornmentRefuse for: #PluggableTextMorph to: self dbBlue; set: #adornmentConflict for: #PluggableTextMorph to: self dbRed; set: #adornmentDiff for: #PluggableTextMorph to: self dbGreen; set: #adornmentNormalEdit for: #PluggableTextMorph to: self dbOrange; set: #adornmentDiffEdit for: #PluggableTextMorph to: self dbYellow; set: #frameAdornmentWidth for: #PluggableTextMorph to: 2. aUserInterfaceTheme set: #balloonTextColor for: #PluggableTextMorphPlus to: Color lightGray! Item was changed: ----- Method: CommunityTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. "General morph stuff." theme set: #borderColor for: #ScrollPane to: (Color transparent) ; set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.3 brightness: 0.10); set: #keyboardFocusWidth for: #Morph to: 2; set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.025); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #hardShadowOffset for: #Morph to: 1@1. self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; + addDarkMenusAndDockingBars: theme; + addDarkProgressMorph: theme. - addDarkMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: CommunityTheme class>>dbInvalid (in category 'colors by purpose') ----- dbInvalid "Purposefully bright, so that it conflicts with the rest of the palette, visually indicative of a problem." + ^ Color magenta twiceLighter! - ^ Color magenta twiceDarker! From asqueaker at gmail.com Sat Aug 13 20:46:39 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sat Aug 13 20:47:23 2016 Subject: [squeak-dev] The Trunk: Network-ul.182.mcz In-Reply-To: <57af74ea.d7a8370a.c9fd9.5448SMTPIN_ADDED_MISSING@mx.google.com> References: <57af74ea.d7a8370a.c9fd9.5448SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: This relieves a lot of pressure on the "Magma for Squeak 5.1" release. Very much appreciated, thanks Levente. Best, Chris On Sat, Aug 13, 2016 at 2:28 PM, wrote: > Levente Uzonyi uploaded a new version of Network to project The Trunk: > http://source.squeak.org/trunk/Network-ul.182.mcz > > ==================== Summary ==================== > > Name: Network-ul.182 > Author: ul > Time: 13 August 2016, 9:27:46.042121 pm > UUID: 55cbd441-e7a5-4651-a45f-45e6e94e47aa > Ancestors: Network-ul.180 > > Socket: > - use #isConnected instead of #isThisEndConnected and #isOtherEndConnected while the VMs don't fully support half-open connections > SocketStream: > - do not recreate the buffers in #resetBuffers when nothing would change > > =============== Diff against Network-ul.180 =============== > > Item was changed: > ----- Method: Socket>>closeAndDestroy: (in category 'connection open/close') ----- > closeAndDestroy: timeoutSeconds > "First, try to close this connection gracefully. If the close attempt fails or times out, abort the connection. In either case, destroy the socket. Do nothing if the socket has already been destroyed (i.e., if its socketHandle is nil)." > > socketHandle ifNil: [ ^self ]. > + self isConnected ifTrue: [ > - self isThisEndConnected ifTrue: [ > self close. "Close this end." ]. > (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ > "The other end has not closed the connect yet, so we will just abort it." > self primSocketAbortConnection: socketHandle ]. > self destroy! > > Item was changed: > ----- Method: Socket>>discardReceivedData (in category 'receiving') ----- > discardReceivedData > "Discard any data received up until now, and return the number of bytes discarded." > > | buf totalBytesDiscarded | > buf := String new: 10000. > totalBytesDiscarded := 0. > + [self isConnected and: [self dataAvailable]] whileTrue: [ > - [self isOtherEndConnected and: [self dataAvailable]] whileTrue: [ > totalBytesDiscarded := > totalBytesDiscarded + (self receiveDataInto: buf)]. > ^ totalBytesDiscarded > ! > > Item was changed: > ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category 'waiting') ----- > waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock > "Wait for the given nr of seconds for data to arrive." > > | deadline timeLeft | > socketHandle ifNil: [ ^closedBlock value ]. > deadline := Time millisecondClockValue + (timeout * 1000) truncated. > [ > (self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ]. > + self isConnected ifFalse: [ ^closedBlock value ]. > - self isOtherEndConnected ifFalse: [ ^closedBlock value ]. > (timeLeft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^timedOutBlock value ]. > "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." > readSemaphore waitTimeoutMSecs: > (timeLeft min: self class maximumReadSemaphoreWaitTimeout) ] repeat! > > Item was changed: > ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') ----- > waitForDataIfClosed: closedBlock > "Wait indefinitely for data to arrive. This method will block until > data is available or the socket is closed." > > socketHandle ifNil: [ ^closedBlock value ]. > [ > (self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ]. > + self isConnected ifFalse: [ ^closedBlock value ]. > - self isOtherEndConnected ifFalse: [ ^closedBlock value ]. > "ul 8/13/2014 21:16 > Providing a maximum for the time for waiting is a workaround for a VM bug which > causes sockets waiting for data forever in some rare cases, because the semaphore > doesn't get signaled. Replace the ""waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout"" > part with ""wait"" when the bug is fixed." > readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout ] repeat! > > Item was changed: > ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting') ----- > waitForDisconnectionFor: timeout > "Wait for the given nr of seconds for the connection to be broken. > Return true if it is broken by the deadline, false if not. > The client should know the connection is really going to be closed > (e.g., because he has called 'close' to send a close request to the other end) > before calling this method." > > | deadline | > deadline := Time millisecondClockValue + (timeout * 1000) truncated. > + [ self isConnected and: [ deadline - Time millisecondClockValue > 0 ] ] > - [ self isOtherEndConnected and: [ deadline - Time millisecondClockValue > 0 ] ] > whileTrue: [ > self discardReceivedData. > "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." > readSemaphore waitTimeoutMSecs: > (deadline - Time millisecondClockValue min: self class maximumReadSemaphoreWaitTimeout) ]. > + ^self isConnected! > - ^self isOtherEndConnected! > > Item was changed: > ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') ----- > waitForSendDoneFor: timeout > "Wait up until the given deadline for the current send operation to complete. Return true if it completes by the deadline, false if not." > > | deadline timeleft | > deadline := Time millisecondClockValue + (timeout * 1000) truncated. > [ > (self primSocketSendDone: socketHandle) ifTrue: [ ^true ]. > + self isConnected ifFalse: [ ^false ]. > - self isThisEndConnected ifFalse: [ ^false ]. > (timeleft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^false ]. > writeSemaphore waitTimeoutMSecs: timeleft ] repeat! > > Item was changed: > ----- Method: SocketStream>>resetBuffers (in category 'private') ----- > resetBuffers > "Recreate the buffers with default start sizes." > > + (inBuffer isNil or: [ inBuffer size ~= bufferSize ]) ifTrue: [ > + inBuffer := self streamBuffer: bufferSize ]. > - inBuffer := self streamBuffer: bufferSize. > lastRead := 0. > inNextToWrite := 1. > + (outBuffer isNil or: [ outBuffer size ~= bufferSize ]) ifTrue: [ > + outBuffer := self streamBuffer: bufferSize ]. > - outBuffer := self streamBuffer: bufferSize. > outNextToWrite := 1! > > From hannes.hirzel at gmail.com Sat Aug 13 21:03:07 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Sat Aug 13 21:03:12 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471098008117-4910909.post@n4.nabble.com> References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: Hello On Ubuntu 14.04.1 I get an error with All-in-one-64bit, user8@user8-Latitude:~$ chmod +x squeak.sh user8@user8-Latitude:~$ ./squeak.sh /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak pthread_setschedparam failed: Operation not permitted Read e.g. http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 user8@user8-Latitude:~$ uname -a Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux user8@user8-Latitude:~$ The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 was not found on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. Best wishes Hannes On 8/13/16, marcel.taeumel wrote: > Hi there, > > here are new builds: > http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ > http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ > > Note that the VM version in the file name is true for 32-bit but not so > true > for 64-bit because the 64-bit Windows VM is different but the version comes > from the macOS VM, which is used to update the image. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From leves at caesar.elte.hu Sat Aug 13 21:03:19 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sat Aug 13 21:03:23 2016 Subject: [squeak-dev] The Trunk: Network-ul.182.mcz In-Reply-To: References: <57af74ea.d7a8370a.c9fd9.5448SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Hi Chris, Let me know if the tests pass. Levente On Sat, 13 Aug 2016, Chris Muller wrote: > This relieves a lot of pressure on the "Magma for Squeak 5.1" release. > Very much appreciated, thanks Levente. > > Best, > Chris > > On Sat, Aug 13, 2016 at 2:28 PM, wrote: >> Levente Uzonyi uploaded a new version of Network to project The Trunk: >> http://source.squeak.org/trunk/Network-ul.182.mcz >> >> ==================== Summary ==================== >> >> Name: Network-ul.182 >> Author: ul >> Time: 13 August 2016, 9:27:46.042121 pm >> UUID: 55cbd441-e7a5-4651-a45f-45e6e94e47aa >> Ancestors: Network-ul.180 >> >> Socket: >> - use #isConnected instead of #isThisEndConnected and #isOtherEndConnected while the VMs don't fully support half-open connections >> SocketStream: >> - do not recreate the buffers in #resetBuffers when nothing would change >> >> =============== Diff against Network-ul.180 =============== >> >> Item was changed: >> ----- Method: Socket>>closeAndDestroy: (in category 'connection open/close') ----- >> closeAndDestroy: timeoutSeconds >> "First, try to close this connection gracefully. If the close attempt fails or times out, abort the connection. In either case, destroy the socket. Do nothing if the socket has already been destroyed (i.e., if its socketHandle is nil)." >> >> socketHandle ifNil: [ ^self ]. >> + self isConnected ifTrue: [ >> - self isThisEndConnected ifTrue: [ >> self close. "Close this end." ]. >> (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ >> "The other end has not closed the connect yet, so we will just abort it." >> self primSocketAbortConnection: socketHandle ]. >> self destroy! >> >> Item was changed: >> ----- Method: Socket>>discardReceivedData (in category 'receiving') ----- >> discardReceivedData >> "Discard any data received up until now, and return the number of bytes discarded." >> >> | buf totalBytesDiscarded | >> buf := String new: 10000. >> totalBytesDiscarded := 0. >> + [self isConnected and: [self dataAvailable]] whileTrue: [ >> - [self isOtherEndConnected and: [self dataAvailable]] whileTrue: [ >> totalBytesDiscarded := >> totalBytesDiscarded + (self receiveDataInto: buf)]. >> ^ totalBytesDiscarded >> ! >> >> Item was changed: >> ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category 'waiting') ----- >> waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock >> "Wait for the given nr of seconds for data to arrive." >> >> | deadline timeLeft | >> socketHandle ifNil: [ ^closedBlock value ]. >> deadline := Time millisecondClockValue + (timeout * 1000) truncated. >> [ >> (self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ]. >> + self isConnected ifFalse: [ ^closedBlock value ]. >> - self isOtherEndConnected ifFalse: [ ^closedBlock value ]. >> (timeLeft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^timedOutBlock value ]. >> "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." >> readSemaphore waitTimeoutMSecs: >> (timeLeft min: self class maximumReadSemaphoreWaitTimeout) ] repeat! >> >> Item was changed: >> ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') ----- >> waitForDataIfClosed: closedBlock >> "Wait indefinitely for data to arrive. This method will block until >> data is available or the socket is closed." >> >> socketHandle ifNil: [ ^closedBlock value ]. >> [ >> (self primSocketReceiveDataAvailable: socketHandle) ifTrue: [ ^self ]. >> + self isConnected ifFalse: [ ^closedBlock value ]. >> - self isOtherEndConnected ifFalse: [ ^closedBlock value ]. >> "ul 8/13/2014 21:16 >> Providing a maximum for the time for waiting is a workaround for a VM bug which >> causes sockets waiting for data forever in some rare cases, because the semaphore >> doesn't get signaled. Replace the ""waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout"" >> part with ""wait"" when the bug is fixed." >> readSemaphore waitTimeoutMSecs: self class maximumReadSemaphoreWaitTimeout ] repeat! >> >> Item was changed: >> ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting') ----- >> waitForDisconnectionFor: timeout >> "Wait for the given nr of seconds for the connection to be broken. >> Return true if it is broken by the deadline, false if not. >> The client should know the connection is really going to be closed >> (e.g., because he has called 'close' to send a close request to the other end) >> before calling this method." >> >> | deadline | >> deadline := Time millisecondClockValue + (timeout * 1000) truncated. >> + [ self isConnected and: [ deadline - Time millisecondClockValue > 0 ] ] >> - [ self isOtherEndConnected and: [ deadline - Time millisecondClockValue > 0 ] ] >> whileTrue: [ >> self discardReceivedData. >> "Providing a maximum for the time for waiting is a workaround for a VM bug which causes sockets waiting for data forever in some rare cases, because the semaphore doesn't get signaled. Remove the ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is fixed." >> readSemaphore waitTimeoutMSecs: >> (deadline - Time millisecondClockValue min: self class maximumReadSemaphoreWaitTimeout) ]. >> + ^self isConnected! >> - ^self isOtherEndConnected! >> >> Item was changed: >> ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') ----- >> waitForSendDoneFor: timeout >> "Wait up until the given deadline for the current send operation to complete. Return true if it completes by the deadline, false if not." >> >> | deadline timeleft | >> deadline := Time millisecondClockValue + (timeout * 1000) truncated. >> [ >> (self primSocketSendDone: socketHandle) ifTrue: [ ^true ]. >> + self isConnected ifFalse: [ ^false ]. >> - self isThisEndConnected ifFalse: [ ^false ]. >> (timeleft := deadline - Time millisecondClockValue) <= 0 ifTrue: [ ^false ]. >> writeSemaphore waitTimeoutMSecs: timeleft ] repeat! >> >> Item was changed: >> ----- Method: SocketStream>>resetBuffers (in category 'private') ----- >> resetBuffers >> "Recreate the buffers with default start sizes." >> >> + (inBuffer isNil or: [ inBuffer size ~= bufferSize ]) ifTrue: [ >> + inBuffer := self streamBuffer: bufferSize ]. >> - inBuffer := self streamBuffer: bufferSize. >> lastRead := 0. >> inNextToWrite := 1. >> + (outBuffer isNil or: [ outBuffer size ~= bufferSize ]) ifTrue: [ >> + outBuffer := self streamBuffer: bufferSize ]. >> - outBuffer := self streamBuffer: bufferSize. >> outNextToWrite := 1! >> >> > > From leves at caesar.elte.hu Sat Aug 13 21:08:59 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sat Aug 13 21:09:04 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: Hi Hannes, It's a VM bug that it prints the wrong URL. You get this error message, because you haven't allowed Squeak to use higher process priorities. Try this link: http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 Levente On Sat, 13 Aug 2016, H. Hirzel wrote: > Hello > > On Ubuntu 14.04.1 I get an error with All-in-one-64bit, > > user8@user8-Latitude:~$ chmod +x squeak.sh > user8@user8-Latitude:~$ ./squeak.sh > /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak > pthread_setschedparam failed: Operation not permitted > Read e.g. http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 > user8@user8-Latitude:~$ uname -a > Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP > Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux > user8@user8-Latitude:~$ > > > The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 > was not found on this server. > > Additionally, a 404 Not Found error was encountered while trying to > use an ErrorDocument to handle the request. > > Best wishes > > Hannes > > On 8/13/16, marcel.taeumel wrote: >> Hi there, >> >> here are new builds: >> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >> >> Note that the VM version in the file name is true for 32-bit but not so >> true >> for 64-bit because the 64-bit Windows VM is different but the version comes >> from the macOS VM, which is used to update the image. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > > From hannes.hirzel at gmail.com Sat Aug 13 21:26:34 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Sat Aug 13 21:26:37 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: Hello Levente I can not figure out what to by reading http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 For example I do not know which VM I have as they seem to be renamed to just squeak. /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak So it is difficult to find out which of the remarks in http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 apply. I think it is the task of the script squeak.sh to tell me more what to do (script copied in below) --Hannes On 8/13/16, Levente Uzonyi wrote: > Hi Hannes, > > It's a VM bug that it prints the wrong URL. You get this error message, > because you haven't allowed Squeak to use higher process priorities. > Try this link: http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 > > Levente > > On Sat, 13 Aug 2016, H. Hirzel wrote: > >> Hello >> >> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, >> >> user8@user8-Latitude:~$ chmod +x squeak.sh >> user8@user8-Latitude:~$ ./squeak.sh >> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >> pthread_setschedparam failed: Operation not permitted >> Read e.g. >> http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 >> user8@user8-Latitude:~$ uname -a >> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP >> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >> user8@user8-Latitude:~$ >> >> >> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 >> was not found on this server. >> >> Additionally, a 404 Not Found error was encountered while trying to >> use an ErrorDocument to handle the request. >> >> Best wishes >> >> Hannes >> >> On 8/13/16, marcel.taeumel wrote: >>> Hi there, >>> >>> here are new builds: >>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >>> >>> Note that the VM version in the file name is true for 32-bit but not so >>> true >>> for 64-bit because the 64-bit Windows VM is different but the version >>> comes >>> from the macOS VM, which is used to update the image. >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: >>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>> >>> >> >> > > From hannes.hirzel at gmail.com Sat Aug 13 21:31:26 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Sat Aug 13 21:31:30 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: Note: squeak.sh should come with a version number and a modification date. #!/usr/bin/env bash # File: squeak.sh (All-in-One version) # Authors: Bert Freudenberg, Paul DeBruicker, Craig Latta, Chris Muller, # Fabio Niephaus # Description: Script to run Squeak from the all-in-one app structure # (based on Etoys-To-Go) APP_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app" && pwd )" IMAGE="${APP_DIR}/Contents/Resources/Squeak5.1beta-16420-64bit.image" IMAGE_BITS="64" CPU="$(uname -m)" case "${CPU}" in "x86_64") if [[ "${IMAGE_BITS}" == "32" ]]; then CPU="i686" echo "Running 32-bit Squeak on a 64-bit System. install-libs32 may install them." fi ;; "armv6l"|"armv7l") CPU="ARM" ;; esac VM="${APP_DIR}/Contents/Linux-${CPU}/bin/squeak" echo "${VM}" showerror() { if [[ -n "${DISPLAY}" ]] && [[ -x "$(which kdialog 2>/dev/null)" ]]; then kdialog --error "$1" elif [[ -n "${DISPLAY}" ]] && [[ -x "$(which zenity 2>/dev/null)" ]]; then zenity --error --text "$1" else dialog --msgbox "$1" 0 0 fi } if [[ ! -x "${VM}" ]]; then if [[ ! -r "${VM}" ]]; then showerror "This Squeak version does not support $(uname -s)-${CPU}" else showerror "Squeak does not have permissions to execute" fi fi exec "${VM}" "${IMAGE}" On 8/13/16, H. Hirzel wrote: > Hello Levente > > I can not figure out what to by reading > http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 > > For example I do not know which VM I have as they seem to be renamed > to just squeak. > /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak > > > So it is difficult to find out which of the remarks in > http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 > apply. > > I think it is the task of the script > squeak.sh > > to tell me more what to do (script copied in below) > > --Hannes > > > > On 8/13/16, Levente Uzonyi wrote: >> Hi Hannes, >> >> It's a VM bug that it prints the wrong URL. You get this error message, >> because you haven't allowed Squeak to use higher process priorities. >> Try this link: >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> Levente >> >> On Sat, 13 Aug 2016, H. Hirzel wrote: >> >>> Hello >>> >>> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, >>> >>> user8@user8-Latitude:~$ chmod +x squeak.sh >>> user8@user8-Latitude:~$ ./squeak.sh >>> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >>> pthread_setschedparam failed: Operation not permitted >>> Read e.g. >>> http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 >>> user8@user8-Latitude:~$ uname -a >>> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP >>> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >>> user8@user8-Latitude:~$ >>> >>> >>> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 >>> was not found on this server. >>> >>> Additionally, a 404 Not Found error was encountered while trying to >>> use an ErrorDocument to handle the request. >>> >>> Best wishes >>> >>> Hannes >>> >>> On 8/13/16, marcel.taeumel wrote: >>>> Hi there, >>>> >>>> here are new builds: >>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >>>> >>>> Note that the VM version in the file name is true for 32-bit but not so >>>> true >>>> for 64-bit because the 64-bit Windows VM is different but the version >>>> comes >>>> from the macOS VM, which is used to update the image. >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>> >>>> >>> >>> >> >> > From commits at source.squeak.org Sat Aug 13 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 13 21:55:06 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160813215503.6625.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068555.html Name: MorphicTests-mt.36 Ancestors: MorphicTests-mt.35 Adds a test that verifies that Morphs do not have to set the #wasHandled: flag in an event, even now in the face of the latest event bubbling changed. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068556.html Name: Morphic-mt.1269 Ancestors: Morphic-mt.1268 Remove some old preferences, which are now in the UI themes but whose getter methods remain existing and deprecated for applications to access. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068557.html Name: PreferenceBrowser-mt.72 Ancestors: PreferenceBrowser-mt.71 Account for low-performance platforms such as ARM. In that case, switch some settings to accommodate that and inform the user. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068558.html Name: UpdateStream-mt.6 Ancestors: UpdateStream-ul.5 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068559.html Name: Tools-mt.718 Ancestors: Tools-mt.717 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068560.html Name: ToolBuilder-Kernel-mt.105 Ancestors: ToolBuilder-Kernel-mt.104 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068561.html Name: Sound-mt.57 Ancestors: Sound-mt.56 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068562.html Name: SUnit-mt.105 Ancestors: SUnit-pre.104 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068563.html Name: MorphicExtras-mt.182 Ancestors: MorphicExtras-mt.181 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068564.html Name: Morphic-mt.1270 Ancestors: Morphic-mt.1269 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068565.html Name: CommandLine-mt.8 Ancestors: CommandLine-mt.7 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068566.html Name: Collections-mt.709 Ancestors: Collections-mt.708 Preference help text updates. Thanks Tim R.! ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068567.html Name: Morphic-nice.1269 Ancestors: Morphic-mt.1268 BUGFIX: tallySelection (tally it) might need a context ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068568.html Name: ST80-nice.216 Ancestors: ST80-mt.215 BUGFIX: tallySelection (tally it) might need a context ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068569.html Name: System-mt.883 Ancestors: System-mt.882 Accommodate Monticello behavior regarding automatic detection of packages based on extension categories. MC does not trim trailing blanks. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068570.html Name: Morphic-nice.1271 Ancestors: Morphic-mt.1270, Morphic-nice.1269 merge Morphic-mt.1270: Preference help text updates. Thanks Tim R.! Morphic-nice.1269: BUGFIX: tallySelection (tally it) might need a context ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068571.html Name: Morphic-mt.1272 Ancestors: Morphic-nice.1271 Decide for each corner grip individually whether to draw it or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068572.html Name: ToolBuilder-Morphic-mt.184 Ancestors: ToolBuilder-Morphic-mt.183 When building a dialog with grips, show those grips because they are inside, not outside due to dialog window layout limitations. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068573.html Name: ReleaseBuilder-mt.153 Ancestors: ReleaseBuilder-mt.152 Set color of corner grips when preparing the release. Note that corner grips are NOT in the UI theme yet. I think we can live with that for now. Their implementation seems to be rather complicated and not to easily themeable. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068574.html Name: System-mt.884 Ancestors: System-mt.883 Reverts a change that generated preference accessors into an *autogenerated category. This, however, will recategorize several accessors from 'standard queries' into that 'Autogenerated' package, occasionally. We do not want to risk losing getters needed by existing applications. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068575.html Name: MorphicExtras-mt.183 Ancestors: MorphicExtras-mt.182 Due to popular request, theme the classic ProgressMorph and ProgressBarMorph according to the settings of the system progress bar. Note that we *do not* (yet) theme all morphs in 'MorphicExtras' but only the ones used for system tools. Those are in 'Morphic'. As for the ProgressMorph, you have to re-create it after you change a theme. For the future, we plan to refactor SystemProgressMorph, SystemProgressBarMorph, ProgressMorph, and ProgressBarMorph to have a common base class at least. Maybe also add a PluggableProgressMorph and integrate it into ToolBuilder (with specs). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068576.html Name: Collections-mt.710 Ancestors: Collections-mt.709 To avoid code duplication, add a simple attribute check to texts (in addition to #unembellished). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068577.html Name: Morphic-mt.1273 Ancestors: Morphic-mt.1272 Fixes a bug in new-style balloon morphs, which did not honor custom text attributes and the ballon-owner's balloon color. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068578.html Name: PreferenceBrowser-mt.73 Ancestors: PreferenceBrowser-mt.72 Add balloon help to preference wizard. Reuse existing preference help texts as much as possible. Add custom ones where the negation of the preference made the existing help text look awkward. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068579.html Name: Morphic-mt.1274 Ancestors: Morphic-mt.1273 Fix the bug where new windows were occluded by the ones that provided the pop-up menu for a certain action. For example, right click on a text selection, invoking the menu, debug it. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068580.html Name: Morphic-mt.1275 Ancestors: Morphic-mt.1274 Due to the previous fix, restore the original keyboard focus again when dismissing the pop-up menu. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068581.html Name: ReleaseBuilder-mt.154 Ancestors: ReleaseBuilder-mt.153 Increase the default rounded corner radius from 6 to 8 to look better. Note that we need to improve the corner rounding in the Balloon plugin for numbers smaller than 8. Always hide horizontal scroll bar to increase usable area in lists. Multi-line text fields wrap anyway. Preference can be re-enabled if needed. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068582.html Name: Morphic-mt.1276 Ancestors: Morphic-mt.1275 Makes project labels in nested projects have the correct font and color. Fix look of docking bar when entering nested projects. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068583.html Name: Network-ul.182 Ancestors: Network-ul.180 Socket: - use #isConnected instead of #isThisEndConnected and #isOtherEndConnected while the VMs don't fully support half-open connections SocketStream: - do not recreate the buffers in #resetBuffers when nothing would change ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068584.html Name: System-cmm.885 Ancestors: System-mt.884 Theme setting the regular ProgressMorph, thanks Chris Cunningham, and a final tweaks for better visibility of "print it" output (which renders as #dbInvalid when syntax-highlighting is on). ============================================= From leves at caesar.elte.hu Sat Aug 13 22:06:30 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sat Aug 13 22:06:34 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: Hi Hannes, Only ht VMs require higher process priorities, so you're using an ht VM, and the following applies to you: Linux There are two variants of the Linux VMs; those ending in "ht" have a heartbeat thread, while those that don't use an interval timer for the heartbeat (the Windows and Mac VMs have a threaded heartbeat). The threaded heartbeat is better (for example, signals from the interval timer interfere with system calls, etc), but to use it one must have a kernel later than 2.6.12 and configure linux to allow the VM to use multiple thread priorities. To do so, create a file called VM.conf where VM is the name of the vm executable ("squeak" for the Squeak vm, "nsvm" for the Newspeak vm) in /etc/security/limits.d/ with contents: * hard rtprio 2 * soft rtprio 2 e.g. sudo cat >/etc/security/limits.d/squeak.conf < ./coglinuxht/squeak -vm display-null -vm sound-null squeak.image Levente On Sat, 13 Aug 2016, H. Hirzel wrote: > Hello Levente > > I can not figure out what to by reading > http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 > > For example I do not know which VM I have as they seem to be renamed > to just squeak. > /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak > > > So it is difficult to find out which of the remarks in > http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 > apply. > > I think it is the task of the script > squeak.sh > > to tell me more what to do (script copied in below) > > --Hannes > > > > On 8/13/16, Levente Uzonyi wrote: >> Hi Hannes, >> >> It's a VM bug that it prints the wrong URL. You get this error message, >> because you haven't allowed Squeak to use higher process priorities. >> Try this link: http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> Levente >> >> On Sat, 13 Aug 2016, H. Hirzel wrote: >> >>> Hello >>> >>> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, >>> >>> user8@user8-Latitude:~$ chmod +x squeak.sh >>> user8@user8-Latitude:~$ ./squeak.sh >>> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >>> pthread_setschedparam failed: Operation not permitted >>> Read e.g. >>> http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 >>> user8@user8-Latitude:~$ uname -a >>> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP >>> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >>> user8@user8-Latitude:~$ >>> >>> >>> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 >>> was not found on this server. >>> >>> Additionally, a 404 Not Found error was encountered while trying to >>> use an ErrorDocument to handle the request. >>> >>> Best wishes >>> >>> Hannes >>> >>> On 8/13/16, marcel.taeumel wrote: >>>> Hi there, >>>> >>>> here are new builds: >>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >>>> >>>> Note that the VM version in the file name is true for 32-bit but not so >>>> true >>>> for 64-bit because the 64-bit Windows VM is different but the version >>>> comes >>>> from the macOS VM, which is used to update the image. >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>> >>>> >>> >>> >> >> > > From hannes.hirzel at gmail.com Sun Aug 14 07:43:30 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Sun Aug 14 07:43:33 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: Hello Levente The following on did the job. The 64bit all-in-one runs fine on Ubuntu 14.04.1. Thank you Hannes sudo cat >/etc/security/limits.d/squeak.conf < wrote: > Hi Hannes, > > Only ht VMs require higher process priorities, so you're using an ht VM, > and the following applies to you: > > Linux > There are two variants of the Linux VMs; those ending in "ht" have a > heartbeat thread, while those that don't use an interval timer for > the > heartbeat (the Windows and Mac VMs have a threaded heartbeat). The > threaded heartbeat is better (for example, signals from the interval > timer > interfere with system calls, etc), but to use it one must have a > kernel > later than 2.6.12 and configure linux to allow the VM to use multiple > thread priorities. To do so, create a file called VM.conf where VM > is > the name of the vm executable ("squeak" for the Squeak vm, "nsvm" for > the Newspeak vm) in /etc/security/limits.d/ with contents: > * hard rtprio 2 > * soft rtprio 2 > > e.g. > > sudo cat >/etc/security/limits.d/squeak.conf < * hard rtprio 2 > * soft rtprio 2 > END > sudo cp /etc/security/limits.d/squeak.conf /etc/security/limits.d/nsvm.conf > > Only new processes will have the new security settings. Users must > log > out and log back in for the limits to take effect. Services must > stop > and then restart for the changes to take effect. To use this VM as a > daemon, e.g. under daemontools, you'll need to raise the limit > manually. > Make sure you're using bash and before your launch command, raise the > max > thread priority limit with ulimit -r 2, e.g. versions of the > following > script will work on ubuntu > #!/bin/bash > cd /path/to/squeak/directory > ulimit -r 2 > exec setuidgid ./coglinuxht/squeak -vm display-null -vm > sound-null squeak.image > > > Levente > > > On Sat, 13 Aug 2016, H. Hirzel wrote: > >> Hello Levente >> >> I can not figure out what to by reading >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> For example I do not know which VM I have as they seem to be renamed >> to just squeak. >> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >> >> >> So it is difficult to find out which of the remarks in >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> apply. >> >> I think it is the task of the script >> squeak.sh >> >> to tell me more what to do (script copied in below) >> >> --Hannes >> >> >> >> On 8/13/16, Levente Uzonyi wrote: >>> Hi Hannes, >>> >>> It's a VM bug that it prints the wrong URL. You get this error message, >>> because you haven't allowed Squeak to use higher process priorities. >>> Try this link: >>> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >>> >>> Levente >>> >>> On Sat, 13 Aug 2016, H. Hirzel wrote: >>> >>>> Hello >>>> >>>> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, >>>> >>>> user8@user8-Latitude:~$ chmod +x squeak.sh >>>> user8@user8-Latitude:~$ ./squeak.sh >>>> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >>>> pthread_setschedparam failed: Operation not permitted >>>> Read e.g. >>>> http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 >>>> user8@user8-Latitude:~$ uname -a >>>> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP >>>> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >>>> user8@user8-Latitude:~$ >>>> >>>> >>>> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 >>>> was not found on this server. >>>> >>>> Additionally, a 404 Not Found error was encountered while trying to >>>> use an ErrorDocument to handle the request. >>>> >>>> Best wishes >>>> >>>> Hannes >>>> >>>> On 8/13/16, marcel.taeumel wrote: >>>>> Hi there, >>>>> >>>>> here are new builds: >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >>>>> >>>>> Note that the VM version in the file name is true for 32-bit but not >>>>> so >>>>> true >>>>> for 64-bit because the 64-bit Windows VM is different but the version >>>>> comes >>>>> from the macOS VM, which is used to update the image. >>>>> >>>>> Best, >>>>> Marcel >>>>> >>>>> >>>>> >>>>> -- >>>>> View this message in context: >>>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>>> >>>>> >>>> >>>> >>> >>> >> >> > > From commits at source.squeak.org Sun Aug 14 08:15:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 08:15:42 2016 Subject: [squeak-dev] The Trunk: System-mt.886.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.886.mcz ==================== Summary ==================== Name: System-mt.886 Author: mt Time: 14 August 2016, 10:15:15.115039 am UUID: 4da4eed3-ab2d-854f-92a8-c8481f7af965 Ancestors: System-cmm.885 ProgressMorph is themed via SystemProgressMorph at the moment. There is no effect in writing theme settings for ProgressMorph in UI themes. =============== Diff against System-cmm.885 =============== Item was removed: - ----- Method: CommunityTheme class>>addDarkProgressMorph: (in category 'instance creation') ----- - addDarkProgressMorph: aUserInterfaceTheme - "self createDark apply." - aUserInterfaceTheme - set: #borderColor for: #ProgressMorph to: Color lightGray ; - set: #color for: #ProgressMorph to: Color black . - ! Item was changed: ----- Method: CommunityTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. "General morph stuff." theme set: #borderColor for: #ScrollPane to: (Color transparent) ; set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.3 brightness: 0.10); set: #keyboardFocusWidth for: #Morph to: 2; set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.025); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #hardShadowOffset for: #Morph to: 1@1. self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; + addDarkMenusAndDockingBars: theme. - addDarkMenusAndDockingBars: theme; - addDarkProgressMorph: theme. theme]! From commits at source.squeak.org Sun Aug 14 08:16:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 08:16:53 2016 Subject: [squeak-dev] The Trunk: UpdateStream-mt.7.mcz Message-ID: Marcel Taeumel uploaded a new version of UpdateStream to project The Trunk: http://source.squeak.org/trunk/UpdateStream-mt.7.mcz ==================== Summary ==================== Name: UpdateStream-mt.7 Author: mt Time: 14 August 2016, 10:16:45.023039 am UUID: 3f14c2e4-b7ce-044e-8a43-43ecede5be09 Ancestors: UpdateStream-mt.6 Fix redundant World installing. Make image start-up faster. =============== Diff against UpdateStream-mt.6 =============== Item was changed: ----- Method: AutoStart class>>checkForUpdates (in category '*UpdateStream') ----- checkForUpdates | availableUpdate updateServer | - World ifNotNil: - [ World install. - ActiveHand position: 100 @ 100 ]. HTTPClient isRunningInBrowser ifFalse: [ ^ self processUpdates ]. availableUpdate := (Smalltalk namedArguments at: 'UPDATE' ifAbsent: [ '' ]) asInteger. availableUpdate ifNil: [ ^ false ]. updateServer := Smalltalk namedArguments at: 'UPDATESERVER' ifAbsent: [ Smalltalk namedArguments at: 'UPDATE_SERVER' ifAbsent: [ 'Squeakland' ] ]. UpdateStreamDownloader default setUpdateServer: updateServer. ^ SystemVersion checkAndApplyUpdates: availableUpdate! From commits at source.squeak.org Sun Aug 14 08:18:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 08:18:43 2016 Subject: [squeak-dev] The Trunk: System-mt.887.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.887.mcz ==================== Summary ==================== Name: System-mt.887 Author: mt Time: 14 August 2016, 10:18:16.049039 am UUID: 519906f0-8966-024f-b0b1-1959ff0af042 Ancestors: System-mt.886 Fix redundant World installing. Make image start-up faster. Fix resetting of author name on image start-up. =============== Diff against System-mt.886 =============== Item was changed: Object subclass: #AbstractLauncher instanceVariableNames: 'parameters' classVariableNames: '' poolDictionaries: '' category: 'System-Support'! + !AbstractLauncher commentStamp: 'mt 8/14/2016 10:08' prior: 0! - !AbstractLauncher commentStamp: '' prior: 0! The class AutoStart in combination with the Launcher classes provides a mechanism for starting Squeak from the command line or a web page. Parameters on the command line or in the embed tag in the web page a parsed and stored in the lauchner's parameter dictionary. Subclasses can access these parameters to determine what to do. CommandLineLauncherExample provides an example for a command line application. if you start squeak with a command line 'class Integer' it will launch a class browser on class Integer. To enable this execute CommandLineLauncherExample activate before you save the image. To disable execute CommandLineLauncherExample deactivate + The PluginLauncher is an example how to use this framework to start Squeak as a browser plugin. It looks for a parameter 'src' which should point to a file containing a squeak script.! - The PluginLauchner is an example how to use this framework to start Squeak as a browser plugin. It looks for a parameter 'src' which should point to a file containing a squeak script.! Item was changed: ----- Method: AutoStart class>>checkForPluginUpdate (in category 'updating') ----- checkForPluginUpdate | pluginVersion updateURL | - World - ifNotNil: [ - World install. - ActiveHand position: 100@100]. HTTPClient isRunningInBrowser ifFalse: [^false]. pluginVersion := Smalltalk namedArguments at: (Smalltalk platformName copyWithout: Character space) asUppercase ifAbsent: [^false]. updateURL := Smalltalk namedArguments at: 'UPDATE_URL' ifAbsent: [^false]. ^SystemVersion check: pluginVersion andRequestPluginUpdate: updateURL! Item was changed: ----- Method: AutoStart class>>startUp: (in category 'initialization') ----- startUp: resuming "The image is either being newly started (resuming is true), or it's just been snapshotted. If this has just been a snapshot, skip all the startup stuff." | startupParameters launchers | self active ifTrue: [^self]. self active: true. resuming ifFalse: [^self]. HTTPClient determineIfRunningInBrowser. startupParameters := Smalltalk namedArguments. (startupParameters includesKey: 'apiSupported' asUppercase ) ifTrue: [ HTTPClient browserSupportsAPI: ((startupParameters at: 'apiSupported' asUppercase) asUppercase = 'TRUE'). HTTPClient isRunningInBrowser ifFalse: [HTTPClient isRunningInBrowser: true]]. + + World ifNotNil: [:w | w install. w firstHand position: 100 @ 100 ]. + "Some images might not have the UpdateStream package." ((self respondsTo: #checkForUpdates) and: [self checkForUpdates]) ifTrue: [^self]. self checkForPluginUpdate. launchers := self installedLaunchers collect: [:launcher | launcher new]. launchers do: [:launcher | launcher parameters: startupParameters]. launchers do: [:launcher | Project current addDeferredUIMessage: [launcher startUp]]! Item was changed: ----- Method: ProjectLauncher>>startUp (in category 'running') ----- startUp + - World ifNotNil: [World install]. - Utilities authorName: ''. Preferences eToyLoginEnabled + ifTrue: [self doEtoyLogin] + ifFalse:[self startUpAfterLogin].! - ifFalse:[^self startUpAfterLogin]. - self doEtoyLogin.! From commits at source.squeak.org Sun Aug 14 08:19:54 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 08:19:56 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.155.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.155.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.155 Author: mt Time: 14 August 2016, 10:19:48.444039 am UUID: 9b98547c-c7f5-e647-934c-82b6b1f89790 Ancestors: ReleaseBuilder-mt.154 When preparing the environment, do a cycle to upate all invalid caches. This will make the first image start-up faster. =============== Diff against ReleaseBuilder-mt.154 =============== Item was changed: ----- Method: ReleaseBuilder class>>initialize (in category 'class initialization') ----- initialize + "We have to be after AutoStart so that Morphic is up and running." + Smalltalk addToStartUpList: ReleaseBuilder after: AutoStart. - Smalltalk addToStartUpList: self. SystemVersion newVersion: 'Squeak5.1beta'.! Item was added: + ----- Method: ReleaseBuilder class>>initializeTemplate (in category 'class initialization') ----- + initializeTemplate + + ^ 'initialize + "We have to be after AutoStart so that Morphic is up and running." + Smalltalk addToStartUpList: ReleaseBuilder after: AutoStart. + + SystemVersion newVersion: ''{1}''.'! Item was changed: ----- Method: ReleaseBuilder class>>prepareEnvironment (in category 'preparing') ----- prepareEnvironment "Prepare everything that should be done for a new image build. Clear caches, passwords, etc." "ReleaseBuilder prepareNewBuild" self clearCaches; configureTools; setPreferences; configureDesktop. + DeferredTask := [PreferenceWizardMorph new openInWorld]. + + "If you save-and-quit the image after calling #prepareEnvironment, ensure that the next image startup will be fast." + Project current world doOneCycle.! - DeferredTask := [Project current addDeferredUIMessage: [PreferenceWizardMorph new openInWorld]].! Item was changed: ----- Method: ReleaseBuilder class>>setNewSystemVersion: (in category 'manual') ----- setNewSystemVersion: version self class + compile: (self initializeTemplate format: {version}) - compile: ('initialize - Smalltalk addToStartUpList: self. - - SystemVersion newVersion: ''{1}''.' format: {version}) classified: 'class initialization'. self initialize. SystemVersion current isRelease ifFalse: [self uploadNewSystemVersion].! From commits at source.squeak.org Sun Aug 14 08:44:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 08:44:29 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.91.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.91.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.91 Author: mt Time: 14 August 2016, 10:44:22.759642 am UUID: b87f5b33-61b1-ea48-8031-118523b083f9 Ancestors: HelpSystem-Core-mt.90 Make help text editing more robust. =============== Diff against HelpSystem-Core-mt.90 =============== Item was changed: ----- Method: HelpBrowser>>accept: (in category 'actions') ----- accept: text "Accept edited text. Compile it into a HelpTopic" + | code parent topicClass topicMethod topicMethodSelector normalizedText colorsToRemove | - | code parent topicClass topicMethod normalizedText colorsToRemove | (self currentParentTopic isNil or: [self currentParentTopic isEditable not]) ifTrue: [^ self inform: 'This help topic cannot be edited.']. self changed: #clearUserEdits. parent := self currentParentTopic. topicClass := parent helpClass. topicMethod := self currentTopic key. + topicMethodSelector := topicMethod copyReplaceAll: '-' with: ''. normalizedText := text. "Remove default colors for the sake of UI themes." colorsToRemove := {Color black. Color white}. normalizedText runs: (normalizedText runs collect: [:attributes | attributes reject: [:attribute | (((attribute respondsTo: #color) and: [colorsToRemove includes: attribute color]) or: [attribute respondsTo: #font])]]). code := String streamContents:[:s| + s nextPutAll: topicMethodSelector. - s nextPutAll: topicMethod. s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'. + s crtab; nextPutAll: '"', topicClass name,' edit: ', topicMethod storeString,'"'. + s crtab; nextPutAll: '^(HelpTopic'. - s crtab; nextPutAll: '"', self name,' edit: ', topicMethod storeString,'"'. - s crtab; nextPutAll: '^HelpTopic'. s crtab: 2; nextPutAll: 'title: ', currentTopic title storeString. s crtab: 2; nextPutAll: 'contents: '. s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: normalizedText]) storeString. + s nextPutAll:' readStream nextChunkText)'. + s crtab: 3; nextPutAll: 'key: ', topicMethod storeString. - s nextPutAll:' readStream nextChunkText'. ]. topicClass class compile: code + classified: ((topicClass class organization categoryOfElement: topicMethodSelector) ifNil:['pages']). - classified: ((topicClass class organization categoryOfElement: topicMethod) ifNil:['pages']). parent refresh. parent == self rootTopic ifTrue: [self rootTopic: parent]. self currentTopic: (parent subtopics detect: [:t | t key = topicMethod]).! Item was changed: ----- Method: HelpBrowser>>currentParentTopic: (in category 'accessing') ----- currentParentTopic: aHelpTopic + currentParentTopic := aHelpTopic ifNil: [self rootTopic].! - currentParentTopic := aHelpTopic.! From commits at source.squeak.org Sun Aug 14 09:44:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 09:44:15 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1277.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1277.mcz ==================== Summary ==================== Name: Morphic-mt.1277 Author: mt Time: 14 August 2016, 11:43:36.427355 am UUID: f0eee6b3-a9ec-6643-8fd1-8cbd7f566a8b Ancestors: Morphic-mt.1276 Fixes a bug regarding text actions and code evaluation. Do it deferred so that the rest of event handling does not intervene. =============== Diff against Morphic-mt.1276 =============== Item was changed: ----- Method: TextURL>>actOnClickFor: (in category '*Morphic') ----- actOnClickFor: anObject "Do what you can with this URL. Later a web browser." | response m | (url beginsWith: 'sqPr://') ifTrue: [ ProjectLoading thumbnailFromUrl: (url copyFrom: 8 to: url size). ^ true "should not get here, but what the heck" ]. (url beginsWith: 'code://') ifTrue: [ + Project current addDeferredUIMessage: [self open: (Compiler evaluate: (url allButFirst: 7))]. - self open: (Compiler evaluate: (url allButFirst: 7)). ^ true "should not get here, but what the heck" ]. "if it's a web browser, tell it to jump" anObject isWebBrowser ifTrue: [anObject jumpToUrl: url. ^ true] ifFalse: [((anObject respondsTo: #model) and: [anObject model isWebBrowser]) ifTrue: [anObject model jumpToUrl: url. ^ true]]. "if it's a morph, see if it is contained in a web browser" (anObject isKindOf: Morph) ifTrue: [ m := anObject. [ m ~= nil ] whileTrue: [ (m isWebBrowser) ifTrue: [ m jumpToUrl: url. ^true ]. (m hasProperty: #webBrowserView) ifTrue: [ m model jumpToUrl: url. ^true ]. m := m owner. ] ]. "no browser in sight. ask if we should start a new browser" ((self confirm: 'open a browser to view this URL?' translated) and: [WebBrowser default notNil]) ifTrue: [ WebBrowser default openOnUrl: url. ^ true ]. "couldn't display in a browser. Offer to put up just the source" response := (UIManager default chooseFrom: (Array with: 'View web page as source' translated with: 'Cancel' translated) title: 'Couldn''t find a web browser. View\page as source?' withCRs translated). response = 1 ifTrue: [HTTPSocket httpShowPage: url]. ^ true! From lists at fniephaus.com Sun Aug 14 09:57:27 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Sun Aug 14 09:57:41 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: Heartbeat threaded vms seem to be better, but they require a kernel later than 2.6.12 and Linux needs to be reconfigured by creating a file. I wonder, would it be better to use vms with interval timer in the Linux bundles instead? Or shall we extend the squeak.sh launcher script, so that it helps with the Linux setup? It feels like ht vms are for power users and I think it might be better to trade performance for ease of use in this case (having beginners in mind). Any other opinions? Best, Fabio -- On Sun, Aug 14, 2016 at 9:43 AM H. Hirzel wrote: > Hello Levente > > The following on did the job. The 64bit all-in-one runs fine on Ubuntu > 14.04.1. > > Thank you > > Hannes > > sudo cat >/etc/security/limits.d/squeak.conf < * hard rtprio 2 > * soft rtprio 2 > END > > > (log out and log in) > > On 8/14/16, Levente Uzonyi wrote: > > Hi Hannes, > > > > Only ht VMs require higher process priorities, so you're using an ht VM, > > and the following applies to you: > > > > Linux > > There are two variants of the Linux VMs; those ending in "ht" have > a > > heartbeat thread, while those that don't use an interval timer for > > the > > heartbeat (the Windows and Mac VMs have a threaded heartbeat). The > > threaded heartbeat is better (for example, signals from the > interval > > timer > > interfere with system calls, etc), but to use it one must have a > > kernel > > later than 2.6.12 and configure linux to allow the VM to use > multiple > > thread priorities. To do so, create a file called VM.conf where VM > > is > > the name of the vm executable ("squeak" for the Squeak vm, "nsvm" > for > > the Newspeak vm) in /etc/security/limits.d/ with contents: > > * hard rtprio 2 > > * soft rtprio 2 > > > > e.g. > > > > sudo cat >/etc/security/limits.d/squeak.conf < > * hard rtprio 2 > > * soft rtprio 2 > > END > > sudo cp /etc/security/limits.d/squeak.conf > /etc/security/limits.d/nsvm.conf > > > > Only new processes will have the new security settings. Users must > > log > > out and log back in for the limits to take effect. Services must > > stop > > and then restart for the changes to take effect. To use this VM > as a > > daemon, e.g. under daemontools, you'll need to raise the limit > > manually. > > Make sure you're using bash and before your launch command, raise > the > > max > > thread priority limit with ulimit -r 2, e.g. versions of the > > following > > script will work on ubuntu > > #!/bin/bash > > cd /path/to/squeak/directory > > ulimit -r 2 > > exec setuidgid ./coglinuxht/squeak -vm display-null > -vm > > sound-null squeak.image > > > > > > Levente > > > > > > On Sat, 13 Aug 2016, H. Hirzel wrote: > > > >> Hello Levente > >> > >> I can not figure out what to by reading > >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 > >> > >> For example I do not know which VM I have as they seem to be renamed > >> to just squeak. > >> > /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak > >> > >> > >> So it is difficult to find out which of the remarks in > >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 > >> apply. > >> > >> I think it is the task of the script > >> squeak.sh > >> > >> to tell me more what to do (script copied in below) > >> > >> --Hannes > >> > >> > >> > >> On 8/13/16, Levente Uzonyi wrote: > >>> Hi Hannes, > >>> > >>> It's a VM bug that it prints the wrong URL. You get this error message, > >>> because you haven't allowed Squeak to use higher process priorities. > >>> Try this link: > >>> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 > >>> > >>> Levente > >>> > >>> On Sat, 13 Aug 2016, H. Hirzel wrote: > >>> > >>>> Hello > >>>> > >>>> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, > >>>> > >>>> user8@user8-Latitude:~$ chmod +x squeak.sh > >>>> user8@user8-Latitude:~$ ./squeak.sh > >>>> > /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak > >>>> pthread_setschedparam failed: Operation not permitted > >>>> Read e.g. > >>>> > http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 > >>>> user8@user8-Latitude:~$ uname -a > >>>> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP > >>>> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux > >>>> user8@user8-Latitude:~$ > >>>> > >>>> > >>>> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 > >>>> was not found on this server. > >>>> > >>>> Additionally, a 404 Not Found error was encountered while trying to > >>>> use an ErrorDocument to handle the request. > >>>> > >>>> Best wishes > >>>> > >>>> Hannes > >>>> > >>>> On 8/13/16, marcel.taeumel wrote: > >>>>> Hi there, > >>>>> > >>>>> here are new builds: > >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ > >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ > >>>>> > >>>>> Note that the VM version in the file name is true for 32-bit but not > >>>>> so > >>>>> true > >>>>> for 64-bit because the 64-bit Windows VM is different but the version > >>>>> comes > >>>>> from the macOS VM, which is used to update the image. > >>>>> > >>>>> Best, > >>>>> Marcel > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> View this message in context: > >>>>> > http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html > >>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. > >>>>> > >>>>> > >>>> > >>>> > >>> > >>> > >> > >> > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160814/a131c9ac/attachment-0001.htm From commits at source.squeak.org Sun Aug 14 10:13:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 10:13:32 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1278.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1278.mcz ==================== Summary ==================== Name: Morphic-mt.1278 Author: mt Time: 14 August 2016, 12:12:57.759355 pm UUID: c8768168-96d0-7b4a-8398-ed075e824a39 Ancestors: Morphic-mt.1277 Make the Help-Browser port of Squeak Swiki at least accessible via the main docking bar help menu. =============== Diff against Morphic-mt.1277 =============== Item was changed: ----- Method: TheWorldMainDockingBar>>helpMenuOn: (in category 'submenu - help') ----- helpMenuOn: aDockingBar aDockingBar addItem: [ :it | it contents: 'Help' translated; addSubMenu: [ :menu | menu addItem: [:item | item contents: 'Squeak Help' translated; help: 'Integrated Help System' translated; target: self; selector: #squeakHelp]. menu addLine. menu addItem:[:item| item contents: 'Online Resources' translated; help: 'Online resources for Squeak' translated; target: self; icon: MenuIcons smallHelpIcon; selector: #squeakOnlineResources]. menu addItem:[:item| item + contents: 'Squeak Swiki' translated; + help: 'A very simple way to access Squeak Swiki resources in the image' translated; + target: self; + selector: #swiki]. + menu addItem:[:item| + item contents: 'Keyboard Shortcuts' translated; help: 'Keyboard bindings used in Squeak' translated; target: self; selector: #commandKeyHelp ]. menu addItem:[:item| item contents: 'Font Size Summary' translated; help: 'Font size summary.' translated; target: self; selector: #fontSizeSummary ]. menu addItem:[:item| item contents: 'Useful Expressions' translated; help: 'Useful expressions' translated; target: self; selector: #usefulExpressions ]. menu addLine. menu addItem:[:item| item contents: 'Terse Guide to Squeak' translated; help: 'Concise information about language and environment' translated; target: self; selector: #terseGuideToSqueak]. menu addItem:[:item| item contents: 'Extending the system' translated; help: 'Includes code snippets to evaluate for extending the system' translated; target: self; icon: MenuIcons smallHelpIcon; selector: #extendingTheSystem]. menu addLine. menu addItem:[:item| item contents: 'Release Notes' translated; help: 'Changes in this release' translated ; target: self; selector: #releaseNotes]. menu addItem:[:item| item contents: 'Working With Squeak' translated; help: 'Information for new users' ; target: self; selector: #workingWithSqueak]. menu addItem:[:item| item contents: 'The Squeak User Interface' translated; help: 'Descriptions of some of the more-unusual UI elements in Squeak' ; target: self; selector: #squeakUserInterface]. menu addItem:[:item| item contents: 'License Information' translated; help: String empty ; target: self; selector: #licenseInformation]. menu addLine. menu addItem: [:item | item contents: 'About Squeak' translated; help: 'SystemReporter status of the image and runtime environment' translated; target: self; selector: #aboutSqueak]. ]]! Item was added: + ----- Method: TheWorldMainDockingBar>>swiki (in category 'submenu - help') ----- + swiki + + self + openHelp: #SWikiHelp + topic: nil + styled: false.! From Marcel.Taeumel at hpi.de Sun Aug 14 10:30:10 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Aug 14 10:30:33 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: <1471170610663-4910968.post@n4.nabble.com> fniephaus wrote > Heartbeat threaded vms seem to be better, but they require a kernel later > than 2.6.12 and Linux needs to be reconfigured by creating a file. > > I wonder, would it be better to use vms with interval timer in the Linux > bundles instead? > Or shall we extend the squeak.sh launcher script, so that it helps with > the > Linux setup? > > It feels like ht vms are for power users and I think it might be better to > trade performance for ease of use in this case (having beginners in mind). > Any other opinions? > > Best, > Fabio > > -- > > On Sun, Aug 14, 2016 at 9:43 AM H. Hirzel < > hannes.hirzel@ > > wrote: > >> Hello Levente >> >> The following on did the job. The 64bit all-in-one runs fine on Ubuntu >> 14.04.1. >> >> Thank you >> >> Hannes >> >> sudo cat >/etc/security/limits.d/squeak.conf < > > > * hard rtprio 2 >> * soft rtprio 2 >> END >> >> >> (log out and log in) >> >> On 8/14/16, Levente Uzonyi < > leves@.elte > > wrote: >> > Hi Hannes, >> > >> > Only ht VMs require higher process priorities, so you're using an ht >> VM, >> > and the following applies to you: >> > >> > Linux >> > There are two variants of the Linux VMs; those ending in "ht" >> have >> a >> > heartbeat thread, while those that don't use an interval timer >> for >> > the >> > heartbeat (the Windows and Mac VMs have a threaded heartbeat). >> The >> > threaded heartbeat is better (for example, signals from the >> interval >> > timer >> > interfere with system calls, etc), but to use it one must have a >> > kernel >> > later than 2.6.12 and configure linux to allow the VM to use >> multiple >> > thread priorities. To do so, create a file called VM.conf where >> VM >> > is >> > the name of the vm executable ("squeak" for the Squeak vm, "nsvm" >> for >> > the Newspeak vm) in /etc/security/limits.d/ with contents: >> > * hard rtprio 2 >> > * soft rtprio 2 >> > >> > e.g. >> > >> > sudo cat >/etc/security/limits.d/squeak.conf < > > > > * hard rtprio 2 >> > * soft rtprio 2 >> > END >> > sudo cp /etc/security/limits.d/squeak.conf >> /etc/security/limits.d/nsvm.conf >> > >> > Only new processes will have the new security settings. Users >> must >> > log >> > out and log back in for the limits to take effect. Services must >> > stop >> > and then restart for the changes to take effect. To use this VM >> as a >> > daemon, e.g. under daemontools, you'll need to raise the limit >> > manually. >> > Make sure you're using bash and before your launch command, raise >> the >> > max >> > thread priority limit with ulimit -r 2, e.g. versions of the >> > following >> > script will work on ubuntu >> > #!/bin/bash >> > cd /path/to/squeak/directory >> > ulimit -r 2 >> > exec setuidgid > > ./coglinuxht/squeak -vm display-null >> -vm >> > sound-null squeak.image >> > >> > >> > Levente >> > >> > >> > On Sat, 13 Aug 2016, H. Hirzel wrote: >> > >> >> Hello Levente >> >> >> >> I can not figure out what to by reading >> >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> >> >> For example I do not know which VM I have as they seem to be renamed >> >> to just squeak. >> >> >> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >> >> >> >> >> >> So it is difficult to find out which of the remarks in >> >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> apply. >> >> >> >> I think it is the task of the script >> >> squeak.sh >> >> >> >> to tell me more what to do (script copied in below) >> >> >> >> --Hannes >> >> >> >> >> >> >> >> On 8/13/16, Levente Uzonyi < > leves@.elte > > wrote: >> >>> Hi Hannes, >> >>> >> >>> It's a VM bug that it prints the wrong URL. You get this error >> message, >> >>> because you haven't allowed Squeak to use higher process priorities. >> >>> Try this link: >> >>> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >>> >> >>> Levente >> >>> >> >>> On Sat, 13 Aug 2016, H. Hirzel wrote: >> >>> >> >>>> Hello >> >>>> >> >>>> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, >> >>>> >> >>>> user8@user8-Latitude:~$ chmod +x squeak.sh >> >>>> user8@user8-Latitude:~$ ./squeak.sh >> >>>> >> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >> >>>> pthread_setschedparam failed: Operation not permitted >> >>>> Read e.g. >> >>>> >> http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 >> >>>> user8@user8-Latitude:~$ uname -a >> >>>> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP >> >>>> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >> >>>> user8@user8-Latitude:~$ >> >>>> >> >>>> >> >>>> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 >> >>>> was not found on this server. >> >>>> >> >>>> Additionally, a 404 Not Found error was encountered while trying to >> >>>> use an ErrorDocument to handle the request. >> >>>> >> >>>> Best wishes >> >>>> >> >>>> Hannes >> >>>> >> >>>> On 8/13/16, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >> >>>>> Hi there, >> >>>>> >> >>>>> here are new builds: >> >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >> >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >> >>>>> >> >>>>> Note that the VM version in the file name is true for 32-bit but >> not >> >>>>> so >> >>>>> true >> >>>>> for 64-bit because the 64-bit Windows VM is different but the >> version >> >>>>> comes >> >>>>> from the macOS VM, which is used to update the image. >> >>>>> >> >>>>> Best, >> >>>>> Marcel >> >>>>> >> >>>>> >> >>>>> >> >>>>> -- >> >>>>> View this message in context: >> >>>>> >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >> >>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> >>> >> >> >> >> >> > >> > >> >> We should extend the squeak.sh launcher script, so that it helps with the Linux setup. :) Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910968.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sun Aug 14 10:33:19 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 10:33:21 2016 Subject: [squeak-dev] The Trunk: Environments-mt.62.mcz Message-ID: Marcel Taeumel uploaded a new version of Environments to project The Trunk: http://source.squeak.org/trunk/Environments-mt.62.mcz ==================== Summary ==================== Name: Environments-mt.62 Author: mt Time: 14 August 2016, 12:33:15.105355 pm UUID: 379d8222-e6fe-3f4c-8e71-eb718645ccb1 Ancestors: Environments-kfr.61 Embed help on Environments into Squeak Help. Make book naming consistent with help on WebClient etc. =============== Diff against Environments-kfr.61 =============== Item was changed: + EnvironmentsHelp subclass: #EnvironmentsAPIDocumentation - Object subclass: #EnvironmentsAPIDocumentation instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Environments-Help'! Item was changed: ----- Method: EnvironmentsAPIDocumentation class>>bookName (in category 'as yet unclassified') ----- bookName + ^'Reference'! - ^'API Documentation'! Item was added: + CustomHelp subclass: #EnvironmentsHelp + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Environments-Help'! Item was added: + ----- Method: EnvironmentsHelp class>>bookName (in category 'accessing') ----- + bookName + + ^ 'Environments'! Item was added: + ----- Method: EnvironmentsHelp class>>introduction (in category 'pages') ----- + introduction + "This method was automatically generated. Edit it using:" + "EnvironmentsHelp edit: #introduction" + ^(HelpTopic + title: 'Introduction' + contents: + 'An Environment is an object that implements a policy for binding names to objects during compilation. + + The simplest and most common use for environments is to allow two classes with the same name to peacefully co-exist. + + See: + http://wiki.squeak.org/squeak/6218 + http://wiki.squeak.org/squeak/6219 + http://wiki.squeak.org/squeak/6220!!' readStream nextChunkText) + key: #introduction! Item was added: + ----- Method: EnvironmentsHelp class>>pages (in category 'accessing') ----- + pages + + ^ #(introduction)! From commits at source.squeak.org Sun Aug 14 10:34:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 10:34:39 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.45.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.45.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.45 Author: mt Time: 14 August 2016, 12:34:31.017355 pm UUID: 9feee481-6b9a-e04a-b21c-288d54ae88bb Ancestors: Help-Squeak-Project-mt.44 Always put SqueakHelp on the top in the help browser. =============== Diff against Help-Squeak-Project-mt.44 =============== Item was changed: + ----- Method: SqueakHelp class>>introduction (in category 'pages') ----- - ----- Method: SqueakHelp class>>introduction (in category 'as yet unclassified') ----- introduction "This method was automatically generated. Edit it using:" "a HelpBrowser edit: #introduction" ^HelpTopic title: 'Welcome' contents: 'Welcome to Squeak (http://www.squeak.org) Squeak is an open-source Smalltalk programming system with fast execution environments for all major platforms. It features the Morphic framework, which promotes low effort graphical, interactive application development and maintenance. Many projects have been successfully created with Squeak. They cover a wide range of domains such as education, multimedia, gaming, research, and commerce. It''s Smalltalk!!!! Everything is an object. Objects collaborate by exchanging messages to achieve the desired application behavior. The Smalltalk programming language has a concise syntax and simple execution semantics. The Smalltalk system is implemented in itself: Compiler, debugger, programming tools, and so on are all Smalltalk code the user can read and modify. Novice programmers can get started easily and experts can engineer elegant solutions at large. Morphic UI Framework All graphical objects are tangible and interactively changeable. This promotes short feedback loops and low-effort application development. Morphic thus leverages the live programming experience of traditional Smalltalk environments from a mainly text-focused domain to a graphical one. Powerful Tooling The dynamic Squeak environment provides a variety of tools for browsing, writing, executing, and versioning Smalltalk code. Multiple debugging sessions can be served concurrently. Thanks to Morphic, tool customization can be achieved with reasonable effort. Fast Virtual Machine There are several fast Squeak VMs that also support other languages of the Smalltalk family. Meta-tracing, just-in-time compilation, stack-to-register mapping, and aggressive in-line message caching yield efficiency in executing Smalltalk byte code. Web Development With frameworks like Seaside and AIDA, Squeak can be a web server. It provides a layered set of abstractions over HTTP and HTML that let you build highly interactive web applications quickly, reusably,` and maintainably. Multi-Platform Support Squeak supports Windows, Linux, and OS X and is preinstalled on C.H.I.P., Raspberry Pi, and OLPC XO.!! ]style[(18 1 21 1 396 15 18 6 36 8 87 14 80 8 2 8 2 17 161 20 27 8 254 16 64 8 11 9 6 10 152 20 252 15 22 7 5 4 18 3 164 22 101)a0b,a0,Rhttp://www.squeak.org;,a0,,i,,Rcode://Object;,,Rcode://MessageSend;,,Rcode://HelpBrowser openForCodeOn: TerseGuideHelp;,,Rcode://Compiler;,,Rcode://Debugger;,,Rcode://Browser;,,i,,Rcode://Morph new openInHand;,,i,,Rcode://ToolSet browse: String selector: #findTokens:;,,Rcode://7/0;,,Rcode://MCWorkingCopyBrowser new show;,,i,,i,,Rhttp://www.seaside.st/;,,Rhttp://www.aidaweb.si/;,,Rcode://WebClient;,,i,!!' readStream nextChunkText! Item was added: + ----- Method: SqueakHelp class>>priority (in category 'accessing') ----- + priority + + ^ self == SqueakHelp ifTrue: [-9999 "at the top"] ifFalse: [nil]! From eliot.miranda at gmail.com Sun Aug 14 10:52:07 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Aug 14 10:52:13 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: <7CA5A801-AD7B-4CDF-88BD-13A39619D788@gmail.com> Hi Fabio, > On Aug 14, 2016, at 2:57 AM, Fabio Niephaus wrote: > > Heartbeat threaded vms seem to be better, but they require a kernel later than 2.6.12 and Linux needs to be reconfigured by creating a file. > > I wonder, would it be better to use vms with interval timer in the Linux bundles instead? > Or shall we extend the squeak.sh launcher script, so that it helps with the Linux setup? > > It feels like ht vms are for power users and I think it might be better to trade performance for ease of use in this case (having beginners in mind). Any other opinions? The way I think of it is that the interval timer is a mechanism with bad side effects (interrupting system calls potentially affecting foreign code). So I think of it as a poor man's solution. Since Linux is often personal, in that the user usually owns the system, it seems worth guiding the user through being able to use the GT VM if possible. If we go this route I recommend we pull the logic for setting up the files into a separate script so that it can be modified independently of squeak.sh to leave squeak.sh relatively stable as we evolve the setup script. I agree that the itimer VMs are simpler, but in this case not better :-/ > > Best, > Fabio > > -- > >> On Sun, Aug 14, 2016 at 9:43 AM H. Hirzel wrote: >> Hello Levente >> >> The following on did the job. The 64bit all-in-one runs fine on Ubuntu 14.04.1. >> >> Thank you >> >> Hannes >> >> sudo cat >/etc/security/limits.d/squeak.conf <> * hard rtprio 2 >> * soft rtprio 2 >> END >> >> >> (log out and log in) >> >> On 8/14/16, Levente Uzonyi wrote: >> > Hi Hannes, >> > >> > Only ht VMs require higher process priorities, so you're using an ht VM, >> > and the following applies to you: >> > >> > Linux >> > There are two variants of the Linux VMs; those ending in "ht" have a >> > heartbeat thread, while those that don't use an interval timer for >> > the >> > heartbeat (the Windows and Mac VMs have a threaded heartbeat). The >> > threaded heartbeat is better (for example, signals from the interval >> > timer >> > interfere with system calls, etc), but to use it one must have a >> > kernel >> > later than 2.6.12 and configure linux to allow the VM to use multiple >> > thread priorities. To do so, create a file called VM.conf where VM >> > is >> > the name of the vm executable ("squeak" for the Squeak vm, "nsvm" for >> > the Newspeak vm) in /etc/security/limits.d/ with contents: >> > * hard rtprio 2 >> > * soft rtprio 2 >> > >> > e.g. >> > >> > sudo cat >/etc/security/limits.d/squeak.conf <> > * hard rtprio 2 >> > * soft rtprio 2 >> > END >> > sudo cp /etc/security/limits.d/squeak.conf /etc/security/limits.d/nsvm.conf >> > >> > Only new processes will have the new security settings. Users must >> > log >> > out and log back in for the limits to take effect. Services must >> > stop >> > and then restart for the changes to take effect. To use this VM as a >> > daemon, e.g. under daemontools, you'll need to raise the limit >> > manually. >> > Make sure you're using bash and before your launch command, raise the >> > max >> > thread priority limit with ulimit -r 2, e.g. versions of the >> > following >> > script will work on ubuntu >> > #!/bin/bash >> > cd /path/to/squeak/directory >> > ulimit -r 2 >> > exec setuidgid ./coglinuxht/squeak -vm display-null -vm >> > sound-null squeak.image >> > >> > >> > Levente >> > >> > >> > On Sat, 13 Aug 2016, H. Hirzel wrote: >> > >> >> Hello Levente >> >> >> >> I can not figure out what to by reading >> >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> >> >> For example I do not know which VM I have as they seem to be renamed >> >> to just squeak. >> >> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >> >> >> >> >> >> So it is difficult to find out which of the remarks in >> >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> apply. >> >> >> >> I think it is the task of the script >> >> squeak.sh >> >> >> >> to tell me more what to do (script copied in below) >> >> >> >> --Hannes >> >> >> >> >> >> >> >> On 8/13/16, Levente Uzonyi wrote: >> >>> Hi Hannes, >> >>> >> >>> It's a VM bug that it prints the wrong URL. You get this error message, >> >>> because you haven't allowed Squeak to use higher process priorities. >> >>> Try this link: >> >>> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >>> >> >>> Levente >> >>> >> >>> On Sat, 13 Aug 2016, H. Hirzel wrote: >> >>> >> >>>> Hello >> >>>> >> >>>> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, >> >>>> >> >>>> user8@user8-Latitude:~$ chmod +x squeak.sh >> >>>> user8@user8-Latitude:~$ ./squeak.sh >> >>>> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >> >>>> pthread_setschedparam failed: Operation not permitted >> >>>> Read e.g. >> >>>> http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 >> >>>> user8@user8-Latitude:~$ uname -a >> >>>> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP >> >>>> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >> >>>> user8@user8-Latitude:~$ >> >>>> >> >>>> >> >>>> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 >> >>>> was not found on this server. >> >>>> >> >>>> Additionally, a 404 Not Found error was encountered while trying to >> >>>> use an ErrorDocument to handle the request. >> >>>> >> >>>> Best wishes >> >>>> >> >>>> Hannes >> >>>> >> >>>> On 8/13/16, marcel.taeumel wrote: >> >>>>> Hi there, >> >>>>> >> >>>>> here are new builds: >> >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >> >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >> >>>>> >> >>>>> Note that the VM version in the file name is true for 32-bit but not >> >>>>> so >> >>>>> true >> >>>>> for 64-bit because the 64-bit Windows VM is different but the version >> >>>>> comes >> >>>>> from the macOS VM, which is used to update the image. >> >>>>> >> >>>>> Best, >> >>>>> Marcel >> >>>>> >> >>>>> >> >>>>> >> >>>>> -- >> >>>>> View this message in context: >> >>>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >> >>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> >>> >> >> >> >> >> > >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160814/b2953f9c/attachment.htm From commits at source.squeak.org Sun Aug 14 10:53:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 10:53:19 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.645.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.645.mcz ==================== Summary ==================== Name: Monticello-mt.645 Author: mt Time: 14 August 2016, 12:53:06.388355 pm UUID: 79a9295a-46db-c145-9788-25e6be0c8b2d Ancestors: Monticello-mt.644 The naming is still a little bit unintuitive, but make it easier for scripts to browse working copies in a snapshot browser. (Use currently use this to write interactive release notes). =============== Diff against Monticello-mt.644 =============== Item was added: + ----- Method: MCWorkingCopy>>browse (in category 'ui') ----- + browse + + (MCSnapshotBrowser forSnapshot: self package snapshot) + label: 'Snapshot Browser: ', self packageName; + show.! Item was changed: ----- Method: MCWorkingCopyBrowser>>browseWorkingCopy (in category 'actions') ----- browseWorkingCopy + workingCopy ifNotNil: [:wc | wc browse].! - workingCopy ifNotNil: - [(MCSnapshotBrowser forSnapshot: workingCopy package snapshot) - label: 'Snapshot Browser: ', workingCopy packageName; - show]! From eliot.miranda at gmail.com Sun Aug 14 10:55:05 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Aug 14 10:55:11 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471170610663-4910968.post@n4.nabble.com> References: <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> <1471170610663-4910968.post@n4.nabble.com> Message-ID: Hi Marcel, > On Aug 14, 2016, at 3:30 AM, marcel.taeumel wrote: > > fniephaus wrote >> Heartbeat threaded vms seem to be better, but they require a kernel later >> than 2.6.12 and Linux needs to be reconfigured by creating a file. >> >> I wonder, would it be better to use vms with interval timer in the Linux >> bundles instead? >> Or shall we extend the squeak.sh launcher script, so that it helps with >> the >> Linux setup? >> >> It feels like ht vms are for power users and I think it might be better to >> trade performance for ease of use in this case (having beginners in mind). >> Any other opinions? >> >> Best, >> Fabio >> >> -- >> >> On Sun, Aug 14, 2016 at 9:43 AM H. Hirzel < > >> hannes.hirzel@ > >> > wrote: >> >>> Hello Levente >>> >>> The following on did the job. The 64bit all-in-one runs fine on Ubuntu >>> 14.04.1. >>> >>> Thank you >>> >>> Hannes >>> >>> sudo cat >/etc/security/limits.d/squeak.conf < >> > * hard rtprio 2 >>> * soft rtprio 2 >>> END >>> >>> >>> (log out and log in) >>> >>> On 8/14/16, Levente Uzonyi < > >> leves@.elte > >> > wrote: >>>> Hi Hannes, >>>> >>>> Only ht VMs require higher process priorities, so you're using an ht >>> VM, >>>> and the following applies to you: >>>> >>>> Linux >>>> There are two variants of the Linux VMs; those ending in "ht" >>> have >>> a >>>> heartbeat thread, while those that don't use an interval timer >>> for >>>> the >>>> heartbeat (the Windows and Mac VMs have a threaded heartbeat). >>> The >>>> threaded heartbeat is better (for example, signals from the >>> interval >>>> timer >>>> interfere with system calls, etc), but to use it one must have a >>>> kernel >>>> later than 2.6.12 and configure linux to allow the VM to use >>> multiple >>>> thread priorities. To do so, create a file called VM.conf where >>> VM >>>> is >>>> the name of the vm executable ("squeak" for the Squeak vm, "nsvm" >>> for >>>> the Newspeak vm) in /etc/security/limits.d/ with contents: >>>> * hard rtprio 2 >>>> * soft rtprio 2 >>>> >>>> e.g. >>>> >>>> sudo cat >/etc/security/limits.d/squeak.conf < >> >> >>> * hard rtprio 2 >>>> * soft rtprio 2 >>>> END >>>> sudo cp /etc/security/limits.d/squeak.conf >>> /etc/security/limits.d/nsvm.conf >>>> >>>> Only new processes will have the new security settings. Users >>> must >>>> log >>>> out and log back in for the limits to take effect. Services must >>>> stop >>>> and then restart for the changes to take effect. To use this VM >>> as a >>>> daemon, e.g. under daemontools, you'll need to raise the limit >>>> manually. >>>> Make sure you're using bash and before your launch command, raise >>> the >>>> max >>>> thread priority limit with ulimit -r 2, e.g. versions of the >>>> following >>>> script will work on ubuntu >>>> #!/bin/bash >>>> cd /path/to/squeak/directory >>>> ulimit -r 2 >>>> exec setuidgid >> >> ./coglinuxht/squeak -vm display-null >>> -vm >>>> sound-null squeak.image >>>> >>>> >>>> Levente >>>> >>>> >>>>> On Sat, 13 Aug 2016, H. Hirzel wrote: >>>>> >>>>> Hello Levente >>>>> >>>>> I can not figure out what to by reading >>>>> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >>>>> >>>>> For example I do not know which VM I have as they seem to be renamed >>>>> to just squeak. >>> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >>>>> >>>>> >>>>> So it is difficult to find out which of the remarks in >>>>> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >>>>> apply. >>>>> >>>>> I think it is the task of the script >>>>> squeak.sh >>>>> >>>>> to tell me more what to do (script copied in below) >>>>> >>>>> --Hannes >>>>> >>>>> >>>>> >>>>> On 8/13/16, Levente Uzonyi < > >> leves@.elte > >> > wrote: >>>>>> Hi Hannes, >>>>>> >>>>>> It's a VM bug that it prints the wrong URL. You get this error >>> message, >>>>>> because you haven't allowed Squeak to use higher process priorities. >>>>>> Try this link: >>>>>> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >>>>>> >>>>>> Levente >>>>>> >>>>>>> On Sat, 13 Aug 2016, H. Hirzel wrote: >>>>>>> >>>>>>> Hello >>>>>>> >>>>>>> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, >>>>>>> >>>>>>> user8@user8-Latitude:~$ chmod +x squeak.sh >>>>>>> user8@user8-Latitude:~$ ./squeak.sh >>> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >>>>>>> pthread_setschedparam failed: Operation not permitted >>>>>>> Read e.g. >>> http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 >>>>>>> user8@user8-Latitude:~$ uname -a >>>>>>> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP >>>>>>> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >>>>>>> user8@user8-Latitude:~$ >>>>>>> >>>>>>> >>>>>>> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 >>>>>>> was not found on this server. >>>>>>> >>>>>>> Additionally, a 404 Not Found error was encountered while trying to >>>>>>> use an ErrorDocument to handle the request. >>>>>>> >>>>>>> Best wishes >>>>>>> >>>>>>> Hannes >>>>>>> >>>>>>> On 8/13/16, marcel.taeumel < > >> Marcel.Taeumel@ > >> > wrote: >>>>>>>> Hi there, >>>>>>>> >>>>>>>> here are new builds: >>>>>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >>>>>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >>>>>>>> >>>>>>>> Note that the VM version in the file name is true for 32-bit but >>> not >>>>>>>> so >>>>>>>> true >>>>>>>> for 64-bit because the 64-bit Windows VM is different but the >>> version >>>>>>>> comes >>>>>>>> from the macOS VM, which is used to update the image. >>>>>>>> >>>>>>>> Best, >>>>>>>> Marcel >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> View this message in context: >>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >>>>>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. > > We should extend the squeak.sh launcher script, so that it helps with the > Linux setup. :) I'm glad you think so! My only suggestion is that the logic be in its own script, called from squeak.sh so that we can keep squeak.sh as stable as possible while we evolve the setup script. > Best, > Marcel _,,,^..^,,,_ (phone) From eliot.miranda at gmail.com Sun Aug 14 11:03:05 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Aug 14 11:03:11 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> Message-ID: Hi Tim, > On Aug 11, 2016, at 11:14 AM, tim Rowledge wrote: [snip] > The image is frikkin? huge. How on earth do we have 22Mb of ByteArray/BitMap/ByteString around? And it looks like we are keeping a very large amount of MC stuff; 13018 instances of MCVersionInfo/MCVersionName/DateAndTime/Date/Time/UUID. Is that smart? Simply flushing the cached ancestry from the MC browser gets rid of 60% of them and appears to save 3Mb. Except the damn saved image afterwards is exactly the same size! Sigh. Sorry about this. This is due to the immaturity (brokenness) of the Spur compactor. There is a reasonable solution for the release process, which is to modify the 32- to 64-bit bootstrap to allow the VM simulator to clone a 32-bit image having squeezed the free space out of it. I'll try and get in this asap. By year end I hope that Cl?ment and I will have rewritten the compactor to eliminate this embarrassingly bad behaviour. > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: RDR: Rotate Disk Right > > > From eliot.miranda at gmail.com Sun Aug 14 11:04:18 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Sun Aug 14 11:04:23 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> Message-ID: > On Aug 1, 2016, at 12:20 PM, karl ramberg wrote: > > I suggest a mention dedication of the late Seymour Papert in this release. So much of what has founded and driven Smalltalk and Squeak development is related to his ideas on teaching and education. Nice idea > > Best, > Karl > >> On Mon, Aug 1, 2016 at 2:55 PM, marcel.taeumel wrote: >> Hi, there! >> >> It's "feature freeze" time. :-) Please do not try out new features in the >> Trunk for now. If you forgot something, please ask first. We'll find a way. >> >> @Chris: What is needed in the image for the MC History function? There was >> at least one fix for the ServiceEntry left in your inbox, right? >> >> We will now work on correcting some in-image texts, release information, >> etc. We will also work on the release automation scripts using TravisCI, >> smalltalkCI, and GitHub. >> >> The next dates are: >> * Code Freeze on August 14, 23:59 AOE >> * Release between August 15 and 19 >> >> Let's hope that this will work out as expected. :-) >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160814/c06988f2/attachment.htm From estebanlm at gmail.com Sun Aug 14 11:38:32 2016 From: estebanlm at gmail.com (Esteban Lorenzano) Date: Sun Aug 14 11:38:37 2016 Subject: [Vm-dev] [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> Message-ID: <13A9A5E8-BCB8-4256-9F76-43162298888A@gmail.com> > On 14 Aug 2016, at 13:03, Eliot Miranda wrote: > > > Hi Tim, > >> On Aug 11, 2016, at 11:14 AM, tim Rowledge wrote: > [snip] > >> The image is frikkin? huge. How on earth do we have 22Mb of ByteArray/BitMap/ByteString around? And it looks like we are keeping a very large amount of MC stuff; 13018 instances of MCVersionInfo/MCVersionName/DateAndTime/Date/Time/UUID. Is that smart? Simply flushing the cached ancestry from the MC browser gets rid of 60% of them and appears to save 3Mb. Except the damn saved image afterwards is exactly the same size! Sigh. > > Sorry about this. This is due to the immaturity (brokenness) of the Spur compactor. There is a reasonable solution for the release process, which is to modify the 32- to 64-bit bootstrap to allow the VM simulator to clone a 32-bit image having squeezed the free space out of it. I'll try and get in this asap. By year end I hope that Cl?ment and I will have rewritten the compactor to eliminate this embarrassingly bad behaviour. +1 > > >> >> >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> Strange OpCodes: RDR: Rotate Disk Right >> >> >> From hannes.hirzel at gmail.com Sun Aug 14 11:48:58 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Sun Aug 14 11:49:01 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> Message-ID: On 8/14/16, Eliot Miranda wrote: > > >> On Aug 1, 2016, at 12:20 PM, karl ramberg wrote: >> >> I suggest a mention dedication of the late Seymour Papert in this release. >> So much of what has founded and driven Smalltalk and Squeak development is >> related to his ideas on teaching and education. > > Nice idea And maybe StarSqueak ** could be made to work again as well (as a loadable package from SqueakMap) E.g. StarSqueakAntColony new openInWorld I wonder where the code is? *** --Hannes ** http://wiki.squeak.org/squeak/2292 (January 2006) StarSqueak consists of some morphs to do turtle graphics with several turtles at once. *** No entry found in http://map.squeak.org/packagesbyname >> >> Best, >> Karl >> >>> On Mon, Aug 1, 2016 at 2:55 PM, marcel.taeumel >>> wrote: >>> Hi, there! >>> >>> It's "feature freeze" time. :-) Please do not try out new features in >>> the >>> Trunk for now. If you forgot something, please ask first. We'll find a >>> way. >>> >>> @Chris: What is needed in the image for the MC History function? There >>> was >>> at least one fix for the ServiceEntry left in your inbox, right? >>> >>> We will now work on correcting some in-image texts, release information, >>> etc. We will also work on the release automation scripts using TravisCI, >>> smalltalkCI, and GitHub. >>> >>> The next dates are: >>> * Code Freeze on August 14, 23:59 AOE >>> * Release between August 15 and 19 >>> >>> Let's hope that this will work out as expected. :-) >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: >>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > From lists at fniephaus.com Sun Aug 14 12:16:31 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Sun Aug 14 12:16:44 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <7CA5A801-AD7B-4CDF-88BD-13A39619D788@gmail.com> References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> <7CA5A801-AD7B-4CDF-88BD-13A39619D788@gmail.com> Message-ID: -- On Sun, Aug 14, 2016 at 12:52 PM Eliot Miranda wrote: > Hi Fabio, > > On Aug 14, 2016, at 2:57 AM, Fabio Niephaus wrote: > > Heartbeat threaded vms seem to be better, but they require a kernel later > than 2.6.12 and Linux needs to be reconfigured by creating a file. > > I wonder, would it be better to use vms with interval timer in the Linux > bundles instead? > Or shall we extend the squeak.sh launcher script, so that it helps with > the Linux setup? > > It feels like ht vms are for power users and I think it might be better to > trade performance for ease of use in this case (having beginners in mind). > Any other opinions? > > > The way I think of it is that the interval timer is a mechanism with bad > side effects (interrupting system calls potentially affecting foreign > code). So I think of it as a poor man's solution. Since Linux is often > personal, in that the user usually owns the system, it seems worth guiding > the user through being able to use the GT VM if possible. If we go this > route I recommend we pull the logic for setting up the files into a > separate script so that it can be modified independently of squeak.sh to > leave squeak.sh relatively stable as we evolve the setup script. > > I agree that the itimer VMs are simpler, but in this case not better :-/ > Thanks for the clarification. :) For the Squeak release (see [1]), I think it would make sense to check for the Linux kernel and fail with a useful error message when it's too old. Then, check if a squeak.conf exists and if it doesn't, help to create one, inform the user to logout and log back in, and then quit. Since these checks should just be a couple of lines of code, I don't see why it needs to be in a separate script file which will be executed anyway. I hope you agree. Best, Fabio [1] https://github.com/squeak-smalltalk/squeak-app > > > > Best, > Fabio > > -- > > -- > > On Sun, Aug 14, 2016 at 9:43 AM H. Hirzel wrote: > >> Hello Levente >> >> The following on did the job. The 64bit all-in-one runs fine on Ubuntu >> 14.04.1. >> >> Thank you >> >> Hannes >> >> sudo cat >/etc/security/limits.d/squeak.conf <> * hard rtprio 2 >> * soft rtprio 2 >> END >> >> >> (log out and log in) >> >> On 8/14/16, Levente Uzonyi wrote: >> > Hi Hannes, >> > >> > Only ht VMs require higher process priorities, so you're using an ht VM, >> > and the following applies to you: >> > >> > Linux >> > There are two variants of the Linux VMs; those ending in "ht" >> have a >> > heartbeat thread, while those that don't use an interval timer for >> > the >> > heartbeat (the Windows and Mac VMs have a threaded heartbeat). >> The >> > threaded heartbeat is better (for example, signals from the >> interval >> > timer >> > interfere with system calls, etc), but to use it one must have a >> > kernel >> > later than 2.6.12 and configure linux to allow the VM to use >> multiple >> > thread priorities. To do so, create a file called VM.conf where >> VM >> > is >> > the name of the vm executable ("squeak" for the Squeak vm, "nsvm" >> for >> > the Newspeak vm) in /etc/security/limits.d/ with contents: >> > * hard rtprio 2 >> > * soft rtprio 2 >> > >> > e.g. >> > >> > sudo cat >/etc/security/limits.d/squeak.conf <> > * hard rtprio 2 >> > * soft rtprio 2 >> > END >> > sudo cp /etc/security/limits.d/squeak.conf >> /etc/security/limits.d/nsvm.conf >> > >> > Only new processes will have the new security settings. Users must >> > log >> > out and log back in for the limits to take effect. Services must >> > stop >> > and then restart for the changes to take effect. To use this VM >> as a >> > daemon, e.g. under daemontools, you'll need to raise the limit >> > manually. >> > Make sure you're using bash and before your launch command, raise >> the >> > max >> > thread priority limit with ulimit -r 2, e.g. versions of the >> > following >> > script will work on ubuntu >> > #!/bin/bash >> > cd /path/to/squeak/directory >> > ulimit -r 2 >> > exec setuidgid ./coglinuxht/squeak -vm display-null >> -vm >> > sound-null squeak.image >> > >> > >> > Levente >> > >> > >> > On Sat, 13 Aug 2016, H. Hirzel wrote: >> > >> >> Hello Levente >> >> >> >> I can not figure out what to by reading >> >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> >> >> For example I do not know which VM I have as they seem to be renamed >> >> to just squeak. >> >> >> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >> >> >> >> >> >> So it is difficult to find out which of the remarks in >> >> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >> apply. >> >> >> >> I think it is the task of the script >> >> squeak.sh >> >> >> >> to tell me more what to do (script copied in below) >> >> >> >> --Hannes >> >> >> >> >> >> >> >> On 8/13/16, Levente Uzonyi wrote: >> >>> Hi Hannes, >> >>> >> >>> It's a VM bug that it prints the wrong URL. You get this error >> message, >> >>> because you haven't allowed Squeak to use higher process priorities. >> >>> Try this link: >> >>> http://www.mirandabanda.org/files/Cog/VM/latest/README.3732 >> >>> >> >>> Levente >> >>> >> >>> On Sat, 13 Aug 2016, H. Hirzel wrote: >> >>> >> >>>> Hello >> >>>> >> >>>> On Ubuntu 14.04.1 I get an error with All-in-one-64bit, >> >>>> >> >>>> user8@user8-Latitude:~$ chmod +x squeak.sh >> >>>> user8@user8-Latitude:~$ ./squeak.sh >> >>>> >> /home/user8/Squeak5.1beta-16420-64bit-r201608051639-All-in-One.app/Contents/Linux-x86_64/bin/squeak >> >>>> pthread_setschedparam failed: Operation not permitted >> >>>> Read e.g. >> >>>> >> http://www.mirandabanda.org/files/Cog/VM/VM.r201608051639/README.201608051639 >> >>>> user8@user8-Latitude:~$ uname -a >> >>>> Linux user8-Latitude-E6410 3.19.0-25-generic #26~14.04.1-Ubuntu SMP >> >>>> Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux >> >>>> user8@user8-Latitude:~$ >> >>>> >> >>>> >> >>>> The requested URL /files/Cog/VM/VM.r201608051639/README.201608051639 >> >>>> was not found on this server. >> >>>> >> >>>> Additionally, a 404 Not Found error was encountered while trying to >> >>>> use an ErrorDocument to handle the request. >> >>>> >> >>>> Best wishes >> >>>> >> >>>> Hannes >> >>>> >> >>>> On 8/13/16, marcel.taeumel wrote: >> >>>>> Hi there, >> >>>>> >> >>>>> here are new builds: >> >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-32bit/ >> >>>>> http://files.squeak.org/5.1beta/Squeak5.1beta-16420-64bit/ >> >>>>> >> >>>>> Note that the VM version in the file name is true for 32-bit but not >> >>>>> so >> >>>>> true >> >>>>> for 64-bit because the 64-bit Windows VM is different but the >> version >> >>>>> comes >> >>>>> from the macOS VM, which is used to update the image. >> >>>>> >> >>>>> Best, >> >>>>> Marcel >> >>>>> >> >>>>> >> >>>>> >> >>>>> -- >> >>>>> View this message in context: >> >>>>> >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4910909.html >> >>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com >> . >> >>>>> >> >>>>> >> >>>> >> >>>> >> >>> >> >>> >> >> >> >> >> > >> > >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160814/49e040a4/attachment-0001.htm From commits at source.squeak.org Sun Aug 14 13:27:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 13:27:03 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1279.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1279.mcz ==================== Summary ==================== Name: Morphic-mt.1279 Author: mt Time: 14 August 2016, 3:26:29.973355 pm UUID: 4a5c662b-fc42-6e44-b6b5-6d7207f8215e Ancestors: Morphic-mt.1278 Fix and clean-up what happens if you click on a URL in a text but have no Web browser installed. Copy the URL at least into the clipboard then so that you can easily invoke a Web browser on your platform. =============== Diff against Morphic-mt.1278 =============== Item was changed: ----- Method: TextURL>>actOnClickFor: (in category '*Morphic') ----- actOnClickFor: anObject "Do what you can with this URL. Later a web browser." + | m | - | response m | (url beginsWith: 'sqPr://') ifTrue: [ ProjectLoading thumbnailFromUrl: (url copyFrom: 8 to: url size). ^ true "should not get here, but what the heck" ]. (url beginsWith: 'code://') ifTrue: [ Project current addDeferredUIMessage: [self open: (Compiler evaluate: (url allButFirst: 7))]. ^ true "should not get here, but what the heck" ]. "if it's a web browser, tell it to jump" anObject isWebBrowser ifTrue: [anObject jumpToUrl: url. ^ true] ifFalse: [((anObject respondsTo: #model) and: [anObject model isWebBrowser]) ifTrue: [anObject model jumpToUrl: url. ^ true]]. "if it's a morph, see if it is contained in a web browser" (anObject isKindOf: Morph) ifTrue: [ m := anObject. [ m ~= nil ] whileTrue: [ (m isWebBrowser) ifTrue: [ m jumpToUrl: url. ^true ]. (m hasProperty: #webBrowserView) ifTrue: [ m model jumpToUrl: url. ^true ]. m := m owner. ] ]. "no browser in sight. ask if we should start a new browser" + WebBrowser defaultOrNil + ifNil: [Clipboard clipboardText: url] + ifNotNil: [:wb | + (UIManager default + confirm: ('Do you want to open this URL in a Web browser?\\{1}' translated withCRs format: {url}) + title: 'Open Web Page' translated) + ifTrue: [wb openOnUrl: url]. + ^ true ]. - ((self confirm: 'open a browser to view this URL?' translated) and: [WebBrowser default notNil]) ifTrue: [ - WebBrowser default openOnUrl: url. - ^ true ]. + "Couldn't display in a browser. Offer to put up just the source" + (UIManager default + confirm: ('There is no Web browser installed but the URL was copied to the clipboard:\{1}\\Do you want to view the Web page''s source/response anyway?' translated withCRs format: {url}) + title: 'Open Web Page' translated) + + ifTrue: [ + (Smalltalk classNamed: 'WebClient') + ifNotNil: [:wc | Project current addDeferredUIMessage: [(wc httpGet: url) explore]] + ifNil: [HTTPSocket httpShowPage: url]]. + - "couldn't display in a browser. Offer to put up just the source" - - response := (UIManager default - chooseFrom: (Array with: 'View web page as source' translated - with: 'Cancel' translated) - title: 'Couldn''t find a web browser. View\page as source?' withCRs translated). - response = 1 ifTrue: [HTTPSocket httpShowPage: url]. ^ true! From commits at source.squeak.org Sun Aug 14 13:46:32 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 13:46:34 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.92.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.92.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.92 Author: mt Time: 14 August 2016, 3:46:28.731622 pm UUID: e4144644-912a-7d4f-aee5-d221d530a36c Ancestors: HelpSystem-Core-mt.91 Small fix to normalize selectors (needed for release notes). Is there a method to convert any string to a valid selector symbol? =============== Diff against HelpSystem-Core-mt.91 =============== Item was changed: ----- Method: HelpBrowser>>accept: (in category 'actions') ----- accept: text "Accept edited text. Compile it into a HelpTopic" | code parent topicClass topicMethod topicMethodSelector normalizedText colorsToRemove | (self currentParentTopic isNil or: [self currentParentTopic isEditable not]) ifTrue: [^ self inform: 'This help topic cannot be edited.']. self changed: #clearUserEdits. parent := self currentParentTopic. topicClass := parent helpClass. topicMethod := self currentTopic key. + topicMethodSelector := (topicMethod copyReplaceAll: '-' with: '') copyReplaceAll: '.' with: ''. - topicMethodSelector := topicMethod copyReplaceAll: '-' with: ''. normalizedText := text. "Remove default colors for the sake of UI themes." colorsToRemove := {Color black. Color white}. normalizedText runs: (normalizedText runs collect: [:attributes | attributes reject: [:attribute | (((attribute respondsTo: #color) and: [colorsToRemove includes: attribute color]) or: [attribute respondsTo: #font])]]). code := String streamContents:[:s| s nextPutAll: topicMethodSelector. s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'. s crtab; nextPutAll: '"', topicClass name,' edit: ', topicMethod storeString,'"'. s crtab; nextPutAll: '^(HelpTopic'. s crtab: 2; nextPutAll: 'title: ', currentTopic title storeString. s crtab: 2; nextPutAll: 'contents: '. s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: normalizedText]) storeString. s nextPutAll:' readStream nextChunkText)'. s crtab: 3; nextPutAll: 'key: ', topicMethod storeString. ]. topicClass class compile: code classified: ((topicClass class organization categoryOfElement: topicMethodSelector) ifNil:['pages']). parent refresh. parent == self rootTopic ifTrue: [self rootTopic: parent]. self currentTopic: (parent subtopics detect: [:t | t key = topicMethod]).! From commits at source.squeak.org Sun Aug 14 13:49:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 13:49:29 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.46.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.46.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.46 Author: mt Time: 14 August 2016, 3:49:20.204622 pm UUID: ecc5a18e-7f70-c345-9d7f-e0ef7e1f7519 Ancestors: Help-Squeak-Project-mt.45 For external release notes, use Squeak's text serialization instead of HTML. Makes interactive editing of release notes in the help browser easier. Add a convenient file-out method to write the updated release notes back to the file system. Note that editing release notes that where loaded from a file, will compile a new page in SqueakReleaseNotes. Please, do not check-in those pages but keep release notes in external files. =============== Diff against Help-Squeak-Project-mt.45 =============== Item was changed: ----- Method: SqueakReleaseNotes class>>doesNotUnderstand: (in category 'accessing') ----- doesNotUnderstand: msg + | topic stream | msg arguments size > 0 ifTrue: [^ super doesNotUnderstand: msg]. + stream := FileStream fileNamed: ((FileDirectory default directoryNamed: self folderName) fullNameFor: msg selector). + + [topic := (HelpTopic - "For example: doc/release-notes-51" - ^ (HelpTopic title: msg selector + contents: stream nextChunkText withSqueakLineEndings) + key: msg selector; + yourself] + ensure: [stream close]. + + ^ topic! - readOnlyContents: (HtmlReadWriter textFromFileNamed: ((FileDirectory default directoryNamed: self folderName) fullNameFor: msg selector)) ) key: msg selector! Item was added: + ----- Method: SqueakReleaseNotes class>>fileOut: (in category 'support') ----- + fileOut: page + "self fileOut: #releasenotes46" + + FileStream fileNamed: page do: [:strm | + strm nextChunkPutWithStyle: (self perform: page) contents].! Item was changed: ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- pages | dir | dir := FileDirectory default directoryNamed: self folderName. + ^ (dir exists - ^ dir exists ifFalse: [#()] + ifTrue: [(dir entries collect: [:entry | entry name]) sorted: [:a :b | a >= b]]), + (self class organization listAtCategoryNamed: 'pages')! - ifTrue: [(dir entries collect: [:entry | entry name]) sorted: [:a :b | a >= b]]! From commits at source.squeak.org Sun Aug 14 15:30:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 15:30:46 2016 Subject: [squeak-dev] The Trunk: System-mt.888.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.888.mcz ==================== Summary ==================== Name: System-mt.888 Author: mt Time: 14 August 2016, 5:30:21.434782 pm UUID: 5edfc4e3-b75c-5641-bda6-a8f4703f1eb1 Ancestors: System-mt.887 For the duller Squeak theme, also make list filters duller. =============== Diff against System-mt.887 =============== Item was added: + ----- Method: SqueakTheme class>>addDullerScrollables: (in category 'instance creation') ----- + addDullerScrollables: theme + "self createDuller apply" + + theme + set: #filterColor for: #PluggableListMorph to: Color yellow paler duller.! Item was changed: ----- Method: SqueakTheme class>>createDuller (in category 'instance creation') ----- createDuller "self createDuller apply" | name | + name := 'Squeak (duller)'. - name := 'Squeak (duller windows)'. ^ (self named:name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. + self + addDullerWindowColors: theme; + addDullerScrollables: theme. - self addDullerWindowColors: theme. theme]! Item was changed: ----- Method: UserInterfaceTheme class>>cleanUp: (in category 'initialize-release') ----- cleanUp: aggressive aggressive ifTrue: [ All := nil. + SqueakTheme create; createDuller. - SqueakTheme create; createDuller; createClassic. SolarizedTheme createDark; createLight. MonokaiTheme createDark. CommunityTheme createDark].! From commits at source.squeak.org Sun Aug 14 15:46:15 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 15:46:17 2016 Subject: [squeak-dev] The Trunk: System-mt.889.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.889.mcz ==================== Summary ==================== Name: System-mt.889 Author: mt Time: 14 August 2016, 5:45:51.533782 pm UUID: 7a092426-3bbd-b649-8a26-cd2de9273ab4 Ancestors: System-mt.888 Complete Squeak's duller theme by reducing luminance also for other things like menus and buttons. =============== Diff against System-mt.888 =============== Item was changed: ----- Method: SqueakTheme class>>addButtons: (in category 'instance creation') ----- addButtons: theme theme set: #borderColor for: #PluggableButtonMorph to: Color gray; set: #borderWidth for: #PluggableButtonMorph to: 1; set: #borderStyle for: #PluggableButtonMorph to: BorderStyle default; + set: #color for: #PluggableButtonMorph to: (Color gray: 0.91); - set: #color for: #PluggableButtonMorph to: [Color gray: 0.91]; set: #font for: #PluggableButtonMorph to: [Preferences standardButtonFont]; set: #textColor for: #PluggableButtonMorph to: Color black; set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.2] ]; set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. "And the plus-version." theme set: #disabledColor for: #PluggableButtonMorphPlus to: Color transparent; set: #disabledTextColor for: #PluggableButtonMorphPlus to: (Color gray: 0.6). "And the three-phase button." theme derive: #color for: #ThreePhaseButtonMorph from: #PluggableButtonMorph at: #textColor; derive: #font for: #ThreePhaseButtonMorph from: #PluggableButtonMorph; derive: #textColor for: #ThreePhaseButtonMorph from: #PluggableButtonMorph.! Item was added: + ----- Method: SqueakTheme class>>addDullerButtons: (in category 'instance creation') ----- + addDullerButtons: theme + + theme + set: #borderColor for: #PluggableButtonMorph to: Color gray duller; + set: #color for: #PluggableButtonMorph to: (Color gray: 0.91) duller. + + "And the plus-version." + theme + set: #disabledTextColor for: #PluggableButtonMorphPlus to: (Color gray: 0.6) duller.! Item was added: + ----- Method: SqueakTheme class>>addDullerDialogs: (in category 'instance creation') ----- + addDullerDialogs: theme + "self createDuller apply." + + theme + set: #titleColor for: #DialogWindow to: (Color r: 0.658 g: 0.678 b: 0.78) duller; + set: #okColor for: #DialogWindow to: (Color r: 0.49 g: 0.749 b: 0.49) duller; + set: #cancelColor for: #DialogWindow to: (Color r: 1 g: 0.6 b: 0.588) duller; + set: #buttonColor for: #DialogWindow to: (Color r: 0.658 g: 0.678 b: 0.78) twiceLighter duller; + set: #selectionModifier for: #DialogWindow to: [ [:c | Color orange duller ] ]. + + "The List Chooser is a dialog, too." + theme + set: #addColor for: #ListChooser to: Color ocean; + set: #disabledColor for: #ListChooser to: Color gray duller. + + "And the system progress bar." + theme + set: #color for: #SystemProgressBarMorph to: (Color r: 0.977 g: 0.977 b: 0.977) duller; + set: #barColor for: #SystemProgressBarMorph to: (Color r: 0.72 g: 0.72 b: 0.9) duller. + + "And the balloon morphs." + theme + set: #borderColor for: #NewBalloonMorph to: (Color r: 0.46 g: 0.46 b: 0.353) duller; + set: #color for: #NewBalloonMorph to:(Color r: 0.92 g: 0.92 b: 0.706) duller.! Item was added: + ----- Method: SqueakTheme class>>addDullerMenusAndDockingBars: (in category 'instance creation') ----- + addDullerMenusAndDockingBars: theme + + theme + set: #borderColor for: #MenuMorph to: Color gray duller; + set: #color for: #MenuMorph to: (Color gray: 0.9) duller; + set: #lineColor for: #MenuMorph to: (Color gray: 0.9) duller. + + theme + set: #disabledTextColor for: #MenuItemMorph to: Color gray duller; + set: #selectionColor for: #MenuItemMorph to: (Color r: 0.4 g: 0.5 b: 0.7) duller.! Item was changed: ----- Method: SqueakTheme class>>addSyntaxHighlighting: (in category 'instance creation') ----- addSyntaxHighlighting: theme + "This was the former sub-dued highlighting. + self create apply. + " - "This was the former sub-dued highlighting." theme + set: #color for: #TextAction to: Color aqua; - set: #color for: #TextAction to: (Color r: 0.4 g: 0.0 b: 1); set: #default for: #SHTextStylerST80 to: {Color black}; set: #invalid for: #SHTextStylerST80 to: {Color red}; set: #excessCode for: #SHTextStylerST80 to: {Color red}; set: #comment for: #SHTextStylerST80 to: {Color cyan muchDarker}; set: #unfinishedComment for: #SHTextStylerST80 to: {Color red muchDarker. TextEmphasis italic}; set: #'$' for: #SHTextStylerST80 to: {Color red muchDarker}; set: #character for: #SHTextStylerST80 to: {Color red muchDarker}; set: #integer for: #SHTextStylerST80 to: {Color red muchDarker}; set: #number for: #SHTextStylerST80 to: {Color red muchDarker}; set: #- for: #SHTextStylerST80 to: {Color red muchDarker}; set: #symbol for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #stringSymbol for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #literalArray for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #string for: #SHTextStylerST80 to: {Color magenta muchDarker. TextEmphasis normal}; set: #unfinishedString for: #SHTextStylerST80 to: {Color red. TextEmphasis normal}; set: #assignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #literal for: #SHTextStylerST80 to: {nil. TextEmphasis italic}; set: #keyword for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #binary for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #unary for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #incompleteKeyword for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #incompleteBinary for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {Color red}; set: #undefinedBinary for: #SHTextStylerST80 to: {Color red}; set: #undefinedUnary for: #SHTextStylerST80 to: {Color red}; set: #patternKeyword for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternBinary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternUnary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #self for: #SHTextStylerST80 to: {Color red muchDarker}; set: #super for: #SHTextStylerST80 to: {Color red muchDarker}; set: #true for: #SHTextStylerST80 to: {Color red muchDarker}; set: #false for: #SHTextStylerST80 to: {Color red muchDarker}; set: #nil for: #SHTextStylerST80 to: {Color red muchDarker}; set: #thisContext for: #SHTextStylerST80 to: {Color red muchDarker}; set: #return for: #SHTextStylerST80 to: {Color red muchDarker}; set: #patternArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #methodArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockPatternArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #argument for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockArgColon for: #SHTextStylerST80 to: {Color black}; set: #leftParenthesis for: #SHTextStylerST80 to: {Color black}; set: #rightParenthesis for: #SHTextStylerST80 to: {Color black}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {Color green darker}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {Color green darker}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {Color orange darker}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {Color orange darker}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {Color blue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {Color blue}; set: #blockStart for: #SHTextStylerST80 to: {Color black}; set: #blockEnd for: #SHTextStylerST80 to: {Color black}; set: #blockStart1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #blockEnd1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #blockStart2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #blockEnd2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #blockStart3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #blockEnd3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #blockStart4 for: #SHTextStylerST80 to: {Color green darker}; set: #blockEnd4 for: #SHTextStylerST80 to: {Color green darker}; set: #blockStart5 for: #SHTextStylerST80 to: {Color orange darker}; set: #blockEnd5 for: #SHTextStylerST80 to: {Color orange darker}; set: #blockStart6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #blockEnd6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #blockStart7 for: #SHTextStylerST80 to: {Color blue}; set: #blockEnd7 for: #SHTextStylerST80 to: {Color blue}; set: #arrayStart for: #SHTextStylerST80 to: {Color black}; set: #arrayEnd for: #SHTextStylerST80 to: {Color black}; set: #arrayStart1 for: #SHTextStylerST80 to: {Color black}; set: #arrayEnd1 for: #SHTextStylerST80 to: {Color black}; set: #byteArrayStart for: #SHTextStylerST80 to: {Color black}; set: #byteArrayEnd for: #SHTextStylerST80 to: {Color black}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {Color black}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {Color black}; set: #leftBrace for: #SHTextStylerST80 to: {Color black}; set: #rightBrace for: #SHTextStylerST80 to: {Color black}; set: #cascadeSeparator for: #SHTextStylerST80 to: {Color black}; set: #statementSeparator for: #SHTextStylerST80 to: {Color black}; set: #externalCallType for: #SHTextStylerST80 to: {Color black}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {Color black}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {Color black}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {Color black}; set: #methodTempBar for: #SHTextStylerST80 to: {Color gray}; set: #blockTempBar for: #SHTextStylerST80 to: {Color gray}; set: #blockArgsBar for: #SHTextStylerST80 to: {Color gray}; set: #primitive for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #module for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #blockTempVar for: #SHTextStylerST80 to: {Color gray}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {Color gray}; set: #instVar for: #SHTextStylerST80 to: {Color black}; set: #workspaceVar for: #SHTextStylerST80 to: {Color black}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {Color red}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {Color gray darker. {TextEmphasis italic. TextEmphasis underlined}}; set: #tempVar for: #SHTextStylerST80 to: {Color gray darker}; set: #patternTempVar for: #SHTextStylerST80 to: {Color gray darker}; set: #poolConstant for: #SHTextStylerST80 to: {Color gray muchDarker}; set: #classVar for: #SHTextStylerST80 to: {Color gray muchDarker}; set: #globalVar for: #SHTextStylerST80 to: {Color black}. "And the text differ" theme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor red }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor blue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: SqueakTheme class>>createDuller (in category 'instance creation') ----- createDuller "self createDuller apply" | name | name := 'Squeak (duller)'. ^ (self named:name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. self addDullerWindowColors: theme; + addDullerScrollables: theme; + addDullerDialogs: theme; + addDullerMenusAndDockingBars: theme; + addDullerButtons: theme. + + theme set: #color for: #TextAction to: Color ocean. + - addDullerScrollables: theme. theme]! From herbertkoenig at gmx.net Sun Aug 14 16:11:35 2016 From: herbertkoenig at gmx.net (Herbert =?UTF-8?B?S8O2bmln?=) Date: Sun Aug 14 16:11:40 2016 Subject: [squeak-dev] Squeak under Raspbian from a USB Dongle In-Reply-To: References: Message-ID: <20160814181135.53dc33aa@herpi5> Am Fri, 12 Aug 2016 23:53:58 +0200 schrieb Tim Felgentreff : > Hi > > You need to mount with the exec option (or the right umask). Then all > files are executable. > > Best, > Tim > Hi Tim, thanks for the hint but it seems my linux fu is lacking. USB dongles are auto mounted under Raspbian so I first did: sudo umount /media/pi/INTENSO then, after some searching: sudo mount -o exec /dev/disk/by-label/INTENSO /media/intenso That makes all scripts (i found :-)) and the VM executable but neither start in a terminal not start without a terminal works. For a very short time a window comes up and then closes so I don't see an error. It works on my Windows 7 laptop and for the experiment I use a Squeak 5.0 all in one. Cheers, Herbert > Am 12.08.2016 22:51 schrieb "Herbert K?nig" : > > > Hi, > > > > I assume it's not possible to run Squeak all in one from a USB > > dongle under linux because one FAT does not have an executable flag. > > > > Or is there a way? Would be too cool to move a USB dongle from my > > Windows Laptop to the RasPi. > > > > Cheers, > > > > > > Herbert > > > > > > From commits at source.squeak.org Sun Aug 14 16:45:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 16:45:08 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.93.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.93.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.93 Author: mt Time: 14 August 2016, 6:45:02.594782 pm UUID: 246b0b54-03fd-bb4b-9ec3-e9a8d8b70635 Ancestors: HelpSystem-Core-mt.92 Well, adds support for directory/file-based help topics. Need this for writing release notes. =============== Diff against HelpSystem-Core-mt.92 =============== Item was added: + ----- Method: AbstractHelpTopic>>accept:for: (in category 'editing') ----- + accept: newContents for: subtopic + "If this topic is editable, this will be the callback to update its contents."! Item was added: + ----- Method: ClassBasedHelpTopic>>accept:for: (in category 'editing') ----- + accept: newContents for: subtopic + + | topicClass topicMethodSelector code | + topicClass := self helpClass. + topicMethodSelector := (subtopic key copyReplaceAll: '-' with: '') copyReplaceAll: '.' with: ''. + + code := String streamContents:[:s| + s nextPutAll: topicMethodSelector. + s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'. + s crtab; nextPutAll: '"', topicClass name,' edit: ', subtopic key storeString,'"'. + s crtab; nextPutAll: '^(HelpTopic'. + s crtab: 2; nextPutAll: 'title: ', subtopic title storeString. + s crtab: 2; nextPutAll: 'contents: '. + s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: newContents]) storeString. + s nextPutAll:' readStream nextChunkText)'. + s crtab: 3; nextPutAll: 'key: ', subtopic key storeString. + ]. + + topicClass class + compile: code + classified: ((topicClass class organization categoryOfElement: topicMethodSelector) ifNil:['pages']).! Item was added: + AbstractHelpTopic subclass: #DirectoryBasedHelpTopic + instanceVariableNames: 'directoryEntry title filter sortBlock subtopics' + classVariableNames: '' + poolDictionaries: '' + category: 'HelpSystem-Core-Model'! Item was added: + ----- Method: DirectoryBasedHelpTopic>><= (in category 'comparing') ----- + <= anotherTopic + + ^ anotherTopic class == FileBasedHelpTopic + ifTrue: [true] + ifFalse: [super <= anotherTopic]! Item was added: + ----- Method: DirectoryBasedHelpTopic>>accept:for: (in category 'editing') ----- + accept: newContents for: subtopic + + FileStream fileNamed: subtopic fileEntry fullName do: [:strm | + strm nextChunkPutWithStyle: newContents]. + + ! Item was added: + ----- Method: DirectoryBasedHelpTopic>>contents (in category 'accessing') ----- + contents + + ^ 'This is a directory-based help topic. It''s contents are in ', self directoryEntry fullName! Item was added: + ----- Method: DirectoryBasedHelpTopic>>directoryEntry (in category 'accessing') ----- + directoryEntry + ^ directoryEntry! Item was added: + ----- Method: DirectoryBasedHelpTopic>>directoryEntry: (in category 'accessing') ----- + directoryEntry: aDirectoryEntry + directoryEntry := aDirectoryEntry.! Item was added: + ----- Method: DirectoryBasedHelpTopic>>editable (in category 'testing') ----- + editable + ^ true! Item was added: + ----- Method: DirectoryBasedHelpTopic>>filter (in category 'accessing') ----- + filter + + ^ filter ifNil: [filter := '*.*']! Item was added: + ----- Method: DirectoryBasedHelpTopic>>filter: (in category 'accessing') ----- + filter: aFilterPattern + + filter := aFilterPattern.! Item was added: + ----- Method: DirectoryBasedHelpTopic>>isEditable (in category 'testing') ----- + isEditable + ^ true! Item was added: + ----- Method: DirectoryBasedHelpTopic>>refresh (in category 'updating') ----- + refresh + + subtopics := nil. + self changed: #subtopicsUpdated.! Item was added: + ----- Method: DirectoryBasedHelpTopic>>sortBlock (in category 'accessing') ----- + sortBlock + ^ sortBlock ifNil: [ sortBlock := [:a :b | true] ]! Item was added: + ----- Method: DirectoryBasedHelpTopic>>sortBlock: (in category 'accessing') ----- + sortBlock: aBlock + sortBlock := aBlock.! Item was added: + ----- Method: DirectoryBasedHelpTopic>>subtopics (in category 'accessing') ----- + subtopics + + | directory | + subtopics ifNotNil: [^ subtopics]. + + directory := self directoryEntry asFileDirectory. + ^ subtopics := (directory entries + select: [:ea | ea isDirectory] + thenCollect: [:ea | DirectoryBasedHelpTopic new directoryEntry: ea]), + + ((directory fileNamesMatching: self filter) + collect: [:fileName | FileBasedHelpTopic new + fileEntry: (directory entryAt: fileName); + sortBlock: self sortBlock])! Item was added: + ----- Method: DirectoryBasedHelpTopic>>title (in category 'accessing') ----- + title + ^ title ifNil: [self directoryEntry name]! Item was added: + ----- Method: DirectoryBasedHelpTopic>>title: (in category 'accessing') ----- + title: aString + title := aString.! Item was added: + AbstractHelpTopic subclass: #FileBasedHelpTopic + instanceVariableNames: 'contents fileEntry sortBlock' + classVariableNames: '' + poolDictionaries: '' + category: 'HelpSystem-Core-Model'! Item was added: + ----- Method: FileBasedHelpTopic>><= (in category 'comparing') ----- + <= anotherTopic + + ^ self class == anotherTopic class + ifTrue: [self sortBlock value: self value: anotherTopic] + ifFalse: [super <= anotherTopic]! Item was added: + ----- Method: FileBasedHelpTopic>>contents (in category 'accessing') ----- + contents + + ^ contents ifNil: [ + contents := fileEntry readStream nextChunkText withSqueakLineEndings].! Item was added: + ----- Method: FileBasedHelpTopic>>fileEntry (in category 'accessing') ----- + fileEntry + ^ fileEntry! Item was added: + ----- Method: FileBasedHelpTopic>>fileEntry: (in category 'accessing') ----- + fileEntry: aFileEntry + fileEntry := aFileEntry. + contents := nil.! Item was added: + ----- Method: FileBasedHelpTopic>>key (in category 'accessing') ----- + key + + ^ self fileEntry fullName! Item was added: + ----- Method: FileBasedHelpTopic>>sortBlock (in category 'accessing') ----- + sortBlock + ^ sortBlock ifNil: [sortBlock := [:a :b | true]]! Item was added: + ----- Method: FileBasedHelpTopic>>sortBlock: (in category 'accessing') ----- + sortBlock: aBlock + sortBlock := aBlock.! Item was added: + ----- Method: FileBasedHelpTopic>>title (in category 'accessing') ----- + title + + ^ self fileEntry name! Item was changed: ----- Method: HelpBrowser>>accept: (in category 'actions') ----- accept: text "Accept edited text. Compile it into a HelpTopic" + | parent currentKey normalizedText colorsToRemove | - | code parent topicClass topicMethod topicMethodSelector normalizedText colorsToRemove | (self currentParentTopic isNil or: [self currentParentTopic isEditable not]) ifTrue: [^ self inform: 'This help topic cannot be edited.']. self changed: #clearUserEdits. - parent := self currentParentTopic. - topicClass := parent helpClass. - topicMethod := self currentTopic key. - topicMethodSelector := (topicMethod copyReplaceAll: '-' with: '') copyReplaceAll: '.' with: ''. - normalizedText := text. - "Remove default colors for the sake of UI themes." + normalizedText := text. colorsToRemove := {Color black. Color white}. normalizedText runs: (normalizedText runs collect: [:attributes | attributes reject: [:attribute | (((attribute respondsTo: #color) and: [colorsToRemove includes: attribute color]) or: [attribute respondsTo: #font])]]). - - code := String streamContents:[:s| - s nextPutAll: topicMethodSelector. - s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'. - s crtab; nextPutAll: '"', topicClass name,' edit: ', topicMethod storeString,'"'. - s crtab; nextPutAll: '^(HelpTopic'. - s crtab: 2; nextPutAll: 'title: ', currentTopic title storeString. - s crtab: 2; nextPutAll: 'contents: '. - s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: normalizedText]) storeString. - s nextPutAll:' readStream nextChunkText)'. - s crtab: 3; nextPutAll: 'key: ', topicMethod storeString. - ]. + parent := self currentParentTopic. + currentKey := self currentTopic key. + + parent accept: normalizedText for: self currentTopic. - topicClass class - compile: code - classified: ((topicClass class organization categoryOfElement: topicMethodSelector) ifNil:['pages']). parent refresh. parent == self rootTopic ifTrue: [self rootTopic: parent]. + self currentTopic: (parent subtopics detect: [:t | t key = currentKey]).! - self currentTopic: (parent subtopics detect: [:t | t key = topicMethod]).! From commits at source.squeak.org Sun Aug 14 16:51:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 16:51:54 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.94.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.94.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.94 Author: mt Time: 14 August 2016, 6:51:48.413782 pm UUID: 41817768-5d0c-c34e-b0f3-10ee04f4eb00 Ancestors: HelpSystem-Core-mt.93 Fix directory based help topics for invalid directories. =============== Diff against HelpSystem-Core-mt.93 =============== Item was changed: ----- Method: DirectoryBasedHelpTopic>>contents (in category 'accessing') ----- contents + ^ self directoryEntry + ifNil: ['This directory-based help topic has no valid directory entry set.' translated] + ifNotNil: ['This is a directory-based help topic. It''s contents are in ', self directoryEntry fullName]! - ^ 'This is a directory-based help topic. It''s contents are in ', self directoryEntry fullName! Item was changed: ----- Method: DirectoryBasedHelpTopic>>subtopics (in category 'accessing') ----- subtopics | directory | subtopics ifNotNil: [^ subtopics]. + self directoryEntry ifNil: [^ #()]. directory := self directoryEntry asFileDirectory. ^ subtopics := (directory entries select: [:ea | ea isDirectory] thenCollect: [:ea | DirectoryBasedHelpTopic new directoryEntry: ea]), ((directory fileNamesMatching: self filter) collect: [:fileName | FileBasedHelpTopic new fileEntry: (directory entryAt: fileName); sortBlock: self sortBlock])! Item was changed: ----- Method: DirectoryBasedHelpTopic>>title (in category 'accessing') ----- title + ^ title ifNil: [self directoryEntry ifNil: ['(invalid)'] ifNotNil: [:d | d name]]! - ^ title ifNil: [self directoryEntry name]! From commits at source.squeak.org Sun Aug 14 16:53:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 16:53:02 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.47.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.47.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.47 Author: mt Time: 14 August 2016, 6:52:52.253782 pm UUID: be434b75-ac75-db4f-b00d-2c3ab8577133 Ancestors: Help-Squeak-Project-mt.46 Make release notes use a directory-based help topic. This means that you have to put the release notes files into the correct directory (here: 'release-notes'). =============== Diff against Help-Squeak-Project-mt.46 =============== Item was added: + ----- Method: SqueakReleaseNotes class>>asHelpTopic (in category 'as yet unclassified') ----- + asHelpTopic + + ^ DirectoryBasedHelpTopic new + directoryEntry: (FileDirectory default entryAt: 'release-notes' ifAbsent: []); + sortBlock: [:t1 :t2 | t1 title >= t2 title]; + title: self bookName! Item was removed: - ----- Method: SqueakReleaseNotes class>>doesNotUnderstand: (in category 'accessing') ----- - doesNotUnderstand: msg - - | topic stream | - msg arguments size > 0 ifTrue: [^ super doesNotUnderstand: msg]. - - stream := FileStream fileNamed: ((FileDirectory default directoryNamed: self folderName) fullNameFor: msg selector). - - [topic := (HelpTopic - title: msg selector - contents: stream nextChunkText withSqueakLineEndings) - key: msg selector; - yourself] - ensure: [stream close]. - - ^ topic! Item was removed: - ----- Method: SqueakReleaseNotes class>>fileOut: (in category 'support') ----- - fileOut: page - "self fileOut: #releasenotes46" - - FileStream fileNamed: page do: [:strm | - strm nextChunkPutWithStyle: (self perform: page) contents].! Item was removed: - ----- Method: SqueakReleaseNotes class>>folderName (in category 'accessing') ----- - folderName - - ^ 'release-notes'! Item was removed: - ----- Method: SqueakReleaseNotes class>>pages (in category 'accessing') ----- - pages - - | dir | - dir := FileDirectory default directoryNamed: self folderName. - ^ (dir exists - ifFalse: [#()] - ifTrue: [(dir entries collect: [:entry | entry name]) sorted: [:a :b | a >= b]]), - (self class organization listAtCategoryNamed: 'pages')! From ma.chris.m at gmail.com Sun Aug 14 18:21:52 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Sun Aug 14 18:22:35 2016 Subject: [squeak-dev] The Trunk: Network-ul.182.mcz In-Reply-To: References: <57af74ea.d7a8370a.c9fd9.5448SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Yep. They did. On Sat, Aug 13, 2016 at 4:03 PM, Levente Uzonyi wrote: > Hi Chris, > > Let me know if the tests pass. > > Levente > > On Sat, 13 Aug 2016, Chris Muller wrote: > >> This relieves a lot of pressure on the "Magma for Squeak 5.1" release. >> Very much appreciated, thanks Levente. >> >> Best, >> Chris >> >> On Sat, Aug 13, 2016 at 2:28 PM, wrote: >>> >>> Levente Uzonyi uploaded a new version of Network to project The Trunk: >>> http://source.squeak.org/trunk/Network-ul.182.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Network-ul.182 >>> Author: ul >>> Time: 13 August 2016, 9:27:46.042121 pm >>> UUID: 55cbd441-e7a5-4651-a45f-45e6e94e47aa >>> Ancestors: Network-ul.180 >>> >>> Socket: >>> - use #isConnected instead of #isThisEndConnected and >>> #isOtherEndConnected while the VMs don't fully support half-open connections >>> SocketStream: >>> - do not recreate the buffers in #resetBuffers when nothing would change >>> >>> =============== Diff against Network-ul.180 =============== >>> >>> Item was changed: >>> ----- Method: Socket>>closeAndDestroy: (in category 'connection >>> open/close') ----- >>> closeAndDestroy: timeoutSeconds >>> "First, try to close this connection gracefully. If the close >>> attempt fails or times out, abort the connection. In either case, destroy >>> the socket. Do nothing if the socket has already been destroyed (i.e., if >>> its socketHandle is nil)." >>> >>> socketHandle ifNil: [ ^self ]. >>> + self isConnected ifTrue: [ >>> - self isThisEndConnected ifTrue: [ >>> self close. "Close this end." ]. >>> (self waitForDisconnectionFor: timeoutSeconds) ifFalse: [ >>> "The other end has not closed the connect yet, so we will >>> just abort it." >>> self primSocketAbortConnection: socketHandle ]. >>> self destroy! >>> >>> Item was changed: >>> ----- Method: Socket>>discardReceivedData (in category 'receiving') >>> ----- >>> discardReceivedData >>> "Discard any data received up until now, and return the number of >>> bytes discarded." >>> >>> | buf totalBytesDiscarded | >>> buf := String new: 10000. >>> totalBytesDiscarded := 0. >>> + [self isConnected and: [self dataAvailable]] whileTrue: [ >>> - [self isOtherEndConnected and: [self dataAvailable]] whileTrue: [ >>> totalBytesDiscarded := >>> totalBytesDiscarded + (self receiveDataInto: >>> buf)]. >>> ^ totalBytesDiscarded >>> ! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForDataFor:ifClosed:ifTimedOut: (in category >>> 'waiting') ----- >>> waitForDataFor: timeout ifClosed: closedBlock ifTimedOut: timedOutBlock >>> "Wait for the given nr of seconds for data to arrive." >>> >>> | deadline timeLeft | >>> socketHandle ifNil: [ ^closedBlock value ]. >>> deadline := Time millisecondClockValue + (timeout * 1000) >>> truncated. >>> [ >>> (self primSocketReceiveDataAvailable: socketHandle) >>> ifTrue: [ ^self ]. >>> + self isConnected ifFalse: [ ^closedBlock value ]. >>> - self isOtherEndConnected ifFalse: [ ^closedBlock value ]. >>> (timeLeft := deadline - Time millisecondClockValue) <= 0 >>> ifTrue: [ ^timedOutBlock value ]. >>> "Providing a maximum for the time for waiting is a >>> workaround for a VM bug which causes sockets waiting for data forever in >>> some rare cases, because the semaphore doesn't get signaled. Remove the >>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>> fixed." >>> readSemaphore waitTimeoutMSecs: >>> (timeLeft min: self class >>> maximumReadSemaphoreWaitTimeout) ] repeat! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForDataIfClosed: (in category 'waiting') >>> ----- >>> waitForDataIfClosed: closedBlock >>> "Wait indefinitely for data to arrive. This method will block >>> until >>> data is available or the socket is closed." >>> >>> socketHandle ifNil: [ ^closedBlock value ]. >>> [ >>> (self primSocketReceiveDataAvailable: socketHandle) >>> ifTrue: [ ^self ]. >>> + self isConnected ifFalse: [ ^closedBlock value ]. >>> - self isOtherEndConnected ifFalse: [ ^closedBlock value >>> ]. >>> "ul 8/13/2014 21:16 >>> Providing a maximum for the time for waiting is a >>> workaround for a VM bug which >>> causes sockets waiting for data forever in some rare >>> cases, because the semaphore >>> doesn't get signaled. Replace the ""waitTimeoutMSecs: >>> self class maximumReadSemaphoreWaitTimeout"" >>> part with ""wait"" when the bug is fixed." >>> readSemaphore waitTimeoutMSecs: self class >>> maximumReadSemaphoreWaitTimeout ] repeat! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForDisconnectionFor: (in category 'waiting') >>> ----- >>> waitForDisconnectionFor: timeout >>> "Wait for the given nr of seconds for the connection to be >>> broken. >>> Return true if it is broken by the deadline, false if not. >>> The client should know the connection is really going to be >>> closed >>> (e.g., because he has called 'close' to send a close request to >>> the other end) >>> before calling this method." >>> >>> | deadline | >>> deadline := Time millisecondClockValue + (timeout * 1000) >>> truncated. >>> + [ self isConnected and: [ deadline - Time millisecondClockValue > >>> 0 ] ] >>> - [ self isOtherEndConnected and: [ deadline - Time >>> millisecondClockValue > 0 ] ] >>> whileTrue: [ >>> self discardReceivedData. >>> "Providing a maximum for the time for waiting is >>> a workaround for a VM bug which causes sockets waiting for data forever in >>> some rare cases, because the semaphore doesn't get signaled. Remove the >>> ""min: self class maximumReadSemaphoreWaitTimeout"" part when the bug is >>> fixed." >>> readSemaphore waitTimeoutMSecs: >>> (deadline - Time millisecondClockValue >>> min: self class maximumReadSemaphoreWaitTimeout) ]. >>> + ^self isConnected! >>> - ^self isOtherEndConnected! >>> >>> Item was changed: >>> ----- Method: Socket>>waitForSendDoneFor: (in category 'waiting') ----- >>> waitForSendDoneFor: timeout >>> "Wait up until the given deadline for the current send operation >>> to complete. Return true if it completes by the deadline, false if not." >>> >>> | deadline timeleft | >>> deadline := Time millisecondClockValue + (timeout * 1000) >>> truncated. >>> [ >>> (self primSocketSendDone: socketHandle) ifTrue: [ ^true >>> ]. >>> + self isConnected ifFalse: [ ^false ]. >>> - self isThisEndConnected ifFalse: [ ^false ]. >>> (timeleft := deadline - Time millisecondClockValue) <= 0 >>> ifTrue: [ ^false ]. >>> writeSemaphore waitTimeoutMSecs: timeleft ] repeat! >>> >>> Item was changed: >>> ----- Method: SocketStream>>resetBuffers (in category 'private') ----- >>> resetBuffers >>> "Recreate the buffers with default start sizes." >>> >>> + (inBuffer isNil or: [ inBuffer size ~= bufferSize ]) ifTrue: [ >>> + inBuffer := self streamBuffer: bufferSize ]. >>> - inBuffer := self streamBuffer: bufferSize. >>> lastRead := 0. >>> inNextToWrite := 1. >>> + (outBuffer isNil or: [ outBuffer size ~= bufferSize ]) ifTrue: [ >>> + outBuffer := self streamBuffer: bufferSize ]. >>> - outBuffer := self streamBuffer: bufferSize. >>> outNextToWrite := 1! >>> >>> >> >> > From tim at rowledge.org Sun Aug 14 18:33:27 2016 From: tim at rowledge.org (tim Rowledge) Date: Sun Aug 14 18:33:30 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> Message-ID: <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> > On 14-08-2016, at 12:43 AM, H. Hirzel wrote: > > Hello Levente > > The following on did the job. The 64bit all-in-one runs fine on Ubuntu 14.04.1. I guess an obvious question here is why on earth ubuntu is using such an old kernel. Raspbian (based on debian and so very conservative) got past that point at least 18 months ago. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: BBL: Branch on Burned out Light From leves at caesar.elte.hu Sun Aug 14 18:48:33 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Aug 14 18:48:37 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> Message-ID: On Sun, 14 Aug 2016, tim Rowledge wrote: > >> On 14-08-2016, at 12:43 AM, H. Hirzel wrote: >> >> Hello Levente >> >> The following on did the job. The 64bit all-in-one runs fine on Ubuntu 14.04.1. > > I guess an obvious question here is why on earth ubuntu is using such an old kernel. Raspbian (based on debian and so very conservative) got past that point at least 18 months ago. It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o 4.4 if you want to. Levente > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: BBL: Branch on Burned out Light > > > > From hannes.hirzel at gmail.com Sun Aug 14 21:03:31 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Sun Aug 14 21:03:35 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> Message-ID: For the case I reported uname -r gives 3.19.0-25-generic for the kernel version --Hannes On 8/14/16, Levente Uzonyi wrote: > On Sun, 14 Aug 2016, tim Rowledge wrote: > >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel wrote: >>> >>> Hello Levente >>> >>> The following on did the job. The 64bit all-in-one runs fine on Ubuntu >>> 14.04.1. >> >> I guess an obvious question here is why on earth ubuntu is using such an >> old kernel. Raspbian (based on debian and so very conservative) got past >> that point at least 18 months ago. > > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o 4.4 if > you want to. > > Levente > >> >> >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> Strange OpCodes: BBL: Branch on Burned out Light >> >> >> >> > > From lists at fniephaus.com Sun Aug 14 21:49:11 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Sun Aug 14 21:49:26 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> Message-ID: Here are the helper functions I came up with for the squeak.sh launcher to ensure that the kernel is newer than 2.6.12 and that a squeak.conf exists: https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe Best, Fabio -- On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel wrote: > For the case I reported > > uname -r > > gives > > 3.19.0-25-generic > > for the kernel version > > --Hannes > > On 8/14/16, Levente Uzonyi wrote: > > On Sun, 14 Aug 2016, tim Rowledge wrote: > > > >> > >>> On 14-08-2016, at 12:43 AM, H. Hirzel wrote: > >>> > >>> Hello Levente > >>> > >>> The following on did the job. The 64bit all-in-one runs fine on Ubuntu > >>> 14.04.1. > >> > >> I guess an obvious question here is why on earth ubuntu is using such an > >> old kernel. Raspbian (based on debian and so very conservative) got past > >> that point at least 18 months ago. > > > > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o 4.4 if > > you want to. > > > > Levente > > > >> > >> > >> tim > >> -- > >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > >> Strange OpCodes: BBL: Branch on Burned out Light > >> > >> > >> > >> > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160814/a0d5f1bb/attachment.htm From commits at source.squeak.org Sun Aug 14 21:55:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 14 21:55:05 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160814215502.5861.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068585.html Name: System-mt.886 Ancestors: System-cmm.885 ProgressMorph is themed via SystemProgressMorph at the moment. There is no effect in writing theme settings for ProgressMorph in UI themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068586.html Name: UpdateStream-mt.7 Ancestors: UpdateStream-mt.6 Fix redundant World installing. Make image start-up faster. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068587.html Name: System-mt.887 Ancestors: System-mt.886 Fix redundant World installing. Make image start-up faster. Fix resetting of author name on image start-up. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068588.html Name: ReleaseBuilder-mt.155 Ancestors: ReleaseBuilder-mt.154 When preparing the environment, do a cycle to upate all invalid caches. This will make the first image start-up faster. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068589.html Name: HelpSystem-Core-mt.91 Ancestors: HelpSystem-Core-mt.90 Make help text editing more robust. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068590.html Name: Morphic-mt.1277 Ancestors: Morphic-mt.1276 Fixes a bug regarding text actions and code evaluation. Do it deferred so that the rest of event handling does not intervene. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068591.html Name: Morphic-mt.1278 Ancestors: Morphic-mt.1277 Make the Help-Browser port of Squeak Swiki at least accessible via the main docking bar help menu. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068592.html Name: Environments-mt.62 Ancestors: Environments-kfr.61 Embed help on Environments into Squeak Help. Make book naming consistent with help on WebClient etc. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068593.html Name: Help-Squeak-Project-mt.45 Ancestors: Help-Squeak-Project-mt.44 Always put SqueakHelp on the top in the help browser. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068594.html Name: Monticello-mt.645 Ancestors: Monticello-mt.644 The naming is still a little bit unintuitive, but make it easier for scripts to browse working copies in a snapshot browser. (Use currently use this to write interactive release notes). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068595.html Name: Morphic-mt.1279 Ancestors: Morphic-mt.1278 Fix and clean-up what happens if you click on a URL in a text but have no Web browser installed. Copy the URL at least into the clipboard then so that you can easily invoke a Web browser on your platform. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068596.html Name: HelpSystem-Core-mt.92 Ancestors: HelpSystem-Core-mt.91 Small fix to normalize selectors (needed for release notes). Is there a method to convert any string to a valid selector symbol? ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068597.html Name: Help-Squeak-Project-mt.46 Ancestors: Help-Squeak-Project-mt.45 For external release notes, use Squeak's text serialization instead of HTML. Makes interactive editing of release notes in the help browser easier. Add a convenient file-out method to write the updated release notes back to the file system. Note that editing release notes that where loaded from a file, will compile a new page in SqueakReleaseNotes. Please, do not check-in those pages but keep release notes in external files. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068598.html Name: System-mt.888 Ancestors: System-mt.887 For the duller Squeak theme, also make list filters duller. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068599.html Name: System-mt.889 Ancestors: System-mt.888 Complete Squeak's duller theme by reducing luminance also for other things like menus and buttons. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068600.html Name: HelpSystem-Core-mt.93 Ancestors: HelpSystem-Core-mt.92 Well, adds support for directory/file-based help topics. Need this for writing release notes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068601.html Name: HelpSystem-Core-mt.94 Ancestors: HelpSystem-Core-mt.93 Fix directory based help topics for invalid directories. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068602.html Name: Help-Squeak-Project-mt.47 Ancestors: Help-Squeak-Project-mt.46 Make release notes use a directory-based help topic. This means that you have to put the release notes files into the correct directory (here: 'release-notes'). ============================================= From commits at source.squeak.org Mon Aug 15 06:56:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 06:56:08 2016 Subject: [squeak-dev] The Trunk: MonticelloConfigurations-mt.144.mcz Message-ID: Marcel Taeumel uploaded a new version of MonticelloConfigurations to project The Trunk: http://source.squeak.org/trunk/MonticelloConfigurations-mt.144.mcz ==================== Summary ==================== Name: MonticelloConfigurations-mt.144 Author: mt Time: 15 August 2016, 8:55:59.902884 am UUID: 0a533808-0e9d-d94a-ab25-242f7855dce7 Ancestors: MonticelloConfigurations-mt.143 When updating, tell the user whether there was any update at all and if, what update number was updated from. (This distinction used to be there in some previous Squeak version.) =============== Diff against MonticelloConfigurations-mt.143 =============== Item was changed: ----- Method: MCMcmUpdater>>doUpdate: (in category 'updating') ----- doUpdate: interactive "Update the image by loading all pending updates from the server. If this is the default updater for the system, update the system version when complete. If interteractive use a modal notifier, otherwise only update the transcript. Flush all caches. If a previous download failed this is often helpful" + | config previousUpdateLevel | + previousUpdateLevel := SystemVersion current highestUpdate. - | config | MCFileBasedRepository flushAllCaches. config := self updateFromRepositories: { self repository }. config ifNil: [ interactive ifTrue: [ ^self inform: 'Unable to retrieve updates from remote repository.' translated ]. Transcript cr; show: '========== Unable to retrieve updates from remote repository. ==========' translated; cr. ^ self ]. MCMcmUpdater default == self + ifTrue: [ + config setSystemVersion. - ifTrue: [ config setSystemVersion. interactive ifTrue: [ + self inform: ('Update completed.\\Version: {1}\Update: {3}{2}\\Url: {4}\Map: ''{5}''\\{6}' translated withCRs format: { - self inform: ('Update completed.\\Version: {1}\Update: {2}\\Url: {3}\Map: ''{4}''\\{5}' translated withCRs format: { SystemVersion current version. SystemVersion current highestUpdate. + previousUpdateLevel = SystemVersion current highestUpdate + ifTrue: [''] + ifFalse: [previousUpdateLevel asString, ' -> ']. self repository. MCMcmUpdater updateMapName. SystemVersion current description})]. Transcript cr; + show: '========== Update completed: ' translated; + show: previousUpdateLevel; + show: ' -> ' ; - show: '========== Update completed. Current update number ' translated; show: SystemVersion current highestUpdate; show: ' =========='; cr ] ifFalse: [ interactive ifTrue: [ self inform: 'Update completed.' ]. Transcript cr; show: '========== Update completed. ==========' translated; cr ] ! From hannes.hirzel at gmail.com Mon Aug 15 08:14:17 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Mon Aug 15 08:14:19 2016 Subject: [squeak-dev] Squeak under Raspbian from a USB Dongle In-Reply-To: <20160814181135.53dc33aa@herpi5> References: <20160814181135.53dc33aa@herpi5> Message-ID: http://askubuntu.com/questions/49392/how-to-mark-allow-executing-file-as-program-on-an-external-drive ? On 8/14/16, Herbert K?nig wrote: > Am Fri, 12 Aug 2016 23:53:58 +0200 > schrieb Tim Felgentreff : > >> Hi >> >> You need to mount with the exec option (or the right umask). Then all >> files are executable. >> >> Best, >> Tim >> > > Hi Tim, > > thanks for the hint but it seems my linux fu is lacking. > USB dongles are auto mounted under Raspbian so I first did: > sudo umount /media/pi/INTENSO > then, after some searching: > sudo mount -o exec /dev/disk/by-label/INTENSO /media/intenso > That makes all scripts (i found :-)) and the VM executable but neither > start in a terminal not start without a terminal works. > For a very short time a window comes up and then closes so I don't see > an error. > It works on my Windows 7 laptop and for the experiment I use a Squeak > 5.0 all in one. > > Cheers, > > Herbert > > > >> Am 12.08.2016 22:51 schrieb "Herbert K?nig" : >> >> > Hi, >> > >> > I assume it's not possible to run Squeak all in one from a USB >> > dongle under linux because one FAT does not have an executable flag. >> > >> > Or is there a way? Would be too cool to move a USB dongle from my >> > Windows Laptop to the RasPi. >> > >> > Cheers, >> > >> > >> > Herbert >> > >> > >> > > > > From commits at source.squeak.org Mon Aug 15 08:44:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 08:44:05 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.95.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.95.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.95 Author: mt Time: 15 August 2016, 10:43:56.795884 am UUID: 1e078c39-dd80-d94a-ba07-073f7a34d333 Ancestors: HelpSystem-Core-mt.94 Fix small glitch when updating file-based help topics. Always create a new file instead of overwriting it. =============== Diff against HelpSystem-Core-mt.94 =============== Item was changed: ----- Method: DirectoryBasedHelpTopic>>accept:for: (in category 'editing') ----- accept: newContents for: subtopic + FileStream forceNewFileNamed: subtopic fileEntry fullName do: [:strm | - FileStream fileNamed: subtopic fileEntry fullName do: [:strm | strm nextChunkPutWithStyle: newContents]. ! From commits at source.squeak.org Mon Aug 15 09:01:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 09:02:00 2016 Subject: [squeak-dev] The Trunk: System-mt.890.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.890.mcz ==================== Summary ==================== Name: System-mt.890 Author: mt Time: 15 August 2016, 11:01:06.485884 am UUID: e5b6e8b2-4aac-5b4c-9294-383e9379671a Ancestors: System-mt.889 Small adjustments in Solarized and Monokai themes regarding window colors and button border colors. =============== Diff against System-mt.889 =============== Item was changed: ----- Method: MonokaiTheme class>>addDarkButtons: (in category 'instance creation') ----- addDarkButtons: theme "self createDark apply." theme set: #borderColor for: #PluggableButtonMorph to: self backgroundColor; set: #color for: #PluggableButtonMorph to: self invisibleColor; set: #textColor for: #PluggableButtonMorph to: self yellow; set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. "And the plus-version." + theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: self grayDarker. - theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: self grayLight. ! Item was changed: ----- Method: MonokaiTheme class>>addDarkWindowColors: (in category 'instance creation') ----- addDarkWindowColors: theme "self createDark apply." theme + set: #uniformWindowColor for: #Model to: self invisibleColor lighter; - set: #uniformWindowColor for: #Model to: self invisibleColor; + set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; - set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | - Model useColorfulWindows - ifTrue: [color darker] - ifFalse: [(Color r: 0.152 g: 0.156 b: 0.133) "background color"] ] ]; set: #unfocusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.285 g: 0.282 b: 0.242) "invisible color"] ifFalse: [(Color r: 0.972 g: 0.972 b: 0.948) "foreground color"] ]; set: #focusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.152 g: 0.156 b: 0.133) "background color"] ifFalse: [(Color r: 0.901 g: 0.858 b: 0.455) "yellow"] ]; set: #customWindowColor for: #Browser to: self green; set: #customWindowColor for: #ChangeList to: self blue; set: #customWindowColor for: #ChangeSorter to: self blue; set: #customWindowColor for: #ChatNotes to: self magenta; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet; set: #customWindowColor for: #Debugger to: self red; set: #customWindowColor for: #DualChangeSorter to: self blue; set: #customWindowColor for: #FileContentsBrowser to: self yellow; set: #customWindowColor for: #FileList to: self yellow; set: #customWindowColor for: #InstanceBrowser to: self cyan; set: #customWindowColor for: #Lexicon to: self cyan; set: #customWindowColor for: #MCTool to: self violet; set: #customWindowColor for: #MessageNames to: self green; set: #customWindowColor for: #MessageSet to: self cyan; set: #customWindowColor for: #PackagePaneBrowser to: self green; set: #customWindowColor for: #PluggableFileList to: self yellow; set: #customWindowColor for: #PreferenceBrowser to: self cyan; set: #customWindowColor for: #SMLoader to: self orange; set: #customWindowColor for: #SMLoaderPlus to: self orange; set: #customWindowColor for: #SMReleaseBrowser to: self orange; set: #customWindowColor for: #ScriptingDomain to: self yellow; set: #customWindowColor for: #SelectorBrowser to: self cyan; set: #customWindowColor for: #StringHolder to: self yellow; set: #customWindowColor for: #TestRunner to: self orange; set: #customWindowColor for: #TranscriptStream to: self orange; set: #customWindowColor for: #VersionsBrowser to: self violet.! Item was changed: ----- Method: MonokaiTheme class>>darkBackgroundForm (in category 'instance creation') ----- darkBackgroundForm | ref | ref := self backgroundColor. ^ (SqueakTheme linenblue asFormOfDepth: 32) collectColors: [:c | Color h:ref hue s: ref saturation + v: c brightness - 0.1 - v: c brightness alpha: c alpha]! Item was changed: ----- Method: SolarizedTheme class>>addDarkButtons: (in category 'instance creation') ----- addDarkButtons: theme "self createDark apply." theme + set: #borderColor for: #PluggableButtonMorph to: self darkContentSecondary; - set: #borderColor for: #PluggableButtonMorph to: self darkBackground; set: #color for: #PluggableButtonMorph to: self darkBackgroundHighlights; set: #textColor for: #PluggableButtonMorph to: self darkContentEmphasizedMore; set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. "And the plus-version." theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: self darkContentSecondary. ! Item was changed: ----- Method: SolarizedTheme class>>addDarkWindowColors: (in category 'instance creation') ----- addDarkWindowColors: theme "self createDark apply." theme + set: #uniformWindowColor for: #Model to: self darkBackgroundHighlights lighter; - set: #uniformWindowColor for: #Model to: self darkBackgroundHighlights; + set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; - set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | - Model useColorfulWindows - ifTrue: [color darker] - ifFalse: [(Color r: 0.0 g: 0.168 b: 0.211) "dark background"] ] ]; set: #unfocusedLabelColor for: #SystemWindow to: self darkContentEmphasized; set: #focusedLabelColor for: #SystemWindow to: self darkContentEmphasizedMore; set: #customWindowColor for: #Browser to: self green; set: #customWindowColor for: #ChangeList to: self blue; set: #customWindowColor for: #ChangeSorter to: self blue; set: #customWindowColor for: #ChatNotes to: self magenta; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet; set: #customWindowColor for: #Debugger to: self red; set: #customWindowColor for: #DualChangeSorter to: self blue; set: #customWindowColor for: #FileContentsBrowser to: self yellow; set: #customWindowColor for: #FileList to: self yellow; set: #customWindowColor for: #InstanceBrowser to: self cyan; set: #customWindowColor for: #Lexicon to: self cyan; set: #customWindowColor for: #MCTool to: self violet; set: #customWindowColor for: #MessageNames to: self green; set: #customWindowColor for: #MessageSet to: self cyan; set: #customWindowColor for: #PackagePaneBrowser to: self green; set: #customWindowColor for: #PluggableFileList to: self yellow; set: #customWindowColor for: #PreferenceBrowser to: self cyan; set: #customWindowColor for: #SMLoader to: self orange; set: #customWindowColor for: #SMLoaderPlus to: self orange; set: #customWindowColor for: #SMReleaseBrowser to: self orange; set: #customWindowColor for: #ScriptingDomain to: self yellow; set: #customWindowColor for: #SelectorBrowser to: self cyan; set: #customWindowColor for: #StringHolder to: self yellow; set: #customWindowColor for: #TestRunner to: self orange; set: #customWindowColor for: #TranscriptStream to: self orange; set: #customWindowColor for: #VersionsBrowser to: self violet.! Item was changed: ----- Method: SolarizedTheme class>>addLightButtons: (in category 'instance creation') ----- addLightButtons: theme "self createLight apply." theme + set: #borderColor for: #PluggableButtonMorph to: self lightContentSecondary; - set: #borderColor for: #PluggableButtonMorph to: self lightBackground; set: #color for: #PluggableButtonMorph to: self lightBackgroundHighlights; set: #textColor for: #PluggableButtonMorph to: self lightContentEmphasizedMore; set: #selectionModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #hoverModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.1] ]; set: #feedbackModifier for: #PluggableButtonMorph to: [ [:c | c adjustBrightness: -0.3] ]. "And the plus-version." theme set: #disabledTextColor for: #PluggableButtonMorphPlus to: self lightContentSecondary. ! Item was changed: ----- Method: SolarizedTheme class>>addLightWindowColors: (in category 'instance creation') ----- addLightWindowColors: theme "self createLight apply." theme + set: #uniformWindowColor for: #Model to: self lightBackgroundHighlights darker; - set: #uniformWindowColor for: #Model to: self lightBackgroundHighlights; + set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color lighter] ]; - set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | - Model useColorfulWindows - ifTrue: [color darker] - ifFalse: [Color r: 0.991 g: 0.964 b: 0.89 "light background"] ] ]; set: #unfocusedLabelColor for: #SystemWindow to: self lightContentEmphasized; set: #focusedLabelColor for: #SystemWindow to: self lightContentEmphasizedMore; set: #customWindowColor for: #Browser to: self green; set: #customWindowColor for: #ChangeList to: self blue; set: #customWindowColor for: #ChangeSorter to: self blue; set: #customWindowColor for: #ChatNotes to: self magenta; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet; set: #customWindowColor for: #Debugger to: self red; set: #customWindowColor for: #DualChangeSorter to: self blue; set: #customWindowColor for: #FileContentsBrowser to: self yellow; set: #customWindowColor for: #FileList to: self yellow; set: #customWindowColor for: #InstanceBrowser to: self cyan; set: #customWindowColor for: #Lexicon to: self cyan; set: #customWindowColor for: #MCTool to: self violet; set: #customWindowColor for: #MessageNames to: self green; set: #customWindowColor for: #MessageSet to: self cyan; set: #customWindowColor for: #PackagePaneBrowser to: self green; set: #customWindowColor for: #PluggableFileList to: self yellow; set: #customWindowColor for: #PreferenceBrowser to: self cyan; set: #customWindowColor for: #SMLoader to: self orange; set: #customWindowColor for: #SMLoaderPlus to: self orange; set: #customWindowColor for: #SMReleaseBrowser to: self orange; set: #customWindowColor for: #ScriptingDomain to: self yellow; set: #customWindowColor for: #SelectorBrowser to: self cyan; set: #customWindowColor for: #StringHolder to: self yellow; set: #customWindowColor for: #TestRunner to: self orange; set: #customWindowColor for: #TranscriptStream to: self orange; set: #customWindowColor for: #VersionsBrowser to: self violet.! Item was changed: ----- Method: SolarizedTheme class>>lightBackgroundForm (in category 'instance creation') ----- lightBackgroundForm | ref | ref := self lightBackground. ^ (SqueakTheme linenblue asFormOfDepth: 32) collectColors: [:c | Color h:ref hue s: ref saturation + v: 0.7 - c brightness - v: 1.0 - c brightness alpha: c alpha]! From commits at source.squeak.org Mon Aug 15 09:51:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 09:51:20 2016 Subject: [squeak-dev] The Trunk: System-mt.891.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.891.mcz ==================== Summary ==================== Name: System-mt.891 Author: mt Time: 15 August 2016, 11:50:40.658884 am UUID: 7c143570-071b-3f4c-b98f-1026cb085da5 Ancestors: System-mt.890 Remove author name lookup table when cleaning up the image. =============== Diff against System-mt.890 =============== Item was changed: ----- Method: SystemNavigation class>>authors (in category 'accessing') ----- authors + ^ Authors ifNil: [self initializeAuthors. Authors]! - ^ Authors! Item was changed: ----- Method: SystemNavigation class>>authorsInverted (in category 'accessing') ----- authorsInverted + ^ AuthorsInverted ifNil: [self initializeAuthors. AuthorsInverted]! - ^ AuthorsInverted! Item was added: + ----- Method: SystemNavigation class>>cleanUp: (in category 'class initialization') ----- + cleanUp: aggressive + + aggressive ifTrue: [Authors := nil. AuthorsInverted := nil].! From commits at source.squeak.org Mon Aug 15 14:03:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 14:03:25 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.48.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.48.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.48 Author: mt Time: 15 August 2016, 4:03:15.930884 pm UUID: f19d6dfa-488e-5a46-adaf-1d69ef983458 Ancestors: Help-Squeak-Project-mt.47 Copyright in License updated. =============== Diff against Help-Squeak-Project-mt.47 =============== Item was changed: ----- Method: SqueakLicenseHelp class>>officialLicense (in category 'pages') ----- officialLicense + "This method was automatically generated. Edit it using:" + "SqueakLicenseHelp edit: #officialLicense" + ^(HelpTopic - - ^HelpTopic title: 'Official License' + contents: + 'Copyright (c) The individual, corporate, and institutional contributors who have collectively contributed elements to this software ("The Squeak Community"), 1996-2016 All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + Portions of Squeak are covered by the following license + + + Copyright (c) Xerox Corp. 1981, 1982 All rights reserved. + Copyright (c) Apple Computer, Inc. 1985-1996 All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + !!' readStream nextChunkText) + key: #officialLicense! - readOnlyContents: Smalltalk license readStream nextChunkText! From commits at source.squeak.org Mon Aug 15 14:27:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 14:27:04 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.74.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.74.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.74 Author: mt Time: 15 August 2016, 4:26:56.026884 pm UUID: 5f527401-50f7-7c4a-8530-69777e9ea2fa Ancestors: PreferenceBrowser-mt.73 In the wizard, show more from each example window. Reduce the number of delays. =============== Diff against PreferenceBrowser-mt.73 =============== Item was changed: ----- Method: PreferenceWizardMorph>>showPlayfield (in category 'actions') ----- showPlayfield startButton hide. skipButton hide. lowPerformanceMorph hide. isFullScreen := true. self step. titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0@ 0 corner: 0 @ titleMorph height)). self refreshWorld. (Delay forMilliseconds: 1000) wait. controlMorph show. - self refreshWorld. - (Delay forMilliseconds: 1000) wait. - previewWorld show. - self refreshWorld. - (Delay forMilliseconds: 1000) wait. - buttonRowMorph show. + self next. self refreshWorld. ! Item was changed: ----- Method: PreferenceWizardMorph>>showSqueak (in category 'actions') ----- showSqueak self isInWelcome ifTrue: [^ self delete]. buttonRowMorph hide. - self refreshWorld. - (Delay forMilliseconds: 1000) wait. - controlMorph hide. - self refreshWorld. - (Delay forMilliseconds: 1000) wait. - previewWorld hide. + self refreshWorld. (Delay forMilliseconds: 1000) wait. titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1)). self refreshWorld. (Delay forMilliseconds: 1000) wait. self delete.! Item was changed: ----- Method: PreferenceWizardMorph>>updateWindowBounds (in category 'layout') ----- updateWindowBounds + | windows offset margin extentToUse pointsToUse | - | windows offset | isFullScreen == false ifTrue: [^ self]. self fullBounds. + margin := 20@20. + extentToUse := (previewWorld extent - (margin * 2)) // 3 * (1.8 @ 1.5). + pointsToUse := { + previewWorld center - (previewWorld extent // (5.5 @ 4.5)). + previewWorld center + (previewWorld width // 5.5 @ 0). + previewWorld center + (0 @ (previewWorld width // 5))}. + windows := previewWorld submorphs. offset := 50@50. + windows reversed withIndexDo: [:ea :i | - windows reversed do: [:ea | ea + extent: extentToUse; + center: (pointsToUse atWrap: i). - topLeft: previewWorld topLeft + offset; - extent: previewWorld extent // 3 * 2. offset := offset + (50@50)].! From commits at source.squeak.org Mon Aug 15 14:28:57 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 14:28:59 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.156.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.156.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.156 Author: mt Time: 15 August 2016, 4:28:52.546884 pm UUID: 142d5783-4c1c-0949-b0d7-ccc8918668c3 Ancestors: ReleaseBuilder-mt.155 Small fix for getting the changes between releases. Account for a broken MC acenstry. =============== Diff against ReleaseBuilder-mt.155 =============== Item was changed: ----- Method: ReleaseBuilder class>>changesBetween:and: (in category 'scripts - support') ----- changesBetween: startConfiguration and: endConfiguration | a b d | a := startConfiguration. b := endConfiguration. d := OrderedDictionary new. b dependencies do: [:dep | | begin end finished started | finished := false. started := false. begin := a dependencies detect: [:ea | ea package = dep package] ifFound: [:x | x versionInfo] ifNone: [nil]. end := dep versionInfo. d at: dep package put: OrderedDictionary new. dep package workingCopy ancestry allAncestorsDo: [:ver | + started := started or: [(ver name findTokens: '.') last asNumber <= (end name findTokens: '.') last asNumber]. + finished := finished or: [begin notNil and: [(ver name findTokens: '.') last asNumber <= (begin name findTokens: '.') last asNumber]]. - started := started or: [ver name = end name]. - finished := finished or: [begin notNil and: [ver name = begin name]]. started & finished not ifTrue: [(d at: dep package) at: ver put: ver message]]]. ^ d! Item was changed: ----- Method: ReleaseBuilder class>>fileOutChangesBetweenReleases (in category 'scripts - support') ----- fileOutChangesBetweenReleases "Generate mark-down files with all commit messages by release. To be used to write release notes." | fileNames | fileNames := OrderedCollection new. self changesBetweenReleases keysAndValuesDo: [:location :c | fileNames add: ('commits-{1}.md' format: {(location findTokens: '/') last}). + FileStream forceNewFileNamed: fileNames last do: [:strm | - FileStream fileNamed: fileNames last do: [:strm | c keysAndValuesDo: [:pkg :changes | strm nextPutAll: '# '; nextPutAll: pkg name; cr. changes keysAndValuesDo: [:ver :msg | msg linesDo: [:line | line withBlanksTrimmed ifNotEmpty: [:m | (m first isDigit or: [{$*. $-} includes: m first]) ifTrue: [strm nextPutAll: ' ', m] ifFalse: [strm nextPutAll: ' - ', m]. strm cr]]]]]]. self inform: 'Files written:\' withCRs, (fileNames joinSeparatedBy: String cr).! From commits at source.squeak.org Mon Aug 15 14:58:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 14:58:23 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1280.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1280.mcz ==================== Summary ==================== Name: Morphic-mt.1280 Author: mt Time: 15 August 2016, 4:57:23.517962 pm UUID: 09e63037-831a-d642-8db7-cd46a50e8004 Ancestors: Morphic-mt.1279 Found another "dark corner" in NewParagraph. Flagged for later refactoring. Fixes a serious bug that occured when you click on a text link with "Windows Are Always Active" disabled. Should work now. =============== Diff against Morphic-mt.1279 =============== Item was changed: ----- Method: NewParagraph>>clickAt:for:controller: (in category 'editing') ----- clickAt: clickPoint for: model controller: editor "Give sensitive text a chance to fire. Display flash: (100@100 extent: 100@100)." | startBlock action | action := false. startBlock := self characterBlockAtPoint: clickPoint. (text attributesAt: startBlock stringIndex forStyle: textStyle) do: [:att | | range target box boxes | att mayActOnClick ifTrue: [(target := model) ifNil: [target := editor morph]. range := text rangeOf: att startingAt: startBlock stringIndex. boxes := self selectionRectsFrom: (self characterBlockForIndex: range first) to: (self characterBlockForIndex: range last+1). box := boxes detect: [:each | each containsPoint: clickPoint] ifNone: [nil]. box ifNotNil: [ box := (editor transformFrom: nil) invertBoundsRect: box. editor morph allOwnersDo: [ :m | box := box intersect: (m boundsInWorld) ]. + self flag: #fix. "mt: Make it stateful and with real events." Utilities awaitMouseUpIn: box repeating: [] ifSucceed: [(att actOnClickFor: target in: self at: clickPoint editor: editor) ifTrue: [action := true]]. Cursor currentCursor == Cursor webLink ifTrue:[Cursor normal show]. ]]]. ^ action! Item was changed: ----- Method: TextEditor>>mouseDown: (in category 'events') ----- mouseDown: evt "An attempt to break up the old processRedButton code into threee phases" | clickPoint b | oldInterval := self selectionInterval. clickPoint := evt cursorPoint. b := paragraph characterBlockAtPoint: clickPoint. (paragraph clickAt: clickPoint for: model controller: self) ifTrue: [ markBlock := b. pointBlock := b. evt hand releaseKeyboardFocus: morph. + evt hand releaseMouseFocus: morph. ^ self ]. evt shiftPressed ifFalse: [ self closeTypeIn. markBlock := b. pointBlock := b ] ifTrue: [ self closeTypeIn. self mouseMove: evt ]. self storeSelectionInParagraph! From commits at source.squeak.org Mon Aug 15 15:19:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 15:19:27 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.49.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.49.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.49 Author: mt Time: 15 August 2016, 5:19:17.012962 pm UUID: e09c040a-346d-dd4e-9326-92acc64ce1bc Ancestors: Help-Squeak-Project-mt.48 Small updates in "Working with Squeak" and "The Squeak User Interface" =============== Diff against Help-Squeak-Project-mt.48 =============== Item was changed: ----- Method: SqueakProjectHelp class>>squeakUserInterface (in category 'pages') ----- squeakUserInterface + "This method was automatically generated. Edit it using:" + "SqueakProjectHelp edit: #squeakUserInterface" + ^(HelpTopic - ^HelpTopic title: 'Squeak User Interface' + contents: + 'The Squeak User Interface - icon: (HelpIcons iconNamed: #squeakIcon) - contents: 'The Squeak UI has some unusual elements that you may not have seen before. Here is a brief introduction to those elements: + The Squeak UI has some unusual elements that you may not have seen before. Here is a brief introduction to those elements. + + 1. Projects + - Projects A project is an entire Squeak desktop full of windows. Projects can be used to change quickly from one task to another. An inactive project is represented by a project window, which shows a thumbnail of its state. Project windows are actually more like doors than windows, since you can enter the project just by clicking on them. You can create a new project by choosing ''open...project'' from the screen menu. To exit a project (and return to its parent project), choose ''previous project'' from the screen menu. Each project maintains its own set of windows and other information. + 2. Morphic Halos + - Morphic Halos In a morphic project, pressing cmd-click (Mac) or alt-click (Windows) on a graphical object (e.g. a window) will surround it with a constellation of colored circles. These are called "halo handles." Additional clicks will cycle through the halos for the other graphical objects in the nesting structure. If you hold down the Shift key while cmd/alt-clicking, the nested morphs will be traversed from innermost outward. Clicking without the cmd/alt key will dismiss the halo. While the halo is up, letting the cursor linger over one of the halo handles for a few seconds will cause a balloon to pop up with the name of that handle. Three useful handles are the top-left "X" handle (delete), the bottom-right yellow handle (resize), and the brown handle (slide the object within its containing object). Halos allow complex graphical objects to be explored - or even disassembled (using the black halo handle). Usually no harm results from taking apart an object; you can just discard the pieces and create a new one. + 3. Flaps + - Flaps To enable Flaps, click on the desktop to show the world menu, choose the "Flaps..." menu and "show shared tags". Tabs labeled "Squeak", "Tools", "Supplies", etc., will appear along the edges of the Squeak desktop. Click on any tab to open the corresponding flap. Drag a tab to resize the flap and to relocate the tab. Bring up the halo on any tab and click on its menu handle to be presented with many options relating to the flap. Use the "Flaps..." menu, reached via the desktop menu, to control which flaps are visible and for other flap-related options and assistance. + 4. Parts Bins + - Parts Bins You can obtain new objects in many ways. The "Objects Catalog" (choose "objects'' from the world menu or open the objects flap) and several of the standard flaps (e.g. "Tools" and "Supplies") serve as "Parts Bins" the for new objects. Drag any icon you see in a Parts Bin and a fresh copy of the kind of object it represents will appear "in your hand"; click to deposit the new object anywhere you wish. You can also add your own objects to any of the flaps - just drag your object over the tab, wait for the flap to pop open, then drop the object at the desired position in the flap. + !! + ]style[(25 127 12 161 16 413 17 150 15 860 8 580 14 48 15 525)b,,i,,Rcode://(ProjectViewMorph newProjectViewInAWindowFor: MorphicProject new) openInWorld;,,i,,Rcode://SystemWindow topWindow addHalo;,,i,,i,,Rcode://Project current world activateObjectsTool;,!!' readStream nextChunkText) + key: #squeakUserInterface! - !!' readStream nextChunkText! Item was changed: ----- Method: SqueakProjectHelp class>>workingWithSqueak (in category 'pages') ----- workingWithSqueak + "This method was automatically generated. Edit it using:" + "SqueakProjectHelp edit: #workingWithSqueak" + ^(HelpTopic - ^HelpTopic title: 'Working with Squeak' + contents: + 'Working with Squeak + + Take few minutes and get familiar with the image concept of the Squeak/Smalltalk system. This includes starting and quitting the image, learning where all the objects live, and understanding where your source code resides. + + 1. Starting and Quitting + - icon: (HelpIcons iconNamed: #squeakIcon) - contents: 'Starting and Quitting Like most Smalltalks, the machine-executable portion is a relatively small program known as the "virtual machine" (VM). The VM''s job is to provide services from the physical machine to real Smalltalk objects. Services like input and output. The Smalltalk system, including all data and code, is a system of objects, built from the ground up, and interpreted by this virtual computer. This affords Smalltalk system platform portability. Smalltalk cannot run without the VM. The VM can''t do anything useful except process Smalltalk systems. To start the system, drag the ".image" data file to the VM executable "squeak". There are myriad command-line options for starting the system via the command-line (see squeak --help). By default, the system will open on the screen in a single OS window. To quit a Squeak session, choose ''quit'' from the menu bar. If you save, the image file will be overwritten and resume from that place the next time it''s launched. + 2. The Image File + - The Image File Squeak is an environment built in its own objects from the ground up, including one or more end-user applications. All of the objects in the system -- Classes, Dictionaries, Windows, Customers and other objects that make up the Squeak environment are stored in a binary ".image" file. This is the "object-data file" loaded by the VM when Squeak is launched. When an image is started, every object resumes exactly from where it was last saved. + 3. The Sources File + - The Sources File Smalltalk is traditionally includes the source code in the running system. However, keeping multiple copies of the same source code in all images files is wasteful. Therefore, the source code itself is kept in a read-only .sources file and accessed by all images. The image files merely have pointers into this file, which is read on-the-fly to present original source code. The code of the base system is stored in the file "SqueakV46.sources". This file does not change except between releases of Squeak. Normally this file should be placed in the folder containing the VM executable. + 4. The Changes File + - The Changes File The purpose of Squeak is to develop new programs and systems. Code changes to the running system are effective immediately. But since multiple images can be running, they cannot all update the .sources file safely. Therefore, each image file is accompanied by a ".changes" file which contains source code changes for that and only that Smalltalk system.. The changes file is important for project work. It keeps a sequential log of development activity for the purpose of recovering work performed since the last image-save. Any of several events could lead to the need to recover work, including a power-outage or making an erroneous change to code required to keep the system running. The changes file does not consume memory space, so Squeak is able to keep a complete history of all program changes. This makes it easy to examine or even reinstate older versions of methods (see ''versions'' option in browser selector pane). This encourages experimentation, since you can easily revert to the original versions of any set of methods. In extreme cases where sources and/or changes files are not available, the system can still run, and will automatically decompile the bytecode methods in image memory, if necessary, into readable and editable versions of the original source code (only comments and temporary variable names are lost). + 5. Transferring Code-Snippets Between Images + - Transferring Code-Snippets Between Images In addition to the ''save'' command that saves the entire state of the system, the code of individual methods, categories or classes may be ''filed out'' and then filed-in to another image. + 6. Packages + - Packages The code of an entire project is encapsulated by a Package. This allows users to share their code with other users. Code of packages are delineated by the categories of their classes, and methods. The Monticello browser is then used to wrap that code into a Package object which can be saved to a Monticello repository at http://ss3.gemtalksystems.com/ss. Some projects end up using the resources provided by several packages, resulting in a hierarchy of packages that make up a system. Installer can be used to install such systems.!! + ]style[(19 225 26 969 17 449 19 596 19 1351 44 189 12 539)b,,i,,i,,i,,i,,i,,i,!!' readStream nextChunkText) + key: #workingWithSqueak! - ]style[(21 970 14 448 16 396 11 188 16 321 4 1025 41 188 8 52 10 55 2 420)bu,,bu,,bu,,u,,bu,,u,,bu,,bu,,i,,i,!!' readStream nextChunkText! From karlramberg at gmail.com Mon Aug 15 16:12:20 2016 From: karlramberg at gmail.com (karl ramberg) Date: Mon Aug 15 16:12:24 2016 Subject: [squeak-dev] Bug with SoftShadow preference Message-ID: When I unselect softShadows the soft shadow of top window disappear but comes back if I move the window. Best, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160815/60454fea/attachment.htm From commits at source.squeak.org Mon Aug 15 16:28:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 16:28:23 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1281.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1281.mcz ==================== Summary ==================== Name: Morphic-mt.1281 Author: mt Time: 15 August 2016, 6:26:40.945171 pm UUID: 5209a7c6-1f5c-7347-952c-4e473aa20e92 Ancestors: Morphic-mt.1280 Fixes a bug with toggling soft shadows and updating existing windows in the image. (Thanks Karl!) =============== Diff against Morphic-mt.1280 =============== Item was changed: ----- Method: SystemWindow>>justDroppedInto:event: (in category 'geometry') ----- justDroppedInto: aMorph event: anEvent isCollapsed ifTrue: [self position: ((self position max: 0@0) grid: 8@8). collapsedFrame := self bounds] ifFalse: [fullFrame := self bounds]. self beKeyWindow. + self hasDropShadow: Preferences menuAppearance3d. "See #startDragFromLabel:." - self hasDropShadow: true. "See #startDragFromLabel:." aMorph == self world ifTrue: [self assureLabelAreaVisible]. (ToolBuilder openToolsAttachedToMouseCursor and: (self hasProperty: #initialDrop)) ifTrue: [ self removeProperty: #initialDrop. (self submorphs detect: [:m | m isKindOf: BottomRightGripMorph] ifNone: []) ifNotNil: [:grip | grip referencePoint: anEvent position; setProperty: #targetHadDropShadow toValue: true "See MorphicToolBuilder >> #open:". self hasDropShadow: false. anEvent hand newMouseFocus: grip]]. ^super justDroppedInto: aMorph event: anEvent! Item was changed: ----- Method: TheWorldMainDockingBar>>toggleHardShadows (in category 'submenu - extras') ----- toggleHardShadows ((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow]) ifFalse: [Preferences toggle: #menuAppearance3d]. Morph useSoftDropShadow: false. + SystemWindow refreshAllWindows; reconfigureWindowsForFocus. + self class updateInstances. + SystemProgressMorph reset.! - (Smalltalk classNamed: #SystemWindow) ifNotNil: [:c | - c refreshAllWindows; reconfigureWindowsForFocus]. - (Smalltalk classNamed: #TheWorldMainDockingBar) ifNotNil: [:c | - c updateInstances].! Item was changed: ----- Method: TheWorldMainDockingBar>>toggleSoftShadows (in category 'submenu - extras') ----- toggleSoftShadows ((Preferences valueOfFlag: #menuAppearance3d ifAbsent: [false]) and: [Morph useSoftDropShadow not]) ifFalse: [Preferences toggle: #menuAppearance3d]. Morph useSoftDropShadow: true. + SystemWindow refreshAllWindows; reconfigureWindowsForFocus. + self class updateInstances. + SystemProgressMorph reset.! - (Smalltalk classNamed: #SystemWindow) ifNotNil: [:c | - c refreshAllWindows; reconfigureWindowsForFocus]. - (Smalltalk classNamed: #TheWorldMainDockingBar) ifNotNil: [:c | - c updateInstances].! From Marcel.Taeumel at hpi.de Mon Aug 15 16:29:08 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Mon Aug 15 16:29:40 2016 Subject: [squeak-dev] Re: Bug with SoftShadow preference In-Reply-To: References: Message-ID: <1471278548191-4911071.post@n4.nabble.com> Karl Ramberg wrote > When I unselect softShadows the soft shadow of top window disappear but > comes back if I move the window. > > Best, > Karl Thanks! :) http://forum.world.st/The-Trunk-Morphic-mt-1281-mcz-td4911069.html Best, Marcel -- View this message in context: http://forum.world.st/Bug-with-SoftShadow-preference-tp4911067p4911071.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From karlramberg at gmail.com Mon Aug 15 16:37:53 2016 From: karlramberg at gmail.com (karl ramberg) Date: Mon Aug 15 16:37:56 2016 Subject: [squeak-dev] Re: Bug with SoftShadow preference In-Reply-To: <1471278548191-4911071.post@n4.nabble.com> References: <1471278548191-4911071.post@n4.nabble.com> Message-ID: Great Best, Karl On Mon, Aug 15, 2016 at 6:29 PM, marcel.taeumel wrote: > Karl Ramberg wrote > > When I unselect softShadows the soft shadow of top window disappear but > > comes back if I move the window. > > > > Best, > > Karl > > Thanks! :) > http://forum.world.st/The-Trunk-Morphic-mt-1281-mcz-td4911069.html > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Bug- > with-SoftShadow-preference-tp4911067p4911071.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160815/4aa8776c/attachment.htm From commits at source.squeak.org Mon Aug 15 17:07:31 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 17:07:33 2016 Subject: [squeak-dev] The Trunk: MorphicTests-mt.37.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicTests to project The Trunk: http://source.squeak.org/trunk/MorphicTests-mt.37.mcz ==================== Summary ==================== Name: MorphicTests-mt.37 Author: mt Time: 15 August 2016, 7:07:25.786171 pm UUID: 96a07071-aad3-8544-8fe7-9ded73df9c18 Ancestors: MorphicTests-mt.36 Fixes Morphic tests. =============== Diff against MorphicTests-mt.36 =============== Item was changed: TestCase subclass: #MorphicUIManagerTest + instanceVariableNames: 'cases uiManager' - instanceVariableNames: 'cases' classVariableNames: '' poolDictionaries: '' category: 'MorphicTests-ToolBuilder'! !MorphicUIManagerTest commentStamp: 'wiz 1/3/2007 13:57' prior: 0! A MorphicUIBugTest is a class for testing the shortcomings and repairs of the MorphicUI manager. . Instance Variables cases: cases - a list of morphs that may need to be deleted during teardown. the tests are expected to fill this list it starts out empty by default. ! Item was changed: ----- Method: MorphicUIManagerTest>>findWindowInWorldLabeled: (in category 'as yet unclassified') ----- findWindowInWorldLabeled: aLabel "Look in the world and in the hand for windows. Yes, windows may spawn in the hand." ^ World submorphs, (World hands gather: [:hand | hand submorphs]) detect: [ :each | + each isSystemWindow - (each isKindOf: SystemWindow) and: [ each label = aLabel ] ] ifNone: [].! Item was changed: ----- Method: MorphicUIManagerTest>>setUp (in category 'as yet unclassified') ----- setUp + "default. tests will add morphs to list. Teardown will delete." - "default. tests will add morphs to list. Teardown will delete." + cases := #(). + uiManager := MorphicUIManager new.! - cases := #() .! Item was changed: ----- Method: MorphicUIManagerTest>>tearDown (in category 'as yet unclassified') ----- tearDown + "default. tests will add morphs to list. Teardown will delete." - "default. tests will add morphs to list. Teardown will delete." + cases do: [ :each | each delete ].! - cases do: [ :each | each delete ] .! Item was changed: ----- Method: MorphicUIManagerTest>>testOpenWorkspace (in category 'as yet unclassified') ----- testOpenWorkspace "self new testOpenWorkspace" "MorphicUIBugTest run: #testOpenWorkspace" | window myLabel foundWindow myModel | - self assert: Smalltalk isMorphic. myLabel := 'Workspace from SUnit test' . foundWindow := self findWindowInWorldLabeled: myLabel . self assert: foundWindow isNil. + + window := uiManager edit: '"MorphicUIBugTest run: #openWorkspaceTest"' label: myLabel. - window := UIManager default edit: '"MorphicUIBugTest run: #openWorkspaceTest"' label: myLabel. - window := window. foundWindow := self findWindowInWorldLabeled: myLabel. cases := Array with: foundWindow . "For teardown." + myModel := foundWindow submorphs detect: #isMorphicModel. self assert: myModel model class == Workspace. + self assert: foundWindow model class == Workspace.! - self assert: foundWindow model class == Workspace. - foundWindow delete! Item was changed: ----- Method: MorphicUIManagerTest>>testOpenWorkspaceAns (in category 'as yet unclassified') ----- testOpenWorkspaceAns + "Test if method opening a workspace answers the window opened" - "Test if method opening a workspace answers the window opened" + "MorphicUIBugTest run: #testOpenWorkspaceAns" - "MorphicUIBugTest run: #testOpenWorkspaceAns" + | window myLabel foundWindow | + myLabel := 'Workspace from ', 'SUnit test' . + foundWindow := self findWindowInWorldLabeled: myLabel . + self assert: ( foundWindow isNil ) . + window := uiManager edit: '"MorphicUIBugTest run: #openWorkspaceTest"' label: myLabel. + foundWindow := self findWindowInWorldLabeled: myLabel . + + cases := Array with: foundWindow . "For teardown." + self assert: ( window == foundWindow ) .! - | window myLabel foundWindow | - - self assert: ( Smalltalk isMorphic ) . - - myLabel := 'Workspace from ', 'SUnit test' . - foundWindow := self findWindowInWorldLabeled: myLabel . - self assert: ( foundWindow isNil ) . - - window := - UIManager default edit: '"MorphicUIBugTest run: #openWorkspaceTest"' label: myLabel . - - foundWindow := self findWindowInWorldLabeled: myLabel . - - cases := Array with: foundWindow . "For teardown." - - self assert: ( window == foundWindow ) . - - foundWindow delete .! Item was changed: ----- Method: MorphicUIManagerTest>>testShowAllBinParts (in category 'as yet unclassified') ----- testShowAllBinParts "self new testShowAllBinParts" "MorphicUIBugTest run: #testShowAllBinParts" + | tool | + self + shouldnt: [tool := ObjectsTool initializedInstance showAll openCenteredInWorld] + raise: Error. + + cases := Array with: tool.! - self assert: Smalltalk isMorphic. - "This should not throw an exception." - cases := Array with: ObjectsTool initializedInstance showAll openCenteredInWorld! Item was changed: ----- Method: MorphicUIManagerTest>>testUIManagerNoAcceptInitially (in category 'as yet unclassified') ----- testUIManagerNoAcceptInitially "Ensure that UIManager does not invoke the accept: action initially." | accepted window | accepted := false. + window := uiManager edit: Text new label: 'Test' accept: [:val| accepted := true]. - window := UIManager default edit: Text new label: 'Test' accept: [:val| accepted := true]. window delete. self deny: accepted.! Item was changed: ----- Method: ScrollPaneTest>>setUp (in category 'running') ----- setUp super setUp. sut := ScrollPane new. sut retractable: false; scrollBarOnLeft: false; extent: 100@100; + borderWidth: 0; "Very important for the math in tests!!" + hScrollBarPolicy: #whenNeeded; + vScrollBarPolicy: #whenNeeded. - borderWidth: 0. "Very important for the math in tests!!" content := Morph new. sut scroller addMorph: content.! Item was changed: TestCase subclass: #UserInputEventTests + instanceVariableNames: 'hand world priorWorld' - instanceVariableNames: 'hand world' classVariableNames: '' poolDictionaries: '' category: 'MorphicTests-Events'! Item was changed: ----- Method: UserInputEventTests>>setUp (in category 'running') ----- setUp super setUp. + priorWorld := ActiveWorld. + world := (PasteUpMorph newWorldForProject: nil) extent: 300@200; viewBox: (0@0 extent: 300@200); yourself. (world instVarNamed: #worldState) instVarNamed: #canvas put: (Form extent: 300@200 depth: 32) getCanvas. hand := HandMorphForEventTests new. world removeHand: world firstHand; "the default hand" addHand: hand.! Item was changed: ----- Method: UserInputEventTests>>tearDown (in category 'running') ----- tearDown hand showHardwareCursor: true. "Nasty side-effect" + ActiveWorld := priorWorld. super tearDown.! From commits at source.squeak.org Mon Aug 15 17:29:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 17:29:21 2016 Subject: [squeak-dev] The Trunk: System-mt.892.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.892.mcz ==================== Summary ==================== Name: System-mt.892 Author: mt Time: 15 August 2016, 7:27:02.849171 pm UUID: 721789a9-25fb-9e40-bf56-91a8377b554f Ancestors: System-mt.891 Zap project resources on aggressive clean-up. =============== Diff against System-mt.891 =============== Item was changed: ----- Method: Project class>>cleanUp: (in category 'class initialization') ----- cleanUp: agressive "Remove all projects but only when cleaning aggressively" + agressive ifTrue:[ + self removeAllButCurrent. + self current resourceManager reset].! - agressive ifTrue:[self removeAllButCurrent].! From commits at source.squeak.org Mon Aug 15 17:30:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 17:30:13 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.157.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.157.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.157 Author: mt Time: 15 August 2016, 7:30:05.850171 pm UUID: 3136c772-0c70-0f49-bbc2-86375eb7ff16 Ancestors: ReleaseBuilder-mt.156 Moved project resource zapping to Project class >> cleanUp:. =============== Diff against ReleaseBuilder-mt.156 =============== Item was changed: ----- Method: ReleaseBuilder class>>clearCaches (in category 'scripts') ----- clearCaches "Clear caches, discard unused references, free space." Smalltalk cleanUp: true. - Project current resourceManager reset. "Zap eventual resources" self discardUserObjects. MCFileBasedRepository flushAllCaches. Environment allInstancesDo: [ : env | env purgeUndeclared ]. Undeclared removeUnreferencedKeys. Smalltalk garbageCollect.! From commits at source.squeak.org Mon Aug 15 21:22:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 21:22:57 2016 Subject: [squeak-dev] The Trunk: SqueakSSL-Tests-pre.20.mcz Message-ID: Patrick Rein uploaded a new version of SqueakSSL-Tests to project The Trunk: http://source.squeak.org/trunk/SqueakSSL-Tests-pre.20.mcz ==================== Summary ==================== Name: SqueakSSL-Tests-pre.20 Author: pre Time: 15 August 2016, 11:22:51.609656 pm UUID: 0d02ceb1-b791-bc49-bba6-4b3e3809a8d1 Ancestors: SqueakSSL-Tests-topa.19 Declares facebook test to require an internet connection =============== Diff against SqueakSSL-Tests-topa.19 =============== Item was changed: ----- Method: SqueakSSLTest>>testFaceBookAPI (in category 'tests') ----- testFaceBookAPI "Facebook sends incomplete data during SSL handshake. Useful for testing an edge condition in SqueakSSL." + self ensureInternetConnectionTo: 'http://www.facebook.com'. + Smalltalk at: #WebClient ifPresent:[:webClient| self shouldnt:[ [webClient httpGet: 'https://graph.facebook.com/oauth/access_token'] "Allow certificate errors on the Mac since cert validation isn't implemented yet." on: SqueakSSLCertificateError do:[:ex| SqueakSSL platformName = 'Mac OS' ifTrue:[ex resume] ifFalse:[ex pass]]. ] raise: Error. ].. ! From commits at source.squeak.org Mon Aug 15 21:23:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 21:24:00 2016 Subject: [squeak-dev] The Trunk: Tests-pre.349.mcz Message-ID: Patrick Rein uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-pre.349.mcz ==================== Summary ==================== Name: Tests-pre.349 Author: pre Time: 15 August 2016, 11:23:47.344656 pm UUID: ab567e83-59da-9049-af1a-aa3c78112c85 Ancestors: Tests-pre.348 Updates decompiler expected failures to the new state of the source code. =============== Diff against Tests-pre.348 =============== Item was changed: ----- Method: DecompilerTests>>decompilerFailures (in category 'utilities') ----- decompilerFailures "Here is the list of failures: either a syntax error, a hard error or some failure to decompile correctly. Collected via DecompilerTestFailuresCollector new computeFailures." "class name, selector, error class name or nil" + ^ #(#(#Behavior #toolIconSelector: #TestFailure) #(#BrowserCommentTextMorph #showPane #SyntaxErrorNotification) #(#ClassDescription #replaceSilently:to: #SyntaxErrorNotification) #(#CodeHolder #getSelectorAndSendQuery:to:with: #SyntaxErrorNotification) #(#Date #printOn: #TestFailure) #(#DecompilerTests #testDecompileUnreachableParameter #Error) #(#FontImporterTool #fontFromFamily: #SyntaxErrorNotification) #(#HttpUrl #checkAuthorization:retry: #TestFailure) #(#LargeNegativeIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) #(#LargePositiveIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) #(#MailComposition #breakLinesInMessage: #SyntaxErrorNotification) #(#MCConfigurationBrowser #post #SyntaxErrorNotification) #(#MVCToolBuilder #setLayout:in: #SyntaxErrorNotification) #(#ParagraphEditor #inOutdent:delta: #SyntaxErrorNotification) #(#PNGReadWriter #copyPixelsGray: #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNilIfNotNil #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNil #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNilIfNil #SyntaxErrorNotification) #(#RxsCharSet #enumerablePartPredicateIgnoringCase: #SyntaxErrorNotification) #(#ScaledDecimalTest #testConvertFromFraction #SyntaxErrorNotification) #(#SHMCClassDefinition #withAllSuperclassesDo: #SyntaxErrorNotification) #(#StandardScriptingSystem #holderWithAlphabet #SyntaxErrorNotification) #(#SyntaxMorph #mouseEnterDragging: #SyntaxErrorNotification) #(#SystemWindow #convertAlignment #SyntaxErrorNotification) #(#TextEditor #inOutdent:delta: #SyntaxErrorNotification) #(#TextURL #actOnClickFor: #TestFailure) #(#WeakSet #scanForLoadedSymbol: #TestFailure))! - ^#( (Behavior toolIconSelector: TestFailure) - (BrowserCommentTextMorph showPane SyntaxErrorNotification) - (ClassDescription replaceSilently:to: SyntaxErrorNotification) - (CodeHolder getSelectorAndSendQuery:to:with: SyntaxErrorNotification) - (Date printOn: TestFailure) - (DecompilerTests testDecompileUnreachableParameter Error) - (FontImporterTool fontFromFamily: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" - (HttpUrl checkAuthorization:retry: TestFailure) - (LargeNegativeIntegerTest testReplaceFromToWithStartingAt SyntaxErrorNotification) "same-name block-local temps in optimized blocks" - (LargePositiveIntegerTest testReplaceFromToWithStartingAt SyntaxErrorNotification) "same-name block-local temps in optimized blocks" - (MailComposition breakLinesInMessage: SyntaxErrorNotification) - (MCConfigurationBrowser post SyntaxErrorNotification) - (MVCToolBuilder setLayout:in: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" - (ParagraphEditor inOutdent:delta: SyntaxErrorNotification) - (PNGReadWriter copyPixelsGray: SyntaxErrorNotification) - (ScaledDecimalTest testConvertFromFraction SyntaxErrorNotification) "local/non-local temps" - (SHMCClassDefinition withAllSuperclassesDo: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" - (StandardScriptingSystem holderWithAlphabet SyntaxErrorNotification) "same-name block-local temps in optimized blocks" - (SystemWindow convertAlignment SyntaxErrorNotification) - (TextEditor inOutdent:delta: SyntaxErrorNotification) - (TextURL actOnClickFor: TestFailure) - (TTContourConstruction segmentsDo: SyntaxErrorNotification) "Worth fixing; these two are mistaken conversion from a whileTrue: to a to:do: but the index is used outside the whileTrue:" - (TTFontReader processHorizontalMetricsTable:length: SyntaxErrorNotification))! From commits at source.squeak.org Mon Aug 15 21:26:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 21:26:14 2016 Subject: [squeak-dev] The Trunk: KernelTests-pre.310.mcz Message-ID: Patrick Rein uploaded a new version of KernelTests to project The Trunk: http://source.squeak.org/trunk/KernelTests-pre.310.mcz ==================== Summary ==================== Name: KernelTests-pre.310 Author: pre Time: 15 August 2016, 11:25:58.171656 pm UUID: 38fde71e-1444-6b4f-9d3b-24221c24a5d2 Ancestors: KernelTests-ul.309 Recorded the wrong float underflow as an expected failure as it is going to be the expected behavior (somewhat) in the upcoming release =============== Diff against KernelTests-ul.309 =============== Item was added: + ----- Method: FloatTest>>expectedFailures (in category 'characterization') ----- + expectedFailures + + ^ #(testTimesTwoPowerGradualUnderflow) ! From commits at source.squeak.org Mon Aug 15 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 15 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160815215503.25951.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068603.html Name: MonticelloConfigurations-mt.144 Ancestors: MonticelloConfigurations-mt.143 When updating, tell the user whether there was any update at all and if, what update number was updated from. (This distinction used to be there in some previous Squeak version.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068604.html Name: HelpSystem-Core-mt.95 Ancestors: HelpSystem-Core-mt.94 Fix small glitch when updating file-based help topics. Always create a new file instead of overwriting it. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068605.html Name: System-mt.890 Ancestors: System-mt.889 Small adjustments in Solarized and Monokai themes regarding window colors and button border colors. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068606.html Name: System-mt.891 Ancestors: System-mt.890 Remove author name lookup table when cleaning up the image. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068607.html Name: Help-Squeak-Project-mt.48 Ancestors: Help-Squeak-Project-mt.47 Copyright in License updated. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068608.html Name: PreferenceBrowser-mt.74 Ancestors: PreferenceBrowser-mt.73 In the wizard, show more from each example window. Reduce the number of delays. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068609.html Name: ReleaseBuilder-mt.156 Ancestors: ReleaseBuilder-mt.155 Small fix for getting the changes between releases. Account for a broken MC acenstry. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068610.html Name: Morphic-mt.1280 Ancestors: Morphic-mt.1279 Found another "dark corner" in NewParagraph. Flagged for later refactoring. Fixes a serious bug that occured when you click on a text link with "Windows Are Always Active" disabled. Should work now. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068611.html Name: Help-Squeak-Project-mt.49 Ancestors: Help-Squeak-Project-mt.48 Small updates in "Working with Squeak" and "The Squeak User Interface" ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068612.html Name: Morphic-mt.1281 Ancestors: Morphic-mt.1280 Fixes a bug with toggling soft shadows and updating existing windows in the image. (Thanks Karl!) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068613.html Name: MorphicTests-mt.37 Ancestors: MorphicTests-mt.36 Fixes Morphic tests. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068614.html Name: System-mt.892 Ancestors: System-mt.891 Zap project resources on aggressive clean-up. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068615.html Name: ReleaseBuilder-mt.157 Ancestors: ReleaseBuilder-mt.156 Moved project resource zapping to Project class >> cleanUp:. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068616.html Name: SqueakSSL-Tests-pre.20 Ancestors: SqueakSSL-Tests-topa.19 Declares facebook test to require an internet connection ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068617.html Name: Tests-pre.349 Ancestors: Tests-pre.348 Updates decompiler expected failures to the new state of the source code. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068618.html Name: KernelTests-pre.310 Ancestors: KernelTests-ul.309 Recorded the wrong float underflow as an expected failure as it is going to be the expected behavior (somewhat) in the upcoming release ============================================= From leves at caesar.elte.hu Mon Aug 15 23:05:27 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Aug 15 23:05:32 2016 Subject: [squeak-dev] The Trunk: Tests-pre.349.mcz In-Reply-To: References: Message-ID: On Mon, 15 Aug 2016, commits@source.squeak.org wrote: > Patrick Rein uploaded a new version of Tests to project The Trunk: > http://source.squeak.org/trunk/Tests-pre.349.mcz > > ==================== Summary ==================== > > Name: Tests-pre.349 > Author: pre > Time: 15 August 2016, 11:23:47.344656 pm > UUID: ab567e83-59da-9049-af1a-aa3c78112c85 > Ancestors: Tests-pre.348 > > Updates decompiler expected failures to the new state of the source code. > > =============== Diff against Tests-pre.348 =============== > > Item was changed: > ----- Method: DecompilerTests>>decompilerFailures (in category 'utilities') ----- > decompilerFailures > "Here is the list of failures: either a syntax error, a hard error or some failure to decompile correctly. > Collected via > DecompilerTestFailuresCollector new computeFailures." > > "class name, selector, error class name or nil" > + ^ #(#(#Behavior #toolIconSelector: #TestFailure) #(#BrowserCommentTextMorph #showPane #SyntaxErrorNotification) #(#ClassDescription #replaceSilently:to: #SyntaxErrorNotification) #(#CodeHolder #getSelectorAndSendQuery:to:with: #SyntaxErrorNotification) #(#Date #printOn: #TestFailure) #(#DecompilerTests #testDecompileUnreachableParameter #Error) #(#FontImporterTool #fontFromFamily: #SyntaxErrorNotification) #(#HttpUrl #checkAuthorization:retry: #TestFailure) #(#LargeNegativeIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) #(#LargePositiveIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) #(#MailComposition #breakLinesInMessage: #SyntaxErrorNotification) #(#MCConfigurationBrowser #post #SyntaxErrorNotification) #(#MVCToolBuilder #setLayout:in: #SyntaxErrorNotification) #(#ParagraphEditor #inOutdent:delta: #SyntaxErrorNotification) #(#PNGReadWriter #copyPixelsGray: #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNilIfNotNil #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNil #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNilIfNil #SyntaxErrorNotification) #(#RxsCharSet #enumerablePartPredicateIgnoringCase: #SyntaxErrorNotification) #(#ScaledDecimalTest #testConvertFromFraction #SyntaxErrorNotification) #(#SHMCClassDefinition #withAllSuperclassesDo: #SyntaxErrorNotification) #(#StandardScriptingSystem #holderWithAlphabet #SyntaxErrorNotification) #(#SyntaxMorph #mouseEnterDragging: #SyntaxErrorNotification) #(#SystemWindow #convertAlignment #SyntaxErrorNotification) #(#TextEditor #inOutdent:delta: #SyntaxErrorNotification) #(#TextURL #actOnClickFor: #TestFailure) #(#WeakSet #scanForLoadedSymbol: #TestFailure))! Please keep the indentation. Levente > - ^#( (Behavior toolIconSelector: TestFailure) > - (BrowserCommentTextMorph showPane SyntaxErrorNotification) > - (ClassDescription replaceSilently:to: SyntaxErrorNotification) > - (CodeHolder getSelectorAndSendQuery:to:with: SyntaxErrorNotification) > - (Date printOn: TestFailure) > - (DecompilerTests testDecompileUnreachableParameter Error) > - (FontImporterTool fontFromFamily: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" > - (HttpUrl checkAuthorization:retry: TestFailure) > - (LargeNegativeIntegerTest testReplaceFromToWithStartingAt SyntaxErrorNotification) "same-name block-local temps in optimized blocks" > - (LargePositiveIntegerTest testReplaceFromToWithStartingAt SyntaxErrorNotification) "same-name block-local temps in optimized blocks" > - (MailComposition breakLinesInMessage: SyntaxErrorNotification) > - (MCConfigurationBrowser post SyntaxErrorNotification) > - (MVCToolBuilder setLayout:in: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" > - (ParagraphEditor inOutdent:delta: SyntaxErrorNotification) > - (PNGReadWriter copyPixelsGray: SyntaxErrorNotification) > - (ScaledDecimalTest testConvertFromFraction SyntaxErrorNotification) "local/non-local temps" > - (SHMCClassDefinition withAllSuperclassesDo: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" > - (StandardScriptingSystem holderWithAlphabet SyntaxErrorNotification) "same-name block-local temps in optimized blocks" > - (SystemWindow convertAlignment SyntaxErrorNotification) > - (TextEditor inOutdent:delta: SyntaxErrorNotification) > - (TextURL actOnClickFor: TestFailure) > - (TTContourConstruction segmentsDo: SyntaxErrorNotification) "Worth fixing; these two are mistaken conversion from a whileTrue: to a to:do: but the index is used outside the whileTrue:" > - (TTFontReader processHorizontalMetricsTable:length: SyntaxErrorNotification))! > > > From leves at caesar.elte.hu Mon Aug 15 23:06:12 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Aug 15 23:06:23 2016 Subject: [squeak-dev] The Trunk: SqueakSSL-Tests-pre.20.mcz In-Reply-To: References: Message-ID: On Mon, 15 Aug 2016, commits@source.squeak.org wrote: > Patrick Rein uploaded a new version of SqueakSSL-Tests to project The Trunk: > http://source.squeak.org/trunk/SqueakSSL-Tests-pre.20.mcz > > ==================== Summary ==================== > > Name: SqueakSSL-Tests-pre.20 > Author: pre > Time: 15 August 2016, 11:22:51.609656 pm > UUID: 0d02ceb1-b791-bc49-bba6-4b3e3809a8d1 > Ancestors: SqueakSSL-Tests-topa.19 > > Declares facebook test to require an internet connection > > =============== Diff against SqueakSSL-Tests-topa.19 =============== > > Item was changed: > ----- Method: SqueakSSLTest>>testFaceBookAPI (in category 'tests') ----- > testFaceBookAPI > "Facebook sends incomplete data during SSL handshake. > Useful for testing an edge condition in SqueakSSL." > > + self ensureInternetConnectionTo: 'http://www.facebook.com'. Isn't it graph.facebook.com you want to ensure access to? > + > Smalltalk at: #WebClient ifPresent:[:webClient| > self shouldnt:[ > [webClient httpGet: 'https://graph.facebook.com/oauth/access_token'] > "Allow certificate errors on the Mac since cert validation isn't > implemented yet." > on: SqueakSSLCertificateError do:[:ex| > SqueakSSL platformName = 'Mac OS' > ifTrue:[ex resume] > ifFalse:[ex pass]]. > ] raise: Error. > ].. > ! > > > From leves at caesar.elte.hu Mon Aug 15 23:07:42 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Mon Aug 15 23:07:47 2016 Subject: [squeak-dev] The Trunk: KernelTests-pre.310.mcz In-Reply-To: References: Message-ID: On Mon, 15 Aug 2016, commits@source.squeak.org wrote: > Patrick Rein uploaded a new version of KernelTests to project The Trunk: > http://source.squeak.org/trunk/KernelTests-pre.310.mcz > > ==================== Summary ==================== > > Name: KernelTests-pre.310 > Author: pre > Time: 15 August 2016, 11:25:58.171656 pm > UUID: 38fde71e-1444-6b4f-9d3b-24221c24a5d2 > Ancestors: KernelTests-ul.309 > > Recorded the wrong float underflow as an expected failure as it is going to be the expected behavior (somewhat) in the upcoming release I've never seen that test failing. Is it a windows specific failure? Levente > > =============== Diff against KernelTests-ul.309 =============== > > Item was added: > + ----- Method: FloatTest>>expectedFailures (in category 'characterization') ----- > + expectedFailures > + > + ^ #(testTimesTwoPowerGradualUnderflow) ! > > > From nicolas.cellier.aka.nice at gmail.com Mon Aug 15 23:23:27 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Mon Aug 15 23:23:30 2016 Subject: [squeak-dev] The Trunk: KernelTests-pre.310.mcz In-Reply-To: References: Message-ID: It only fails for windows VM if using msvcrt.dll because Microsoft math library is bugged... 2016-08-16 1:07 GMT+02:00 Levente Uzonyi : > On Mon, 15 Aug 2016, commits@source.squeak.org wrote: > > Patrick Rein uploaded a new version of KernelTests to project The Trunk: >> http://source.squeak.org/trunk/KernelTests-pre.310.mcz >> >> ==================== Summary ==================== >> >> Name: KernelTests-pre.310 >> Author: pre >> Time: 15 August 2016, 11:25:58.171656 pm >> UUID: 38fde71e-1444-6b4f-9d3b-24221c24a5d2 >> Ancestors: KernelTests-ul.309 >> >> Recorded the wrong float underflow as an expected failure as it is going >> to be the expected behavior (somewhat) in the upcoming release >> > > I've never seen that test failing. Is it a windows specific failure? > > Levente > > > >> =============== Diff against KernelTests-ul.309 =============== >> >> Item was added: >> + ----- Method: FloatTest>>expectedFailures (in category >> 'characterization') ----- >> + expectedFailures >> + >> + ^ #(testTimesTwoPowerGradualUnderflow) ! >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/86eee911/attachment.htm From eliot.miranda at gmail.com Tue Aug 16 03:16:24 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Aug 16 03:16:31 2016 Subject: [Vm-dev] Re: [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> Message-ID: Hi Tim, On Sun, Aug 14, 2016 at 11:44 AM, tim Rowledge wrote: > > > > On 14-08-2016, at 4:03 AM, Eliot Miranda > wrote: > > > > > > Hi Tim, > > > >> On Aug 11, 2016, at 11:14 AM, tim Rowledge wrote: > > [snip] > > > >> The image is frikkin? huge. How on earth do we have 22Mb of > ByteArray/BitMap/ByteString around? And it looks like we are keeping a very > large amount of MC stuff; 13018 instances of MCVersionInfo/MCVersionName/DateAndTime/Date/Time/UUID. > Is that smart? Simply flushing the cached ancestry from the MC browser gets > rid of 60% of them and appears to save 3Mb. Except the damn saved image > afterwards is exactly the same size! Sigh. > Build a VMMaker image with image/buildspurtrunkvmmaker.sh and you can now use Spur32BitPreen to rewrite the image to be more compact. We can use this as part of the release process until Cl?ment and I have fixed Spur compaction. e.g. Spur32BitPreen new preenImage: '../oscogvm/image/trunk50' Looking for module ... loaded...computing accessor depths...done Looking for module ... loaded...computing accessor depths...done::::.............................................done. old heap size: 41,897,472 initial new heap size: 26,818,472 change: -35.99% final new heap size: 26,818,472 change: -35.99% Done! HTH _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160815/49446c4d/attachment-0001.htm From ma.chris.m at gmail.com Tue Aug 16 03:37:02 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Tue Aug 16 03:37:45 2016 Subject: [squeak-dev] Squeak5.1 category added to SqueakMap, please make new SM releases of your projects Message-ID: Its a pain, but it only takes a few minutes, so I documented the current state of my main projects on SqueakMap. This also means they show up in the catalog list for 5.1, of course. The longer the list, the better it looks (at ESUG, etc.). I freshened the instructions here: http://wiki.squeak.org/squeak/6180 From tim at rowledge.org Tue Aug 16 03:38:57 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Aug 16 03:38:59 2016 Subject: [Vm-dev] [squeak-dev] [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1470056139149-4909004.post@n4.nabble.com> <1470842496210-4910338.post@n4.nabble.com> <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> Message-ID: > On 15-08-2016, at 8:16 PM, Eliot Miranda wrote: > final new heap size: 26,818,472 change: -35.99% > Excellent! I wonder if it?ll be friendly... tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Mihi ignosce. Cum homine de cane debeo congredi = Excuse me. I've got to see a man about a dog. From hannes.hirzel at gmail.com Tue Aug 16 03:51:04 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Aug 16 03:51:08 2016 Subject: [squeak-dev] Squeak5.1 category added to SqueakMap, please make new SM releases of your projects In-Reply-To: References: Message-ID: The instructions seem to cover the case where an updated version of the package is necessary. What is missing is the answer to the following questions: What are the instructions if when the current package runs fine in 5.1 and thus no new release of the package is necessary? Is it still necessary to copy the load script or can the Squeak5.1 category be added to the existing entry? On 8/16/16, Chris Muller wrote: > Its a pain, but it only takes a few minutes, so I documented the > current state of my main projects on SqueakMap. > > This also means they show up in the catalog list for 5.1, of course. > The longer the list, the better it looks (at ESUG, etc.). > > I freshened the instructions here: > > http://wiki.squeak.org/squeak/6180 > > From commits at source.squeak.org Tue Aug 16 07:44:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 07:44:15 2016 Subject: [squeak-dev] The Trunk: KernelTests-mt.311.mcz Message-ID: Marcel Taeumel uploaded a new version of KernelTests to project The Trunk: http://source.squeak.org/trunk/KernelTests-mt.311.mcz ==================== Summary ==================== Name: KernelTests-mt.311 Author: mt Time: 16 August 2016, 9:43:50.388039 am UUID: 98a7080b-a849-ca4e-ba1c-a43e8f8b8845 Ancestors: KernelTests-pre.310 Let #testTimesTwoPowerGradualUnderflow only expected-fail on the Windows platform. =============== Diff against KernelTests-pre.310 =============== Item was changed: ----- Method: FloatTest>>expectedFailures (in category 'characterization') ----- expectedFailures + ^ Smalltalk platformName = 'Win32' + ifTrue: [#(testTimesTwoPowerGradualUnderflow)] + ifFalse: [#()]! - ^ #(testTimesTwoPowerGradualUnderflow) ! From commits at source.squeak.org Tue Aug 16 07:52:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 07:52:54 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1282.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1282.mcz ==================== Summary ==================== Name: Morphic-mt.1282 Author: mt Time: 16 August 2016, 9:50:08.365039 am UUID: 79da2b14-6474-ec4c-8e5c-f6408c959f70 Ancestors: Morphic-mt.1281 Fixes regression in Fill-in-the-blank morph by making it resizable again. (Use visible corner grips as in the list chooser.) =============== Diff against Morphic-mt.1281 =============== Item was changed: ----- Method: FillInTheBlankMorph>>setQuery:initialAnswer:answerExtent:acceptOnCR: (in category 'initialization') ----- setQuery: queryString initialAnswer: initialAnswer answerExtent: answerExtent acceptOnCR: acceptBoolean | text | result := initialAnswer. done := false. self paneMorph removeAllMorphs. self title: 'Input Requested'. self message: queryString. text := self createTextPaneAcceptOnCR: acceptBoolean. self paneMorph addMorphBack: text. + self paneMorph + wantsPaneSplitters: true; + addCornerGrips. + self paneMorph grips do: [:ea | ea drawCornerResizeHandles: true]. + self paneMorph extent: ((initialAnswer asText asMorph extent + (20@10) max: answerExtent) min: 500@500). self setDefaultParameters.! From commits at source.squeak.org Tue Aug 16 08:34:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 08:34:19 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1283.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1283.mcz ==================== Summary ==================== Name: Morphic-mt.1283 Author: mt Time: 16 August 2016, 10:26:56.894039 am UUID: 193d4a20-8085-d040-a108-f7b7747f14bf Ancestors: Morphic-mt.1282 This fixes a bug that became clear in UserInputEventTests where ActiveWorld was broken after these tests ran. Due to the latest refactorings in the Project mechanism, we can implement the set/clear of ActiveWorld, ActiveHand, and ActiveEvent more safely. Tell me if I am mistaken, but #ensure: should not slow down event dispatch to a notable extent -- not even on ARM platforms. =============== Diff against Morphic-mt.1282 =============== Item was added: + ----- Method: HandMorph>>becomeActiveDuring: (in category 'initialization') ----- + becomeActiveDuring: aBlock + "Make the receiver the ActiveHand during the evaluation of aBlock." + + | priorHand | + priorHand := ActiveHand. + ActiveHand := self. + ^ aBlock ensure: [ActiveHand := priorHand].! Item was changed: ----- Method: HandMorph>>sendEvent:focus:clear: (in category 'private events') ----- sendEvent: anEvent focus: focusHolder clear: aBlock "Send the event to the morph currently holding the focus, or if none to the owner of the hand." + + | result w | - | result | focusHolder ifNotNil:[^self sendFocusEvent: anEvent to: focusHolder clear: aBlock]. + w := self world. + w becomeActiveDuring: [ + self becomeActiveDuring: [ + anEvent becomeActiveDuring: [ + result := w processEvent: anEvent]]]. - ActiveEvent := anEvent. - [result := owner processEvent: anEvent] - ensure: [ActiveEvent := nil]. ^ result == #rejected ifTrue: [anEvent] ifFalse: [result "filtered event"]! Item was changed: ----- Method: HandMorph>>sendFocusEvent:to:clear: (in category 'private events') ----- sendFocusEvent: anEvent to: focusHolder clear: aBlock "Send the event to the morph currently holding the focus" | result w | + w := focusHolder world ifNil: [aBlock value. ^ anEvent]. + w becomeActiveDuring: [ + self becomeActiveDuring: [ + anEvent becomeActiveDuring: [ + result := focusHolder processFocusEvent: anEvent]]]. - w := focusHolder world ifNil:[aBlock value. ^ anEvent]. - w becomeActiveDuring:[ - ActiveHand := self. - ActiveEvent := anEvent. - result := focusHolder processFocusEvent: anEvent. - ]. ^ result == #rejected ifTrue: [anEvent] ifFalse: [result "filtered event"]! Item was added: + ----- Method: MorphicEvent>>becomeActiveDuring: (in category 'initialize') ----- + becomeActiveDuring: aBlock + "Make the receiver the ActiveEvent during the evaluation of aBlock." + + | priorEvent | + priorEvent := ActiveEvent. + ActiveEvent := self. + ^ aBlock ensure: [ActiveEvent := priorEvent].! Item was changed: ----- Method: MorphicProject>>exportSegmentWithChangeSet:fileName:directory: (in category 'file in/out') ----- exportSegmentWithChangeSet: aChangeSetOrNil fileName: aFileName directory: aDirectory "Store my project out on the disk as an *exported* ImageSegment. All outPointers will be in a form that can be resolved in the target image. Name it .extSeg. Whatdo we do about subProjects, especially if they are out as local image segments? Force them to come in? Player classes are included automatically." | is str ans revertSeg roots holder collector fd mgr stacks | "Files out a changeSet first, so that a project can contain its own classes" world ifNil: [^ false]. world presenter ifNil: [^ false]. ScrapBook default emptyScrapBook. world currentHand pasteBuffer: nil. "don't write the paste buffer." world currentHand mouseOverHandler initialize. "forget about any references here" "Display checkCurrentHandForObjectToPaste." Command initialize. world clearCommandHistory. world fullReleaseCachedState; releaseViewers. world cleanseStepList. world localFlapTabs size = world flapTabs size ifFalse: [ self error: 'Still holding onto Global flaps']. world releaseSqueakPages. holder := Project allProjects. "force them in to outPointers, where DiskProxys are made" "Just export me, not my previous version" revertSeg := self parameterAt: #revertToMe. self removeParameter: #revertToMe. roots := OrderedCollection new. roots add: self; add: world; add: transcript; add: aChangeSetOrNil; add: thumbnail; add: world activeHand. "; addAll: classList; addAll: (classList collect: [:cls | cls class])" roots := roots reject: [ :x | x isNil]. "early saves may not have active hand or thumbnail" fd := aDirectory directoryNamed: self resourceDirectoryName. fd assureExistence. "Clean up resource references before writing out" mgr := self resourceManager. self resourceManager: nil. ResourceCollector current: ResourceCollector new. ResourceCollector current localDirectory: fd. ResourceCollector current baseUrl: self resourceUrl. ResourceCollector current initializeFrom: mgr. ProgressNotification signal: '2:findingResources' extra: '(collecting resources...)' translated. "Must activate old world because this is run at #armsLength. Otherwise references to ActiveWorld, ActiveHand, or ActiveEvent will not be captured correctly if referenced from blocks or user code." + world becomeActiveDuring: [world firstHand becomeActiveDuring: [ - world becomeActiveDuring:[ is := ImageSegment new copySmartRootsExport: roots asArray. "old way was (is := ImageSegment new copyFromRootsForExport: roots asArray)" + ]]. - ]. self resourceManager: mgr. collector := ResourceCollector current. ResourceCollector current: nil. ProgressNotification signal: '2:foundResources' extra: ''. is state = #tooBig ifTrue: [ collector replaceAll. ^ false]. str := ''. "considered legal to save a project that has never been entered" (is outPointers includes: world) ifTrue: [ str := str, '\Project''s own world is not in the segment.' translated withCRs]. str isEmpty ifFalse: [ ans := UIManager default chooseFrom: { 'Do not write file' translated. 'Write file anyway' translated. 'Debug' translated. } title: str. ans = 1 ifTrue: [ revertSeg ifNotNil: [projectParameters at: #revertToMe put: revertSeg]. collector replaceAll. ^ false]. ans = 3 ifTrue: [ collector replaceAll. self halt: 'Segment not written' translated]]. stacks := is findStacks. is writeForExportWithSources: aFileName inDirectory: fd changeSet: aChangeSetOrNil. SecurityManager default signFile: aFileName directory: fd. "Compress all files and update check sums" collector forgetObsolete. self storeResourceList: collector in: fd. self storeHtmlPageIn: fd. self storeManifestFileIn: fd. self writeStackText: stacks in: fd registerIn: collector. "local proj.005.myStack.t" self compressFilesIn: fd to: aFileName in: aDirectory resources: collector. "also deletes the resource directory" "Now update everything that we know about" mgr updateResourcesFrom: collector. revertSeg ifNotNil: [projectParameters at: #revertToMe put: revertSeg]. holder. collector replaceAll. world flapTabs do: [:ft | (ft respondsTo: #unhibernate) ifTrue: [ft unhibernate]]. is arrayOfRoots do: [:obj | obj isScriptEditorMorph ifTrue: [obj unhibernate]]. ^ true ! Item was changed: ----- Method: PasteUpMorph>>becomeActiveDuring: (in category 'initialization') ----- becomeActiveDuring: aBlock + "Make the receiver the ActiveWorld during the evaluation of aBlock." + + | priorWorld | - "Make the receiver the ActiveWorld during the evaluation of aBlock. - Note that this method does deliberately *not* use #ensure: to prevent - re-installation of the world on project switches." - | priorWorld priorHand priorEvent | priorWorld := ActiveWorld. - priorHand := ActiveHand. - priorEvent := ActiveEvent. ActiveWorld := self. + ^ aBlock ensure: [ActiveWorld := priorWorld].! - ActiveHand := self hands first. "default" - ActiveEvent := nil. "not in event cycle" - aBlock - on: Error - do: [:ex | - ActiveWorld := priorWorld. - ActiveEvent := priorEvent. - ActiveHand := priorHand. - ex pass]! From commits at source.squeak.org Tue Aug 16 08:35:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 08:35:38 2016 Subject: [squeak-dev] The Trunk: System-mt.893.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.893.mcz ==================== Summary ==================== Name: System-mt.893 Author: mt Time: 16 August 2016, 10:34:46.612039 am UUID: 064d9a41-2264-4f43-aeec-03e5129b9b70 Ancestors: System-mt.892 Appendix to Morphic-mt.1283 =============== Diff against System-mt.892 =============== Item was changed: ----- Method: ImageSegment>>copySmartRootsExport: (in category 'read/write segment') ----- copySmartRootsExport: rootArray "Use SmartRefStream to find the object. Make them all roots. Create the segment in memory. Project should be in first five objects in rootArray." | newRoots list segSize symbolHolder replacements naughtyBlocks allClasses sizeHint proj dummy | "self halt." symbolHolder := Symbol allSymbols. "Hold onto Symbols with strong pointers, so they will be in outPointers" dummy := ReferenceStream on: (DummyStream on: nil). "Write to a fake Stream, not a file" "Collect all objects" dummy insideASegment: true. "So Uniclasses will be traced" dummy rootObject: rootArray. "inform him about the root" dummy nextPut: rootArray. (proj :=dummy project) ifNotNil: [self dependentsSave: dummy]. allClasses := SmartRefStream new uniClassInstVarsRefs: dummy. "catalog the extra objects in UniClass inst vars. Put into dummy" allClasses do: [:cls | dummy references at: cls class put: false. "put Player5 class in roots" dummy blockers removeKey: cls class ifAbsent: []]. "refs := dummy references." arrayOfRoots := self smartFillRoots: dummy. "guaranteed none repeat" self savePlayerReferences: dummy references. "for shared References table" replacements := dummy blockers. dummy project "recompute it" ifNil: [self error: 'lost the project!!']. dummy project class == DiskProxy ifTrue: [self error: 'saving the wrong project']. dummy := nil. "force GC?" naughtyBlocks := arrayOfRoots select: [ :each | (each isKindOf: ContextPart) and: [each hasInstVarRef] ]. "since the caller switched ActiveWorld, put the real one back temporarily" naughtyBlocks isEmpty ifFalse: [ + World becomeActiveDuring: [World firstHand becomeActiveDuring: [ | goodToGo | - World becomeActiveDuring: [ | goodToGo | goodToGo := (UIManager default chooseFrom: #('keep going' 'stop and take a look') title: 'Some block(s) which reference instance variables are included in this segment. These may fail when the segment is loaded if the class has been reshaped. What would you like to do?') = 1. goodToGo ifFalse: [ naughtyBlocks inspect. self error: 'Here are the bad blocks']. + ]]. - ]. ]. "Creation of the segment happens here" "try using one-quarter of memory min: four megs to publish (will get bumped later)" sizeHint := (Smalltalk garbageCollect // 4 // 4) min: 1024*1024. self copyFromRoots: arrayOfRoots sizeHint: sizeHint areUnique: true. segSize := segment size. [(newRoots := self rootsIncludingBlockMethods) == nil] whileFalse: [ arrayOfRoots := newRoots. self copyFromRoots: arrayOfRoots sizeHint: segSize areUnique: true]. "with methods pointed at from outside" [(newRoots := self rootsIncludingBlocks) == nil] whileFalse: [ arrayOfRoots := newRoots. self copyFromRoots: arrayOfRoots sizeHint: segSize areUnique: true]. "with methods, blocks from outPointers" list := self compactClassesArray. outPointers := outPointers, ((list select: [:cls | cls ~~ nil]), (Array with: 1717 with: list)). 1 to: outPointers size do: [:ii | (outPointers at: ii) isBlock ifTrue: [outPointers at: ii put: nil]. (outPointers at: ii) class == MethodContext ifTrue: [outPointers at: ii put: nil]. "substitute new object in outPointers" (replacements includesKey: (outPointers at: ii)) ifTrue: [ outPointers at: ii put: (replacements at: (outPointers at: ii))]]. proj ifNotNil: [self dependentsCancel: proj]. symbolHolder.! From commits at source.squeak.org Tue Aug 16 08:36:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 08:36:24 2016 Subject: [squeak-dev] The Trunk: MorphicTests-mt.38.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicTests to project The Trunk: http://source.squeak.org/trunk/MorphicTests-mt.38.mcz ==================== Summary ==================== Name: MorphicTests-mt.38 Author: mt Time: 16 August 2016, 10:36:17.873039 am UUID: 3b4d0402-dcf8-1f4a-b3b4-86fd8af82cda Ancestors: MorphicTests-mt.37 Revert the hack to restore the prior ActiveWorld now that the behavior is fixed in Morphic. =============== Diff against MorphicTests-mt.37 =============== Item was changed: TestCase subclass: #UserInputEventTests + instanceVariableNames: 'hand world' - instanceVariableNames: 'hand world priorWorld' classVariableNames: '' poolDictionaries: '' category: 'MorphicTests-Events'! Item was changed: ----- Method: UserInputEventTests>>setUp (in category 'running') ----- setUp super setUp. - priorWorld := ActiveWorld. - world := (PasteUpMorph newWorldForProject: nil) extent: 300@200; viewBox: (0@0 extent: 300@200); yourself. (world instVarNamed: #worldState) instVarNamed: #canvas put: (Form extent: 300@200 depth: 32) getCanvas. hand := HandMorphForEventTests new. world removeHand: world firstHand; "the default hand" addHand: hand.! Item was changed: ----- Method: UserInputEventTests>>tearDown (in category 'running') ----- tearDown hand showHardwareCursor: true. "Nasty side-effect" - ActiveWorld := priorWorld. super tearDown.! From commits at source.squeak.org Tue Aug 16 08:46:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 08:46:25 2016 Subject: [squeak-dev] The Trunk: NetworkTests-mt.43.mcz Message-ID: Marcel Taeumel uploaded a new version of NetworkTests to project The Trunk: http://source.squeak.org/trunk/NetworkTests-mt.43.mcz ==================== Summary ==================== Name: NetworkTests-mt.43 Author: mt Time: 16 August 2016, 10:46:19.215039 am UUID: 85f13fee-ed28-034f-9c65-8feb1c098d69 Ancestors: NetworkTests-bp.42 Socket reuse is not possible on Windows platform. Make it an expected failure there. =============== Diff against NetworkTests-bp.42 =============== Item was added: + ----- Method: SocketTest>>expectedFailures (in category 'setup') ----- + expectedFailures + + ^ Smalltalk platformName = 'Win32' + ifTrue: [#(testSocketReuse)] + ifFalse: [#()]! From commits at source.squeak.org Tue Aug 16 08:55:15 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 08:55:17 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1284.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1284.mcz ==================== Summary ==================== Name: Morphic-mt.1284 Author: mt Time: 16 August 2016, 10:53:39.817039 am UUID: 9be9225e-0fc3-be4a-b443-10f527f1fb6d Ancestors: Morphic-mt.1283 Fix window color for windows without models. Do not make them transparent by default. =============== Diff against Morphic-mt.1283 =============== Item was changed: ----- Method: SystemWindow class>>themeProperties (in category 'preferences') ----- themeProperties ^ super themeProperties, { { #borderColorModifier. 'Colors'. 'How to derive the borderColor from the window color.' }. { #borderWidth. 'Borders'. 'Width of the menu''s border.' }. { #titleFont. 'Fonts'. 'Font of the window title.' }. { #unfocusedWindowColorModifier. 'Colors'. 'A block with one argument that modifies a color to look unfocused.' }. { #unfocusedLabelColor. 'Colors'. 'Window title color when window has no focus.'}. { #focusedLabelColor. 'Colors'. 'Window title color when window has focus.'}. + + { #color. 'Colors'. 'Color to use if the model or the pane morphs do not provide one.' }. }! Item was added: + ----- Method: SystemWindow>>defaultColor (in category 'initialization') ----- + defaultColor + + ^ self userInterfaceTheme color ifNil: [Color veryVeryLightGray]! From commits at source.squeak.org Tue Aug 16 09:52:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 09:52:24 2016 Subject: [squeak-dev] The Trunk: System-mt.894.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.894.mcz ==================== Summary ==================== Name: System-mt.894 Author: mt Time: 16 August 2016, 11:48:55.578039 am UUID: bb9a7996-562f-c449-9b29-093bc70630a0 Ancestors: System-mt.893 Small adjustments in the Solarized and Monokai themes. =============== Diff against System-mt.893 =============== Item was changed: ----- Method: MonokaiTheme class>>addDarkWindowColors: (in category 'instance creation') ----- addDarkWindowColors: theme "self createDark apply." theme + set: #uniformWindowColor for: #Model to:( self invisibleColor adjustBrightness: 0.16) "lighter twice"; - set: #uniformWindowColor for: #Model to: self invisibleColor lighter; + set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color adjustBrightness: -0.16 "darker twice"] ]; - set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; set: #unfocusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.285 g: 0.282 b: 0.242) "invisible color"] ifFalse: [(Color r: 0.972 g: 0.972 b: 0.948) "foreground color"] ]; set: #focusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.152 g: 0.156 b: 0.133) "background color"] ifFalse: [(Color r: 0.901 g: 0.858 b: 0.455) "yellow"] ]; set: #customWindowColor for: #Browser to: self green; set: #customWindowColor for: #ChangeList to: self blue; set: #customWindowColor for: #ChangeSorter to: self blue; set: #customWindowColor for: #ChatNotes to: self magenta; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet; set: #customWindowColor for: #Debugger to: self red; set: #customWindowColor for: #DualChangeSorter to: self blue; set: #customWindowColor for: #FileContentsBrowser to: self yellow; set: #customWindowColor for: #FileList to: self yellow; set: #customWindowColor for: #InstanceBrowser to: self cyan; set: #customWindowColor for: #Lexicon to: self cyan; set: #customWindowColor for: #MCTool to: self violet; set: #customWindowColor for: #MessageNames to: self green; set: #customWindowColor for: #MessageSet to: self cyan; set: #customWindowColor for: #PackagePaneBrowser to: self green; set: #customWindowColor for: #PluggableFileList to: self yellow; set: #customWindowColor for: #PreferenceBrowser to: self cyan; set: #customWindowColor for: #SMLoader to: self orange; set: #customWindowColor for: #SMLoaderPlus to: self orange; set: #customWindowColor for: #SMReleaseBrowser to: self orange; set: #customWindowColor for: #ScriptingDomain to: self yellow; set: #customWindowColor for: #SelectorBrowser to: self cyan; set: #customWindowColor for: #StringHolder to: self yellow; set: #customWindowColor for: #TestRunner to: self orange; set: #customWindowColor for: #TranscriptStream to: self orange; set: #customWindowColor for: #VersionsBrowser to: self violet.! Item was changed: ----- Method: MonokaiTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." + | themeName | + themeName := 'Monokai (dark)'. + ^ (self named: themeName) in: [:theme | - | name | - name := 'Monokai (dark)'. - ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. + theme name: themeName. - theme name: name. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1. theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: MonokaiTheme class>>darkBackgroundForm (in category 'instance creation') ----- darkBackgroundForm | ref | ref := self backgroundColor. ^ (SqueakTheme linenblue asFormOfDepth: 32) collectColors: [:c | Color h:ref hue s: ref saturation v: c brightness - 0.1 alpha: c alpha]! Item was changed: ----- Method: SolarizedTheme class>>addDarkWindowColors: (in category 'instance creation') ----- addDarkWindowColors: theme + "doIt: [self createDark apply.]" + - "self createDark apply." theme + set: #uniformWindowColor for: #Model to: (self darkBackgroundHighlights adjustBrightness: 0.16 "lighter twice"); + + set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color adjustBrightness: -0.16 "darker twice"] ]; - set: #uniformWindowColor for: #Model to: self darkBackgroundHighlights lighter; - - set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; set: #unfocusedLabelColor for: #SystemWindow to: self darkContentEmphasized; set: #focusedLabelColor for: #SystemWindow to: self darkContentEmphasizedMore; set: #customWindowColor for: #Browser to: self green; set: #customWindowColor for: #ChangeList to: self blue; set: #customWindowColor for: #ChangeSorter to: self blue; set: #customWindowColor for: #ChatNotes to: self magenta; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet; set: #customWindowColor for: #Debugger to: self red; set: #customWindowColor for: #DualChangeSorter to: self blue; set: #customWindowColor for: #FileContentsBrowser to: self yellow; set: #customWindowColor for: #FileList to: self yellow; set: #customWindowColor for: #InstanceBrowser to: self cyan; set: #customWindowColor for: #Lexicon to: self cyan; set: #customWindowColor for: #MCTool to: self violet; set: #customWindowColor for: #MessageNames to: self green; set: #customWindowColor for: #MessageSet to: self cyan; set: #customWindowColor for: #PackagePaneBrowser to: self green; set: #customWindowColor for: #PluggableFileList to: self yellow; set: #customWindowColor for: #PreferenceBrowser to: self cyan; set: #customWindowColor for: #SMLoader to: self orange; set: #customWindowColor for: #SMLoaderPlus to: self orange; set: #customWindowColor for: #SMReleaseBrowser to: self orange; set: #customWindowColor for: #ScriptingDomain to: self yellow; set: #customWindowColor for: #SelectorBrowser to: self cyan; set: #customWindowColor for: #StringHolder to: self yellow; set: #customWindowColor for: #TestRunner to: self orange; set: #customWindowColor for: #TranscriptStream to: self orange; set: #customWindowColor for: #VersionsBrowser to: self violet.! Item was changed: ----- Method: SolarizedTheme class>>addLightWindowColors: (in category 'instance creation') ----- addLightWindowColors: theme + "You have to create dark first. + doIt: [self createDark. self createLight apply.]" + - "self createLight apply." theme + set: #uniformWindowColor for: #Model to: (self lightBackgroundHighlights adjustBrightness: -0.16 "darker twice"); + + set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color adjustBrightness: 0.16 "lighter twice"] ]; - set: #uniformWindowColor for: #Model to: self lightBackgroundHighlights darker; - - set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color lighter] ]; set: #unfocusedLabelColor for: #SystemWindow to: self lightContentEmphasized; set: #focusedLabelColor for: #SystemWindow to: self lightContentEmphasizedMore; set: #customWindowColor for: #Browser to: self green; set: #customWindowColor for: #ChangeList to: self blue; set: #customWindowColor for: #ChangeSorter to: self blue; set: #customWindowColor for: #ChatNotes to: self magenta; set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet; set: #customWindowColor for: #Debugger to: self red; set: #customWindowColor for: #DualChangeSorter to: self blue; set: #customWindowColor for: #FileContentsBrowser to: self yellow; set: #customWindowColor for: #FileList to: self yellow; set: #customWindowColor for: #InstanceBrowser to: self cyan; set: #customWindowColor for: #Lexicon to: self cyan; set: #customWindowColor for: #MCTool to: self violet; set: #customWindowColor for: #MessageNames to: self green; set: #customWindowColor for: #MessageSet to: self cyan; set: #customWindowColor for: #PackagePaneBrowser to: self green; set: #customWindowColor for: #PluggableFileList to: self yellow; set: #customWindowColor for: #PreferenceBrowser to: self cyan; set: #customWindowColor for: #SMLoader to: self orange; set: #customWindowColor for: #SMLoaderPlus to: self orange; set: #customWindowColor for: #SMReleaseBrowser to: self orange; set: #customWindowColor for: #ScriptingDomain to: self yellow; set: #customWindowColor for: #SelectorBrowser to: self cyan; set: #customWindowColor for: #StringHolder to: self yellow; set: #customWindowColor for: #TestRunner to: self orange; set: #customWindowColor for: #TranscriptStream to: self orange; set: #customWindowColor for: #VersionsBrowser to: self violet.! Item was changed: ----- Method: SolarizedTheme class>>createDark (in category 'instance creation') ----- createDark + "doIt: [self createDark apply.]" + + | themeName | + themeName := 'Solarized (dark)'. + ^ (self named: themeName) in: [:theme | - "self createDark apply." - | name | - name := 'Solarized (dark)'. - ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. + theme name: themeName. + - theme name: name. - "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self darkContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. - - theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). + theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self lightBackgroundForm). + self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme. + - theme]! Item was changed: ----- Method: SolarizedTheme class>>createLight (in category 'instance creation') ----- createLight "You have to create dark first. + doIt: [self createDark. self createLight apply.]" + + | themeName | + themeName := 'Solarized (light)'. + ^ (self named: themeName) in: [:theme | - self createLight apply." - - | name | - name := 'Solarized (light)'. - ^ (self named: 'Solarized (light)') in: [:theme | theme merge: (self named: 'Solarized (dark)') overwrite: true. + theme name: themeName. + - theme name: name. - "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self lightContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. - - theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self lightBackgroundForm). + theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). + self addLightFonts: theme; addLightWindowColors: theme; addLightSyntaxHighlighting: theme; addLightScrollables: theme; addLightButtons: theme; addLightDialogs: theme; addLightMenusAndDockingBars: theme. + - theme]! Item was changed: ----- Method: SqueakTheme class>>addWindowColors: (in category 'instance creation') ----- addWindowColors: theme + theme - theme set: #titleFont for: #SystemWindow to: [Preferences windowTitleFont]; set: #borderColorModifier for: #SystemWindow to: [ [:c | c adjustBrightness: -0.3] ]; set: #borderWidth for: #SystemWindow to: 1; set: #uniformWindowColor for: #Model to: Color veryVeryLightGray; derive: #uniformWindowColor for: #TranscriptStream from: #Model; + derive: #color for: #SystemWindow from: #Model at: #uniformWindowColor; "Fall back for windows without models." + - set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color darker] ]; set: #unfocusedLabelColor for: #SystemWindow to: Color darkGray; set: #focusedLabelColor for: #SystemWindow to: Color black; set: #customWindowColor for: #Browser to: (Color r: 0.764 g: 0.9 b: 0.63); set: #customWindowColor for: #ChangeList to: (Color r: 0.719 g: 0.9 b: 0.9); set: #customWindowColor for: #ChangeSorter to: (Color r: 0.719 g: 0.9 b: 0.9); set: #customWindowColor for: #ChatNotes to: (Color r: 1.0 g: 0.7 b: 0.8); set: #customWindowColor for: #ClassCommentVersionsBrowser to: (Color r: 0.753 g: 0.677 b: 0.9); set: #customWindowColor for: #Debugger to: (Color r: 0.9 g: 0.719 b: 0.719); set: #customWindowColor for: #DualChangeSorter to: (Color r: 0.719 g: 0.9 b: 0.9); set: #customWindowColor for: #FileContentsBrowser to: (Color r: 0.7 g: 0.7 b: 0.508); set: #customWindowColor for: #FileList to: (Color r: 0.65 g: 0.65 b: 0.65); set: #customWindowColor for: #InstanceBrowser to: (Color r: 0.726 g: 0.9 b: 0.9); set: #customWindowColor for: #Lexicon to: (Color r: 0.79 g: 0.9 b: 0.79); set: #customWindowColor for: #MCTool to: (Color r: 0.65 g: 0.691 b: 0.876); set: #customWindowColor for: #MessageNames to: (Color r: 0.639 g: 0.9 b: 0.497); set: #customWindowColor for: #MessageSet to: (Color r: 0.719 g: 0.9 b: 0.9); set: #customWindowColor for: #PackagePaneBrowser to: (Color r: 0.9 g: 0.9 b: 0.63); set: #customWindowColor for: #PluggableFileList to: Color lightYellow; set: #customWindowColor for: #PreferenceBrowser to: (Color r: 0.671 g: 0.9 b: 0.9); set: #customWindowColor for: #SMLoader to: (Color r: 0.801 g: 0.801 b: 0.614); set: #customWindowColor for: #SMLoaderPlus to: (Color r: 0.801 g: 0.801 b: 0.614); set: #customWindowColor for: #SMReleaseBrowser to: (Color r: 0.801 g: 0.801 b: 0.614); set: #customWindowColor for: #ScriptingDomain to: (Color r: 0.91 g: 0.91 b: 0.91); set: #customWindowColor for: #SelectorBrowser to: (Color r: 0.45 g: 0.9 b: 0.9); set: #customWindowColor for: #StringHolder to: (Color r: 0.9 g: 0.9 b: 0.719); set: #customWindowColor for: #TestRunner to: (Color r: 0.9 g: 0.576 b: 0.09); set: #customWindowColor for: #TranscriptStream to: (Color r: 0.9 g: 0.75 b: 0.45); set: #customWindowColor for: #VersionsBrowser to: (Color r: 0.782 g: 0.677 b: 0.9).! Item was changed: ----- Method: SqueakTheme class>>create (in category 'instance creation') ----- create "This is the default theme for Squeak. + self create apply. " - self create. " ^ (self named: 'Squeak') in: [:theme | "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: (TranslucentColor r: 0.3 g: 0.5 b: 0.5 alpha: 0.5); set: #keyboardFocusWidth for: #Morph to: 3; set: #softShadowColor for: #Morph to: (Color black alpha: 0.01); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (Color black alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1@1. theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self linenblue). self addFonts: theme; addWindowColors: theme; addSyntaxHighlighting: theme; addMenusAndDockingBars: theme; addDialogs: theme; addButtons: theme; addScrollables: theme. theme]! From commits at source.squeak.org Tue Aug 16 10:24:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 10:24:43 2016 Subject: [squeak-dev] The Trunk: Tests-pre.350.mcz Message-ID: Patrick Rein uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-pre.350.mcz ==================== Summary ==================== Name: Tests-pre.350 Author: pre Time: 16 August 2016, 12:24:24.821656 pm UUID: e43d8c5d-f59f-9a48-b3a8-62a7f8b46ca7 Ancestors: Tests-pre.349 Fixes timout issues of large font test cases =============== Diff against Tests-pre.349 =============== Item was added: + ----- Method: LangEnvBugs>>defaultTimeout (in category 'as yet unclassified') ----- + defaultTimeout + + ^ 60! Item was added: + ----- Method: StandardSystemFontsTest>>defaultTimeout (in category 'testing') ----- + defaultTimeout + + ^ 60! From commits at source.squeak.org Tue Aug 16 11:30:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 11:30:03 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.106.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.106.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.106 Author: mt Time: 16 August 2016, 1:29:52.267039 pm UUID: ec57bc1d-1b9f-6142-86e3-fef680f65fe0 Ancestors: ToolBuilder-Kernel-mt.105 Fixes test result colors in TestRunner. =============== Diff against ToolBuilder-Kernel-mt.105 =============== Item was changed: PluggableWidgetSpec subclass: #PluggableTextSpec + instanceVariableNames: 'getText setText selection menu askBeforeDiscardingEdits editText indicateUnacceptedChanges stylerClass font readOnly softLineWrap hardLineWrap textColor' - instanceVariableNames: 'getText setText selection menu askBeforeDiscardingEdits editText indicateUnacceptedChanges stylerClass font readOnly softLineWrap hardLineWrap' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableTextSpec commentStamp: 'ar 2/11/2005 21:58' prior: 0! A text editor. Instance variables: getText The selector to retrieve the text. setText The selector to set the text. selection The selector to retrieve the text selection. menu The selector to offer (to retrieve?) the context menu. color The selector to retrieve the background color. ! Item was added: + ----- Method: PluggableTextSpec>>textColor (in category 'accessing') ----- + textColor + ^ textColor! Item was added: + ----- Method: PluggableTextSpec>>textColor: (in category 'accessing') ----- + textColor: aSymbol + textColor := aSymbol.! From commits at source.squeak.org Tue Aug 16 11:34:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 11:34:42 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.106.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.106.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.106 Author: mt Time: 16 August 2016, 1:29:52.267039 pm UUID: ec57bc1d-1b9f-6142-86e3-fef680f65fe0 Ancestors: ToolBuilder-Kernel-mt.105 Fixes test result colors in TestRunner. =============== Diff against ToolBuilder-Kernel-mt.105 =============== Item was changed: PluggableWidgetSpec subclass: #PluggableTextSpec + instanceVariableNames: 'getText setText selection menu askBeforeDiscardingEdits editText indicateUnacceptedChanges stylerClass font readOnly softLineWrap hardLineWrap textColor' - instanceVariableNames: 'getText setText selection menu askBeforeDiscardingEdits editText indicateUnacceptedChanges stylerClass font readOnly softLineWrap hardLineWrap' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !PluggableTextSpec commentStamp: 'ar 2/11/2005 21:58' prior: 0! A text editor. Instance variables: getText The selector to retrieve the text. setText The selector to set the text. selection The selector to retrieve the text selection. menu The selector to offer (to retrieve?) the context menu. color The selector to retrieve the background color. ! Item was added: + ----- Method: PluggableTextSpec>>textColor (in category 'accessing') ----- + textColor + ^ textColor! Item was added: + ----- Method: PluggableTextSpec>>textColor: (in category 'accessing') ----- + textColor: aSymbol + textColor := aSymbol.! From commits at source.squeak.org Tue Aug 16 11:36:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 11:36:12 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.185.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.185.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.185 Author: mt Time: 16 August 2016, 1:35:55.348602 pm UUID: b6d9df46-d533-6340-b52e-bfd75c874510 Ancestors: ToolBuilder-Morphic-mt.184 Fixes test result colors in TestRunner. =============== Diff against ToolBuilder-Morphic-mt.184 =============== Item was changed: ----- Method: MorphicToolBuilder>>buildPluggableText: (in category 'widgets required') ----- buildPluggableText: aSpec | widget | widget := self textPaneClass new. aSpec stylerClass ifNotNil: [:c | widget styler: (c new view: widget)]. widget on: aSpec model text: aSpec getText accept: aSpec setText readSelection: aSpec selection menu: aSpec menu. aSpec font ifNotNil: [:f | widget font: f]. widget readOnly: aSpec readOnly. widget editTextSelector: aSpec editText. widget wantsFrameAdornments: aSpec indicateUnacceptedChanges. widget askBeforeDiscardingEdits: aSpec askBeforeDiscardingEdits. widget setProperty: #alwaysAccept toValue: aSpec askBeforeDiscardingEdits not. aSpec softLineWrap ifNotNil: [:b | widget wrapFlag: b]. widget isAutoFit ifTrue: [widget hideHScrollBarIndefinitely] ifFalse: [widget showHScrollBarOnlyWhenNeeded]. self register: widget id: aSpec name. widget getColorSelector: aSpec color. + widget getTextColorSelector: aSpec textColor. self buildHelpFor: widget spec: aSpec. self setFrame: aSpec frame in: widget. self setLayoutHintsFor: widget spec: aSpec. parent ifNotNil:[self add: widget to: parent]. ^widget! Item was changed: PluggableTextMorph subclass: #PluggableTextMorphPlus + instanceVariableNames: 'getColorSelector acceptAction unstyledAcceptText styler getTextColorSelector' - instanceVariableNames: 'getColorSelector acceptAction unstyledAcceptText styler' classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Morphic'! !PluggableTextMorphPlus commentStamp: 'ar 2/11/2005 21:53' prior: 0! A pluggable text morph with support for color.! Item was added: + ----- Method: PluggableTextMorphPlus>>getTextColorSelector (in category 'accessing') ----- + getTextColorSelector + ^getTextColorSelector! Item was added: + ----- Method: PluggableTextMorphPlus>>getTextColorSelector: (in category 'accessing') ----- + getTextColorSelector: aSymbol + getTextColorSelector := aSymbol. + self update: getTextColorSelector.! Item was changed: ----- Method: PluggableTextMorphPlus>>update: (in category 'updating') ----- update: what what ifNil:[^self]. + what == getColorSelector ifTrue: [self color: (model perform: getColorSelector)]. + what == getTextColorSelector ifTrue: [self setTextColor: (model perform: getTextColorSelector)]. - what == getColorSelector ifTrue:[self color: (model perform: getColorSelector)]. what == #style ifTrue: [self updateStyle]. + ^super update: what! From commits at source.squeak.org Tue Aug 16 11:39:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 11:39:52 2016 Subject: [squeak-dev] The Trunk: SUnitGUI-mt.64.mcz Message-ID: Marcel Taeumel uploaded a new version of SUnitGUI to project The Trunk: http://source.squeak.org/trunk/SUnitGUI-mt.64.mcz ==================== Summary ==================== Name: SUnitGUI-mt.64 Author: mt Time: 16 August 2016, 1:39:42.360602 pm UUID: 08349d2a-bbbc-fd46-9741-19647ea05127 Ancestors: SUnitGUI-mt.63 Fixes test result colors in TestRunner. =============== Diff against SUnitGUI-mt.63 =============== Item was added: + ----- Method: TestRunner class>>themeProperties (in category 'preferences') ----- + themeProperties + + ^ super themeProperties, { + { #failureColor. 'Colors'. 'Color to indicate failed tests.'}. + { #errorColor. 'Colors'. 'Color to indicate errored tests.'}. + { #passColor. 'Colors'. 'Color to indicate passed tests.'}. + + { #failureTextColor. 'Colors'. 'Color to indicate failed tests.'}. + { #errorTextColor. 'Colors'. 'Color to indicate errored tests.'}. + { #passTextColor. 'Colors'. 'Color to indicate passed tests.'}. + + }! Item was added: + ----- Method: TestRunner>>applyUserInterfaceTheme (in category 'updating') ----- + applyUserInterfaceTheme + + super applyUserInterfaceTheme. + + self changed: #statusColor. + self changed: #statusTextColor.! Item was changed: ----- Method: TestRunner>>buildStatusWith: (in category 'building') ----- buildStatusWith: aBuilder ^ aBuilder pluggableTextSpec new model: self; menu: #statusMenu:; color: #statusColor; + textColor: #statusTextColor; getText: #statusText; yourself.! Item was changed: ----- Method: TestRunner>>statusColor (in category 'accessing-testing') ----- statusColor + result hasErrors ifTrue: [^ self userInterfaceTheme errorColor ifNil: [Color red]]. + result hasFailures ifTrue: [^ self userInterfaceTheme failureColor ifNil: [Color yellow]]. + ^ self userInterfaceTheme passColor ifNil: [Color green]! - result hasErrors - ifTrue: [ ^ Color red ]. - result hasFailures - ifTrue:[ ^ Color yellow ]. - ^ Color green! Item was added: + ----- Method: TestRunner>>statusTextColor (in category 'accessing-testing') ----- + statusTextColor + result hasErrors ifTrue: [^ self userInterfaceTheme errorTextColor ifNil: [Color black]]. + result hasFailures ifTrue: [^ self userInterfaceTheme failureTextColor ifNil: [Color black]]. + ^ self userInterfaceTheme passTextColor ifNil: [Color black]! Item was changed: ----- Method: TestRunner>>updateStatus: (in category 'updating') ----- updateStatus: aBoolean "Update the status display, at most once a second if aBoolean is true." (aBoolean and: [ lastUpdate = Time totalSeconds ]) ifTrue: [ ^ self ]. + self changed: #statusText; changed: #statusColor; changed: #statusTextColor. - self changed: #statusText; changed: #statusColor. lastUpdate := Time totalSeconds.! From commits at source.squeak.org Tue Aug 16 12:02:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 12:02:20 2016 Subject: [squeak-dev] The Trunk: System-mt.895.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.895.mcz ==================== Summary ==================== Name: System-mt.895 Author: mt Time: 16 August 2016, 1:41:37.752602 pm UUID: 9960fb09-edfe-7442-b175-2bea31dbcbd8 Ancestors: System-mt.894 Sets UI theme colors for TestRunner status field. =============== Diff against System-mt.894 =============== Item was added: + ----- Method: CommunityTheme class>>addDarkToolColors: (in category 'instance creation') ----- + addDarkToolColors: theme + "Tool-specific colors." + + theme + set: #failureColor for: #TestRunner to: self dbYellow; + set: #errorColor for: #TestRunner to: self dbRed; + set: #passColor for: #TestRunner to: self dbGreen.! Item was changed: ----- Method: CommunityTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | name | name := 'Community (dark)'. ^ (self named: name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. "General morph stuff." theme set: #borderColor for: #ScrollPane to: (Color transparent) ; set: #keyboardFocusColor for: #Morph to: (self dbSelection adjustSaturation: -0.3 brightness: 0.10); set: #keyboardFocusWidth for: #Morph to: 2; set: #softShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.025); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (self dbSelection muchLighter alpha: 0.02); set: #hardShadowOffset for: #Morph to: 1@1. self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; + addDarkMenusAndDockingBars: theme; + addDarkToolColors: theme. - addDarkMenusAndDockingBars: theme. theme]! Item was added: + ----- Method: MonokaiTheme class>>addDarkToolColors: (in category 'instance creation') ----- + addDarkToolColors: theme + "Tool-specific colors." + + theme + set: #failureColor for: #TestRunner to: self yellow; + set: #errorColor for: #TestRunner to: self red; + set: #passColor for: #TestRunner to: self green; + + set: #failureTextColor for: #TestRunner to: self backgroundColor; + set: #errorTextColor for: #TestRunner to: self backgroundColor; + set: #passTextColor for: #TestRunner to: self backgroundColor.! Item was changed: ----- Method: MonokaiTheme class>>addDarkWindowColors: (in category 'instance creation') ----- addDarkWindowColors: theme "self createDark apply." theme set: #uniformWindowColor for: #Model to:( self invisibleColor adjustBrightness: 0.16) "lighter twice"; set: #unfocusedWindowColorModifier for: #SystemWindow to: [ [:color | color adjustBrightness: -0.16 "darker twice"] ]; set: #unfocusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.285 g: 0.282 b: 0.242) "invisible color"] ifFalse: [(Color r: 0.972 g: 0.972 b: 0.948) "foreground color"] ]; set: #focusedLabelColor for: #SystemWindow to: [ Model useColorfulWindows ifTrue: [(Color r: 0.152 g: 0.156 b: 0.133) "background color"] ifFalse: [(Color r: 0.901 g: 0.858 b: 0.455) "yellow"] ]; + set: #customWindowColor for: #Browser to: self green duller; + set: #customWindowColor for: #ChangeList to: self blue duller; + set: #customWindowColor for: #ChangeSorter to: self blue duller; + set: #customWindowColor for: #ChatNotes to: self magenta duller; + set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet duller; + set: #customWindowColor for: #Debugger to: self red duller; + set: #customWindowColor for: #DualChangeSorter to: self blue duller; + set: #customWindowColor for: #FileContentsBrowser to: self yellow duller; + set: #customWindowColor for: #FileList to: self yellow duller; + set: #customWindowColor for: #InstanceBrowser to: self cyan duller; + set: #customWindowColor for: #Lexicon to: self cyan duller; + set: #customWindowColor for: #MCTool to: self violet duller; + set: #customWindowColor for: #MessageNames to: self green duller; + set: #customWindowColor for: #MessageSet to: self cyan duller; + set: #customWindowColor for: #PackagePaneBrowser to: self green duller; + set: #customWindowColor for: #PluggableFileList to: self yellow duller; + set: #customWindowColor for: #PreferenceBrowser to: self cyan duller; + set: #customWindowColor for: #SMLoader to: self orange duller; + set: #customWindowColor for: #SMLoaderPlus to: self orange duller; + set: #customWindowColor for: #SMReleaseBrowser to: self orange duller; + set: #customWindowColor for: #ScriptingDomain to: self yellow duller; + set: #customWindowColor for: #SelectorBrowser to: self cyan duller; + set: #customWindowColor for: #StringHolder to: self yellow duller; + set: #customWindowColor for: #TestRunner to: self orange duller; + set: #customWindowColor for: #TranscriptStream to: self orange duller; + set: #customWindowColor for: #VersionsBrowser to: self violet duller.! - set: #customWindowColor for: #Browser to: self green; - set: #customWindowColor for: #ChangeList to: self blue; - set: #customWindowColor for: #ChangeSorter to: self blue; - set: #customWindowColor for: #ChatNotes to: self magenta; - set: #customWindowColor for: #ClassCommentVersionsBrowser to: self violet; - set: #customWindowColor for: #Debugger to: self red; - set: #customWindowColor for: #DualChangeSorter to: self blue; - set: #customWindowColor for: #FileContentsBrowser to: self yellow; - set: #customWindowColor for: #FileList to: self yellow; - set: #customWindowColor for: #InstanceBrowser to: self cyan; - set: #customWindowColor for: #Lexicon to: self cyan; - set: #customWindowColor for: #MCTool to: self violet; - set: #customWindowColor for: #MessageNames to: self green; - set: #customWindowColor for: #MessageSet to: self cyan; - set: #customWindowColor for: #PackagePaneBrowser to: self green; - set: #customWindowColor for: #PluggableFileList to: self yellow; - set: #customWindowColor for: #PreferenceBrowser to: self cyan; - set: #customWindowColor for: #SMLoader to: self orange; - set: #customWindowColor for: #SMLoaderPlus to: self orange; - set: #customWindowColor for: #SMReleaseBrowser to: self orange; - set: #customWindowColor for: #ScriptingDomain to: self yellow; - set: #customWindowColor for: #SelectorBrowser to: self cyan; - set: #customWindowColor for: #StringHolder to: self yellow; - set: #customWindowColor for: #TestRunner to: self orange; - set: #customWindowColor for: #TranscriptStream to: self orange; - set: #customWindowColor for: #VersionsBrowser to: self violet.! Item was changed: ----- Method: MonokaiTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | themeName | themeName := 'Monokai (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1. theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; + addDarkMenusAndDockingBars: theme; + addDarkToolColors: theme. - addDarkMenusAndDockingBars: theme. theme]! Item was added: + ----- Method: SolarizedTheme class>>addDarkToolColors: (in category 'instance creation') ----- + addDarkToolColors: theme + "Tool-specific colors." + + theme + set: #failureColor for: #TestRunner to: self yellow; + set: #errorColor for: #TestRunner to: self red; + set: #passColor for: #TestRunner to: self green; + + set: #failureTextColor for: #TestRunner to: self darkBackground; + set: #errorTextColor for: #TestRunner to: self darkBackground; + set: #passTextColor for: #TestRunner to: self darkBackground.! Item was added: + ----- Method: SolarizedTheme class>>addLightToolColors: (in category 'instance creation') ----- + addLightToolColors: theme + "Tool-specific colors." + + theme + set: #failureColor for: #TestRunner to: self yellow; + set: #errorColor for: #TestRunner to: self red; + set: #passColor for: #TestRunner to: self green; + + set: #failureTextColor for: #TestRunner to: self lightBackground; + set: #errorTextColor for: #TestRunner to: self lightBackground; + set: #passTextColor for: #TestRunner to: self lightBackground.! Item was changed: ----- Method: SolarizedTheme class>>createDark (in category 'instance creation') ----- createDark "doIt: [self createDark apply.]" | themeName | themeName := 'Solarized (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self darkContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self lightBackgroundForm). self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; + addDarkMenusAndDockingBars: theme; + addDarkToolColors: theme. - addDarkMenusAndDockingBars: theme. theme]! Item was changed: ----- Method: SolarizedTheme class>>createLight (in category 'instance creation') ----- createLight "You have to create dark first. doIt: [self createDark. self createLight apply.]" | themeName | themeName := 'Solarized (light)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Solarized (dark)') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self lightContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). self addLightFonts: theme; addLightWindowColors: theme; addLightSyntaxHighlighting: theme; addLightScrollables: theme; addLightButtons: theme; addLightDialogs: theme; + addLightMenusAndDockingBars: theme; + addLightToolColors: theme. - addLightMenusAndDockingBars: theme. theme]! Item was added: + ----- Method: SqueakTheme class>>addDullerToolColors: (in category 'instance creation') ----- + addDullerToolColors: theme + "Tool-specific colors." + + theme + set: #failureColor for: #TestRunner to: Color yellow duller; + set: #errorColor for: #TestRunner to: Color red duller; + set: #passColor for: #TestRunner to: Color green duller.! Item was added: + ----- Method: SqueakTheme class>>addToolColors: (in category 'instance creation') ----- + addToolColors: theme + "Tool-specific colors." + + theme + set: #failureColor for: #TestRunner to: Color yellow; + set: #errorColor for: #TestRunner to: Color red; + set: #passColor for: #TestRunner to: Color green; + + derive: #failureTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; + derive: #errorTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; + derive: #passTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor.! Item was changed: ----- Method: SqueakTheme class>>create (in category 'instance creation') ----- create "This is the default theme for Squeak. self create apply. " ^ (self named: 'Squeak') in: [:theme | "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: (TranslucentColor r: 0.3 g: 0.5 b: 0.5 alpha: 0.5); set: #keyboardFocusWidth for: #Morph to: 3; set: #softShadowColor for: #Morph to: (Color black alpha: 0.01); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (Color black alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1@1. theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self linenblue). self addFonts: theme; addWindowColors: theme; addSyntaxHighlighting: theme; addMenusAndDockingBars: theme; addDialogs: theme; addButtons: theme; + addScrollables: theme; + addToolColors: theme. - addScrollables: theme. theme]! Item was changed: ----- Method: SqueakTheme class>>createDuller (in category 'instance creation') ----- createDuller "self createDuller apply" | name | name := 'Squeak (duller)'. ^ (self named:name) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: name. self addDullerWindowColors: theme; addDullerScrollables: theme; addDullerDialogs: theme; addDullerMenusAndDockingBars: theme; + addDullerButtons: theme; + addDullerToolColors: theme. - addDullerButtons: theme. theme set: #color for: #TextAction to: Color ocean. theme]! From hannes.hirzel at gmail.com Tue Aug 16 12:07:32 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Aug 16 12:07:36 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> Message-ID: On 8/14/16, Fabio Niephaus wrote: > Here are the helper functions I came up with for the squeak.sh launcher to > ensure that the kernel is newer than 2.6.12 and that a squeak.conf exists: > https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe > > Best, > Fabio I added the calls to the two functions to helpers.sh It works but needs sudo permission which is normally not given. So some tweaking is needed. THIS DOES NOT WORK user8@user8-Latitude:~$ ./helpers.sh ./helpers.sh: line 17: \: command not found /etc/security/limits.d/squeak.conf is missing. Do you want to create one? This operation requires sudo permissions. (y/N): y You may be asked to enter your password... ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: Permission denied Done! Please log out and log back in before you try again. user8@user8-Latitude:~$ THIS IS FINE sudo ./helpers.sh [sudo] password for user8: ./helpers.sh: line 17: \: command not found /etc/security/limits.d/squeak.conf is missing. Do you want to create one? This operation requires sudo permissions. (y/N): y You may be asked to enter your password... Done! Please log out and log back in before you try again. user8@user8-Latitude:~$ --Hannes > -- > > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel wrote: > >> For the case I reported >> >> uname -r >> >> gives >> >> 3.19.0-25-generic >> >> for the kernel version >> >> --Hannes >> >> On 8/14/16, Levente Uzonyi wrote: >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >> > >> >> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel >> >>> wrote: >> >>> >> >>> Hello Levente >> >>> >> >>> The following on did the job. The 64bit all-in-one runs fine on >> >>> Ubuntu >> >>> 14.04.1. >> >> >> >> I guess an obvious question here is why on earth ubuntu is using such >> >> an >> >> old kernel. Raspbian (based on debian and so very conservative) got >> >> past >> >> that point at least 18 months ago. >> > >> > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o 4.4 >> > if >> > you want to. >> > >> > Levente >> > >> >> >> >> >> >> tim >> >> -- >> >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> >> Strange OpCodes: BBL: Branch on Burned out Light >> >> >> >> >> >> >> >> >> > >> > >> >> > From commits at source.squeak.org Tue Aug 16 12:22:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 12:22:08 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.646.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.646.mcz ==================== Summary ==================== Name: Monticello-mt.646 Author: mt Time: 16 August 2016, 2:21:44.204602 pm UUID: c02c97e9-6287-c54d-a55d-d61e57e2caed Ancestors: Monticello-mt.645 Fix UI theme for MCOperationsBrowser. For the sake of feature freeze, do it for ignore/reject changes only. As far as I can see, the MCMergeBrowser requires a little more care. However, the MCConflict summaries are emphasis only (bold etc.) and not colorized, so this is not that urgent. =============== Diff against Monticello-mt.645 =============== Item was added: + ----- Method: MCOperationsBrowser class>>themeProperties (in category 'preferences') ----- + themeProperties + + ^ super themeProperties, { + { #revertedOperationAttributes. 'Colors' . 'Text attributes to use for reverted operations in MC tools.' }. + { #ignoredOperationAttributes. 'Colors' . 'Text attributes to use for ignored operations in MC tools.' }. + + "{ #rejectedOperationAttributes. 'Colors' . 'Text attributes to use for rejected operations in MC tools.' }. + { #acceptedOperationAttributes. 'Colors' . 'Text attributes to use for accepted operations in MC tools.' }. + { #conflictingOperationAttributes. 'Colors' . 'Text attributes to use for conflicting operations in MC tools.' }." + }! Item was added: + ----- Method: MCOperationsBrowser>>applyUserInterfaceTheme (in category 'updating') ----- + applyUserInterfaceTheme + + super applyUserInterfaceTheme. + + self changed: #list.! Item was changed: ----- Method: MCOperationsBrowser>>list (in category 'accessing') ----- list ^ self items collect: [:each | (self reverts includes: each) ifFalse: [each summary] + ifTrue: [Text + string: '( ', each summary, ' )' + attributes: (self userInterfaceTheme revertedOperationAttributes ifNil: [{TextEmphasis struckOut}])]]! - ifTrue: [Text string: '( ', each summary, ' )' attribute: TextEmphasis struckOut ]]! Item was changed: ----- Method: MCSaveVersionDialog>>list (in category 'accessing') ----- list ^ self items collect: [:each | (self reverts includes: each) ifFalse: [(self ignore includes: each) ifFalse: [each summary] + ifTrue: [Text + string: '( ', each summary, ' )' + attributes: (self userInterfaceTheme ignoredOperationAttributes ifNil: [{TextColor color: Color gray}])]] + ifTrue: [Text + string: '( ', each summary, ' )' + attribute: (self userInterfaceTheme revertedOperationAttributes ifNil: [ {TextEmphasis struckOut} ]) ]]! - ifTrue: [Text string: '( ', each summary, ' )' attribute: (TextColor color: Color gray)]] - ifTrue: [Text string: '( ', each summary, ' )' attribute: TextEmphasis struckOut ]]! From commits at source.squeak.org Tue Aug 16 12:50:51 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 12:50:53 2016 Subject: [squeak-dev] The Trunk: MultilingualTests-pre.21.mcz Message-ID: Patrick Rein uploaded a new version of MultilingualTests to project The Trunk: http://source.squeak.org/trunk/MultilingualTests-pre.21.mcz ==================== Summary ==================== Name: MultilingualTests-pre.21 Author: pre Time: 16 August 2016, 2:50:43.573572 pm UUID: 3166c2ba-e4eb-2e4c-8f5a-d8da3db54479 Ancestors: MultilingualTests-tpr.20 Adds caretWidth to the MultilingualFontTests similar to the way other FontTests were updated before =============== Diff against MultilingualTests-tpr.20 =============== Item was changed: ----- Method: FontTest>>testMultistringFallbackFont (in category 'testing') ----- testMultistringFallbackFont "self debug: #testMultistringFallbackFont" | text p style height width | [(TextStyle default fontArray at: JapaneseEnvironment leadingChar) ifNil: [^ self]] ifError: [:err :rcvr | ^ self]. text := ((#(20983874 20983876 20983878 ) collect: [:e | e asCharacter]) as: String) asText. p := NewParagraph new. style := TextStyle new leading: 0; newFontArray: {Preferences standardFlapFont}. p compose: text style: style from: 1 in: (0 @ 0 corner: 100 @ 100). "See CompositionScanner>>setActualFont: & CompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:" height := style defaultFont height + style leading. + width := p caretWidth + (text - width := text inject: 0 into: [:tally :next | tally + + (style defaultFont widthOf: next)]). - + (style defaultFont widthOf: next)]. p adjustRightX. self assert: p extent = (width @ height). "Display getCanvas paragraph: p bounds: (10 @ 10 extent: 100 @ 100) color: Color black"! Item was changed: ----- Method: FontTest>>testMultistringFont (in category 'testing') ----- testMultistringFont "self debug: #testMultistringFont" | text p style height width | [(TextStyle default fontArray at: JapaneseEnvironment leadingChar) ifNil: [^ self]] ifError: [:err :rcvr | ^ self]. text := ((#(20983874 20983876 20983878 ) collect: [:e | e asCharacter]) as: String) asText. p := NewParagraph new. style := TextStyle default. p compose: text style: style from: 1 in: (0 @ 0 corner: 100 @ 100). "See CompositionScanner>>setActualFont: & CompositionScanner>>composeFrom:inRectangle:firstLine:leftSide:rightSide:" height := style defaultFont height + style leading. + width := p caretWidth + (text - width := text inject: 0 into: [:tally :next | tally + + (style defaultFont widthOf: next)]). - + (style defaultFont widthOf: next)]. p adjustRightX. self assert: p extent = (width @ height). "Display getCanvas paragraph: p bounds: (10 @ 10 extent: 100 @ 100) color: Color black"! From commits at source.squeak.org Tue Aug 16 13:29:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 13:29:19 2016 Subject: [squeak-dev] The Trunk: System-mt.896.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.896.mcz ==================== Summary ==================== Name: System-mt.896 Author: mt Time: 16 August 2016, 2:23:16.914602 pm UUID: 910fb010-467e-634f-aab4-85a1100f6753 Ancestors: System-mt.895 Add default text attributes for ignored/reverted operations in MCOperationsBrowser (i.e. MC save dialog). =============== Diff against System-mt.895 =============== Item was changed: ----- Method: MonokaiTheme class>>addDarkToolColors: (in category 'instance creation') ----- addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self backgroundColor; set: #errorTextColor for: #TestRunner to: self backgroundColor; + set: #passTextColor for: #TestRunner to: self backgroundColor. + + theme + set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self grayLight}.! - set: #passTextColor for: #TestRunner to: self backgroundColor.! Item was changed: ----- Method: SolarizedTheme class>>addDarkToolColors: (in category 'instance creation') ----- addDarkToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self darkBackground; set: #errorTextColor for: #TestRunner to: self darkBackground; + set: #passTextColor for: #TestRunner to: self darkBackground. + + theme + set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self darkContentSecondary}.! - set: #passTextColor for: #TestRunner to: self darkBackground.! Item was changed: ----- Method: SolarizedTheme class>>addLightToolColors: (in category 'instance creation') ----- addLightToolColors: theme "Tool-specific colors." theme set: #failureColor for: #TestRunner to: self yellow; set: #errorColor for: #TestRunner to: self red; set: #passColor for: #TestRunner to: self green; set: #failureTextColor for: #TestRunner to: self lightBackground; set: #errorTextColor for: #TestRunner to: self lightBackground; + set: #passTextColor for: #TestRunner to: self lightBackground. + + theme + set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: self lightContentSecondary}.! - set: #passTextColor for: #TestRunner to: self lightBackground.! Item was changed: ----- Method: SqueakTheme class>>addToolColors: (in category 'instance creation') ----- addToolColors: theme "Tool-specific colors." + "SUnit's TestRunner." theme set: #failureColor for: #TestRunner to: Color yellow; set: #errorColor for: #TestRunner to: Color red; set: #passColor for: #TestRunner to: Color green; derive: #failureTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #errorTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; + derive: #passTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor. + + "Monticello Tools." + theme + set: #revertedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; + set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: Color gray}. + "set: #rejectedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; + set: #acceptedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis underlined}; + set: #conflictingOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis bold}."! - derive: #passTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor.! From commits at source.squeak.org Tue Aug 16 13:31:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 13:31:23 2016 Subject: [squeak-dev] The Trunk: System-mt.897.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.897.mcz ==================== Summary ==================== Name: System-mt.897 Author: mt Time: 16 August 2016, 3:30:53.367602 pm UUID: c9186462-378f-2c4b-88f7-5bb1c28617ad Ancestors: System-mt.896 Significat speed-up in UI theme switching. (Thanks Tim F.!) =============== Diff against System-mt.896 =============== Item was removed: - ----- Method: ClassDescription>>canApplyThemeToInstances (in category '*System-Support') ----- - canApplyThemeToInstances - "Override this to ignore your instances." - - ^ true! Item was removed: - ----- Method: TextDiffBuilder class>>canApplyThemeToInstances (in category 'preferences') ----- - canApplyThemeToInstances - ^ false! Item was added: + ----- Method: TextDiffBuilder>>canApplyUserInterfaceTheme (in category 'updating') ----- + canApplyUserInterfaceTheme + + ^ false! Item was changed: ----- Method: UserInterfaceTheme class>>clientClasses (in category 'private') ----- clientClasses + ^ IdentitySet new in: [:result | - ^ Set new in: [:result | self allThemePropertiesDo: [:cls :prop | result add: cls]. result]! Item was changed: ----- Method: UserInterfaceTheme class>>clientClassesToReapply (in category 'private') ----- clientClassesToReapply "All client classes plus their unique subclasses." + ^ IdentitySet new in: [:result | self clientClasses do: [:cc | cc withAllSubclassesDo: [:sc | - ^ Set new in: [:result | self clientClasses do: [:cc | cc withAllSubclassesDo: [:sc | result add: sc]]. result] ! Item was changed: ----- Method: UserInterfaceTheme>>apply (in category 'actions') ----- apply "Apply this theme to all affected objects. Let classes decide on how to iterate and call their instances." ignoreApply == true ifTrue: [^ self]. UserInterfaceTheme current: self. self class clientClassesToReapply in: [:cc | cc do: [:eachClass | eachClass applyUserInterfaceTheme]. + Cursor wait showWhile: [ + SystemNavigation default allObjectsDo: [:o | + ((cc includes: o class) + and: [o canApplyUserInterfaceTheme]) + ifTrue: [o applyUserInterfaceTheme]]]]. - (cc select: [:eachClass | eachClass canApplyThemeToInstances]) - do: [:eachClass | eachClass applyThemeToInstances] - displayingProgress: [:eachClass | 'Applying {1} to instances of {2}' format: {self name. eachClass name}] - every: 1000 ]. Project current restoreDisplay.! From commits at source.squeak.org Tue Aug 16 13:31:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 13:31:51 2016 Subject: [squeak-dev] The Trunk: ShoutCore-mt.57.mcz Message-ID: Marcel Taeumel uploaded a new version of ShoutCore to project The Trunk: http://source.squeak.org/trunk/ShoutCore-mt.57.mcz ==================== Summary ==================== Name: ShoutCore-mt.57 Author: mt Time: 16 August 2016, 3:31:44.058602 pm UUID: 45ae9a74-40e2-3c4b-80fd-046072e0febb Ancestors: ShoutCore-mt.56 Appendix to System-mt.897 =============== Diff against ShoutCore-mt.56 =============== Item was removed: - ----- Method: SHTextStylerST80 class>>canApplyThemeToInstances (in category 'preferences') ----- - canApplyThemeToInstances - - ^ false! Item was added: + ----- Method: SHTextStylerST80>>canApplyUserInterfaceTheme (in category 'updating') ----- + canApplyUserInterfaceTheme + + ^ false! From commits at source.squeak.org Tue Aug 16 13:32:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 13:32:39 2016 Subject: [squeak-dev] The Trunk: Collections-mt.711.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.711.mcz ==================== Summary ==================== Name: Collections-mt.711 Author: mt Time: 16 August 2016, 3:32:21.426602 pm UUID: 050b17d5-24f7-bd41-abcc-8c1b4839170a Ancestors: Collections-mt.710 Appendix to System-mt.897 =============== Diff against Collections-mt.710 =============== Item was removed: - ----- Method: TextAction class>>canApplyThemeToInstances (in category 'preferences') ----- - canApplyThemeToInstances - ^false! Item was added: + ----- Method: TextAction>>canApplyUserInterfaceTheme (in category 'updating') ----- + canApplyUserInterfaceTheme + + ^ false! From commits at source.squeak.org Tue Aug 16 14:01:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 14:01:46 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1285.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1285.mcz ==================== Summary ==================== Name: Morphic-mt.1285 Author: mt Time: 16 August 2016, 4:01:00.668602 pm UUID: 3ed59e01-fc7e-e64f-9d96-1d0011aee676 Ancestors: Morphic-mt.1284 Sorry for the MVC-hickup. Make pop-up menus in MVC pop-up at the right location again. =============== Diff against Morphic-mt.1284 =============== Item was changed: ----- Method: HandMorph>>becomeActiveDuring: (in category 'initialization') ----- becomeActiveDuring: aBlock "Make the receiver the ActiveHand during the evaluation of aBlock." | priorHand | priorHand := ActiveHand. ActiveHand := self. + ^ aBlock ensure: [ + "nil check to support project switching." + ActiveHand ifNotNil: [ActiveHand := priorHand]].! - ^ aBlock ensure: [ActiveHand := priorHand].! Item was changed: ----- Method: MorphicEvent>>becomeActiveDuring: (in category 'initialize') ----- becomeActiveDuring: aBlock "Make the receiver the ActiveEvent during the evaluation of aBlock." | priorEvent | priorEvent := ActiveEvent. ActiveEvent := self. + ^ aBlock ensure: [ + "nil check to support project switching." + ActiveEvent ifNotNil: [ActiveEvent := priorEvent]].! - ^ aBlock ensure: [ActiveEvent := priorEvent].! Item was changed: ----- Method: PasteUpMorph>>becomeActiveDuring: (in category 'initialization') ----- becomeActiveDuring: aBlock "Make the receiver the ActiveWorld during the evaluation of aBlock." | priorWorld | priorWorld := ActiveWorld. ActiveWorld := self. + ^ aBlock ensure: [ + "nil check to support project switching." + ActiveWorld ifNotNil: [ActiveWorld := priorWorld]].! - ^ aBlock ensure: [ActiveWorld := priorWorld].! From commits at source.squeak.org Tue Aug 16 14:02:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 14:02:29 2016 Subject: [squeak-dev] The Trunk: Tools-mt.719.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.719.mcz ==================== Summary ==================== Name: Tools-mt.719 Author: mt Time: 16 August 2016, 4:02:03.072602 pm UUID: 3fb7c2d7-31ca-6149-962a-7d89445dc2c6 Ancestors: Tools-mt.718 Flag a method for later refactoring. =============== Diff against Tools-mt.718 =============== Item was changed: ----- Method: PopUpMenu>>startUpWithCaption: (in category 'basic control sequence') ----- startUpWithCaption: captionOrNil "Display the menu, slightly offset from the cursor, so that a slight tweak is required to confirm any action." + self flag: #fix. "mt: Could we manage to open pop-up menus in Morphic without accessing ActiveHand?" ^ self startUpWithCaption: captionOrNil at: (ActiveHand ifNil:[Sensor]) cursorPoint! From commits at source.squeak.org Tue Aug 16 14:04:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 14:04:11 2016 Subject: [squeak-dev] The Trunk: System-mt.898.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.898.mcz ==================== Summary ==================== Name: System-mt.898 Author: mt Time: 16 August 2016, 4:03:47.250602 pm UUID: c029e0ed-0d5e-b349-8a84-ffdbdd4f3e7e Ancestors: System-mt.897 Clean-up I missed in previous commit. =============== Diff against System-mt.897 =============== Item was removed: - ----- Method: ClassDescription>>applyThemeToInstances (in category '*System-Support') ----- - applyThemeToInstances - "User interface themes. Manage how to update existing instances. Classes can override this to use a different update schema than iterating over all instances." - - self allInstancesDo: - [ : eachInstance | eachInstance canApplyUserInterfaceTheme ifTrue: [ eachInstance applyUserInterfaceTheme ] ]! From lists at fniephaus.com Tue Aug 16 14:19:09 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Tue Aug 16 14:19:23 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> Message-ID: -- On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel wrote: > On 8/14/16, Fabio Niephaus wrote: > > Here are the helper functions I came up with for the squeak.sh launcher > to > > ensure that the kernel is newer than 2.6.12 and that a squeak.conf > exists: > > https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe > > > > Best, > > Fabio > > I added the calls to the two functions to helpers.sh > > It works but needs sudo permission which is normally not given. So > some tweaking is needed. > > > THIS DOES NOT WORK > user8@user8-Latitude:~$ ./helpers.sh > ./helpers.sh: line 17: \: command not found > /etc/security/limits.d/squeak.conf is missing. Do you want to create > one? This operation requires sudo permissions. (y/N): y > You may be asked to enter your password... > ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: Permission > denied > Done! Please log out and log back in before you try again. > user8@user8-Latitude:~$ > > THIS IS FINE > sudo ./helpers.sh > [sudo] password for user8: > ./helpers.sh: line 17: \: command not found > /etc/security/limits.d/squeak.conf is missing. Do you want to create > one? This operation requires sudo permissions. (y/N): y > You may be asked to enter your password... > Done! Please log out and log back in before you try again. > user8@user8-Latitude:~$ > Thanks for the feedback, Hannes. I've already fixed and tested this on Linux (see [1]), but I forgot to update the gist which I just did. The newer version now uses `sudo tee -a`. Thanks again, Fabio [1] https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a > > --Hannes > > > -- > > > > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel > wrote: > > > >> For the case I reported > >> > >> uname -r > >> > >> gives > >> > >> 3.19.0-25-generic > >> > >> for the kernel version > >> > >> --Hannes > >> > >> On 8/14/16, Levente Uzonyi wrote: > >> > On Sun, 14 Aug 2016, tim Rowledge wrote: > >> > > >> >> > >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel > >> >>> wrote: > >> >>> > >> >>> Hello Levente > >> >>> > >> >>> The following on did the job. The 64bit all-in-one runs fine on > >> >>> Ubuntu > >> >>> 14.04.1. > >> >> > >> >> I guess an obvious question here is why on earth ubuntu is using such > >> >> an > >> >> old kernel. Raspbian (based on debian and so very conservative) got > >> >> past > >> >> that point at least 18 months ago. > >> > > >> > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o 4.4 > >> > if > >> > you want to. > >> > > >> > Levente > >> > > >> >> > >> >> > >> >> tim > >> >> -- > >> >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > >> >> Strange OpCodes: BBL: Branch on Burned out Light > >> >> > >> >> > >> >> > >> >> > >> > > >> > > >> > >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/90e0dc13/attachment.htm From commits at source.squeak.org Tue Aug 16 14:48:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 14:48:08 2016 Subject: [squeak-dev] The Trunk: CollectionsTests-pre.267.mcz Message-ID: Patrick Rein uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-pre.267.mcz ==================== Summary ==================== Name: CollectionsTests-pre.267 Author: pre Time: 16 August 2016, 4:47:57.075278 pm UUID: db136bfa-dcdb-b946-8f00-205132249875 Ancestors: CollectionsTests-topa.266 Improves attribute scanning tests by using specific fonts and adds tests documenting issues with bold fonts. =============== Diff against CollectionsTests-topa.266 =============== Item was added: + ----- Method: TextAttributesScanningTest>>doTestTextFontReferenceSerializationFor: (in category 'testing') ----- + doTestTextFontReferenceSerializationFor: font + + | att att3 fontReferenceString stream | + att := TextFontReference toFont: font. + stream := self streamWithAttribute: att. + fontReferenceString := self testScanAttribute: att fromStream: stream encodedWithCharacter: $F decodedWithBlock: [:strm | strm upToEnd]. + self assert: font familyName, '#', font height equals: fontReferenceString. + stream reset. + att3 := TextAttribute newFrom: stream. + self assert: att equals: att3.! Item was added: + ----- Method: TextAttributesScanningTest>>doTestTextFontReferenceTTCFor: (in category 'testing') ----- + doTestTextFontReferenceTTCFor: font + + | att att3 fontReferenceString stream | + att := TextFontReference toFont: font. + stream := self streamWithAttribute: att. + fontReferenceString := self testScanAttribute: att fromStream: stream encodedWithCharacter: $F decodedWithBlock: [:strm | strm upToEnd]. + self assert: font familyName, '#', font height equals: fontReferenceString. + stream reset. + att3 := TextAttribute newFrom: stream. + "test font height only, see comment above" + self assert: att font height equals: att3 font height. + "we really want an exact match, which probably requires different implentation of TextFontReference" + self assert: att equals: att3. + ! Item was changed: ----- Method: TextAttributesScanningTest>>expectedFailures (in category 'running') ----- expectedFailures "Tests for text attributes that are apparently unused, and that may be candidates for removal from the image" ^#( testTextAnchor testTextIndent testTextMessageLink testTextPlusJumpStart testTextPlusJumpEnd + + "Actually failing tests which document bugs to be fixed (pre)" + testTextFontReferenceForBoldFont + testTextFontReferenceTTCForBoldFont )! Item was changed: ----- Method: TextAttributesScanningTest>>testTextFontReference (in category 'testing') ----- testTextFontReference "Test TextFontReference with a StrikeFont" + | font | + font := TTCFont familyName: 'BitstreamVeraSans' pointSize: 9 emphasis: 0. + self doTestTextFontReferenceSerializationFor: font. + ! - | font att att3 stream fontReferenceString | - font := StrikeFont someInstance. - att := TextFontReference toFont: font. - stream := self streamWithAttribute: att. - fontReferenceString := self testScanAttribute: att fromStream: stream encodedWithCharacter: $F decodedWithBlock: [:strm | strm upToEnd]. - self assert: font familyName, '#', font height equals: fontReferenceString. - stream reset. - att3 := TextAttribute newFrom: stream. - self assert: att equals: att3.! Item was added: + ----- Method: TextAttributesScanningTest>>testTextFontReferenceForBoldFont (in category 'testing') ----- + testTextFontReferenceForBoldFont + "Test TextFontReference with a StrikeFont" + | font | + font := TTCFont familyName: 'BitstreamVeraSans' pointSize: 9 emphasis: 1. + self doTestTextFontReferenceSerializationFor: font. + ! Item was changed: ----- Method: TextAttributesScanningTest>>testTextFontReferenceTTC (in category 'testing') ----- testTextFontReferenceTTC "n.b. A TextFontReference specifies font height only, which is not sufficient to identify a unique TTCFont. Here we test only that the font height of the selected font matches the TextFontReference specification." "(self selector: #testTextFontReferenceTTC) debug" "Test TextFontReference with a TTCFont" + | font | + font := TTCFont familyName: 'BitstreamVeraSans' pointSize: 9 emphasis: 0. + self doTestTextFontReferenceTTCFor: font.! - | font att att3 stream fontReferenceString | - font := TTCFont someInstance textStyle fonts first. - att := TextFontReference toFont: font. - stream := self streamWithAttribute: att. - fontReferenceString := self testScanAttribute: att fromStream: stream encodedWithCharacter: $F decodedWithBlock: [:strm | strm upToEnd]. - self assert: font familyName, '#', font height equals: fontReferenceString. - stream reset. - att3 := TextAttribute newFrom: stream. - "test font height only, see comment above" - self assert: att font height equals: att3 font height. - "we really want an exact match, which probably requires different implentation of TextFontReference" - self assert: att equals: att3. - ! Item was added: + ----- Method: TextAttributesScanningTest>>testTextFontReferenceTTCForBoldFont (in category 'testing') ----- + testTextFontReferenceTTCForBoldFont + "n.b. A TextFontReference specifies font height only, which is not sufficient + to identify a unique TTCFont. Here we test only that the font height of the + selected font matches the TextFontReference specification." + + "(self selector: #testTextFontReferenceTTC) debug" + + "Test TextFontReference with a TTCFont" + | font | + font := TTCFont familyName: 'BitstreamVeraSans' pointSize: 9 emphasis: 1. + self doTestTextFontReferenceTTCFor: font.! From commits at source.squeak.org Tue Aug 16 15:17:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 15:17:04 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.96.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.96.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.96 Author: mt Time: 16 August 2016, 5:16:30.399602 pm UUID: 84c908a4-a71c-2441-b639-5ef76131338e Ancestors: HelpSystem-Core-mt.95 Fix package api help topics so that they never create and register PackageInfo instances by accident. Our PackageDependencyTest notices everything! *__* =============== Diff against HelpSystem-Core-mt.95 =============== Item was changed: ----- Method: PackageAPIHelpTopic>>subtopics (in category 'accessing') ----- subtopics + "Watch out for not registering PackageInfo by accident. Still, you can use any system category prefix and PackageInfo will help you find the corresponding classes." + + ^ ((PackageInfo new packageName: self packageName) classes - - ^ ((PackageInfo named: self packageName) classes sorted: [:cl1 :cl2 | cl1 name < cl2 name]) collect: [:class | ClassAPIHelpTopic new theClass: class; withSubclasses: false; withMethods: true]! From commits at source.squeak.org Tue Aug 16 15:32:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 15:32:17 2016 Subject: [squeak-dev] The Trunk: Kernel-mt.1035.mcz Message-ID: Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.1035.mcz ==================== Summary ==================== Name: Kernel-mt.1035 Author: mt Time: 16 August 2016, 5:31:21.408602 pm UUID: 794b1430-0a2b-d84d-9a30-f5d4e406c433 Ancestors: Kernel-mt.1034 Fixes additional dependency by moving some window color-related methods to System extension. =============== Diff against Kernel-mt.1034 =============== Item was removed: - ----- Method: Model>>defaultBackgroundColor (in category 'morphic ui') ----- - defaultBackgroundColor - - self flag: #remove. "Use #windowColorToUse" - ^ self windowColorToUse! Item was removed: - ----- Method: Model>>defaultWindowColor (in category 'morphic ui') ----- - defaultWindowColor - - ^ self uniformWindowColor! Item was removed: - ----- Method: Model>>uniformWindowColor (in category 'morphic ui') ----- - uniformWindowColor - - ^ self userInterfaceTheme uniformWindowColor ifNil: [Color veryVeryLightGray]! Item was removed: - ----- Method: Model>>windowColorToUse (in category 'morphic ui') ----- - windowColorToUse - - ^ Color colorFrom: (self class useColorfulWindows - ifTrue: [self userInterfaceTheme customWindowColor ifNil: [self defaultWindowColor]] - ifFalse: [self uniformWindowColor])! Item was removed: - ----- Method: StringHolder>>defaultWindowColor (in category 'user interface') ----- - defaultWindowColor - ^ (Color r: 0.9 g: 0.9 b: 0.719)! From commits at source.squeak.org Tue Aug 16 15:33:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 15:33:19 2016 Subject: [squeak-dev] The Trunk: System-mt.899.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.899.mcz ==================== Summary ==================== Name: System-mt.899 Author: mt Time: 16 August 2016, 5:32:49.455602 pm UUID: b5a60ed5-772c-6c46-acf3-2715023ed220 Ancestors: System-mt.898 Fixes additional dependency by moving some window color-related methods to System extension. =============== Diff against System-mt.898 =============== Item was added: + ----- Method: Model>>defaultWindowColor (in category '*System-preferences') ----- + defaultWindowColor + + ^ self uniformWindowColor! Item was added: + ----- Method: Model>>uniformWindowColor (in category '*System-preferences') ----- + uniformWindowColor + + ^ self userInterfaceTheme uniformWindowColor ifNil: [Color veryVeryLightGray]! Item was added: + ----- Method: Model>>windowColorToUse (in category '*System-preferences') ----- + windowColorToUse + + ^ Color colorFrom: (self class useColorfulWindows + ifTrue: [self userInterfaceTheme customWindowColor ifNil: [self defaultWindowColor]] + ifFalse: [self uniformWindowColor])! Item was added: + ----- Method: StringHolder>>defaultWindowColor (in category '*System-preferences') ----- + defaultWindowColor + ^ (Color r: 0.9 g: 0.9 b: 0.719)! From commits at source.squeak.org Tue Aug 16 15:33:57 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 15:33:59 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.44.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.44.mcz ==================== Summary ==================== Name: 51Deprecated-mt.44 Author: mt Time: 16 August 2016, 5:33:53.736602 pm UUID: e0931323-dcaa-8743-8656-fc95b1e914a1 Ancestors: 51Deprecated-mt.43 Update #defaultBackgroundColor deprecation consistently with Object. =============== Diff against 51Deprecated-mt.43 =============== Item was added: + ----- Method: Model>>defaultBackgroundColor (in category '*51Deprecated') ----- + defaultBackgroundColor + + self deprecated: 'Use #windowColorToUse.'. + ^ self windowColorToUse! From eliot.miranda at gmail.com Tue Aug 16 15:49:44 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Aug 16 15:49:48 2016 Subject: [squeak-dev] Daily Commit Log In-Reply-To: <20160814215502.5861.qmail@box4.squeak.org> References: <20160814215502.5861.qmail@box4.squeak.org> Message-ID: Hi Marcel, On Sun, Aug 14, 2016 at 2:55 PM, wrote: [snip] > > http://lists.squeakfoundation.org/pipermail/packages/2016- > August/068596.html > > Name: HelpSystem-Core-mt.92 > Ancestors: HelpSystem-Core-mt.91 > > Small fix to normalize selectors (needed for release notes). > > Is there a method to convert any string to a valid selector symbol? > No, and there can't be. For example, no brackets "()[]{}" are legal in binary selectors. _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/19fd15cf/attachment.htm From commits at source.squeak.org Tue Aug 16 15:56:56 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 15:56:59 2016 Subject: [squeak-dev] The Trunk: System-mt.900.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.900.mcz ==================== Summary ==================== Name: System-mt.900 Author: mt Time: 16 August 2016, 5:56:28.803602 pm UUID: aadddf7a-c890-9f47-b4bb-a0241208f9a2 Ancestors: System-mt.899 Reduce (additional) dependencies between packages. Go via Project's UI manager for many ToolBuilder-related things. Add convenient API for it. Goal: Fix failing dependency tests. =============== Diff against System-mt.899 =============== Item was added: + ----- Method: Project class>>uiManager (in category 'constants') ----- + uiManager + + ^ self current uiManager! From commits at source.squeak.org Tue Aug 16 15:57:54 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 15:57:55 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-mt.107.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-mt.107.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-mt.107 Author: mt Time: 16 August 2016, 5:57:48.702602 pm UUID: de83822f-0e80-6944-ae60-e7223561a59d Ancestors: ToolBuilder-Kernel-mt.106 Reduce (additional) dependencies between packages. =============== Diff against ToolBuilder-Kernel-mt.106 =============== Item was changed: Object subclass: #ToolBuilder instanceVariableNames: 'parent' + classVariableNames: '' - classVariableNames: 'OpenToolsAttachedToMouseCursor' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !ToolBuilder commentStamp: '' prior: 0! I am a tool builder, that is an object which knows how to create concrete widgets from abstract specifications. Those specifications are used by tools which want to be able to function in diverse user interface paradigms, such as MVC, Morphic, Tweak, wxWidgets etc. The following five specs must be supported by all implementations: * PluggableButton * PluggableList * PluggableText * PluggablePanel * PluggableWindow The following specs are optional: * PluggableTree: If not supported, the tool builder must answer nil when asked for a pluggableTreeSpec. Substitution will require client support so clients must be aware that some tool builders may not support trees (MVC for example, or Seaside). See examples in FileListPlus or TestRunnerPlus. * PluggableMultiSelectionList: If multi-selection lists are not supported, tool builder will silently support regular single selection lists. * PluggableInputField: Intended as a HINT for the builder that this widget will be used as a single line input field. Unless explicitly supported it will be automatically substituted by PluggableText. * PluggableActionButton: Intended as a HINT for the builder that this widget will be used as push (action) button. Unless explicitly supported it will be automatically substituted by PluggableButton. * PluggableRadioButton: Intended as a HINT for the builder that this widget will be used as radio button. Unless explicitly supported it will be automatically substituted by PluggableButton. * PluggableCheckBox: Intended as a HINT for the builder that this widget will be used as check box. Unless explicitly supported it will be automatically substituted by PluggableButton. ! Item was removed: - ----- Method: ToolBuilder class>>openToolsAttachedToMouseCursor (in category 'preferences') ----- - openToolsAttachedToMouseCursor - - - ^ OpenToolsAttachedToMouseCursor ifNil: [false]! Item was removed: - ----- Method: ToolBuilder class>>openToolsAttachedToMouseCursor: (in category 'preferences') ----- - openToolsAttachedToMouseCursor: aBoolean - - OpenToolsAttachedToMouseCursor := aBoolean.! Item was changed: Object subclass: #UIManager instanceVariableNames: 'builderClass' + classVariableNames: 'OpenToolsAttachedToMouseCursor' - classVariableNames: '' poolDictionaries: '' category: 'ToolBuilder-Kernel'! !UIManager commentStamp: 'dtl 5/2/2010 16:06' prior: 0! UIManager is a dispatcher for various user interface requests, such as menu and dialog interactions. An instance of UIManager is associated with each Project to implement the appropriate functions for Morphic, MVC or other user interfaces.! Item was added: + ----- Method: UIManager class>>openToolsAttachedToMouseCursor (in category 'preferences') ----- + openToolsAttachedToMouseCursor + + + ^ OpenToolsAttachedToMouseCursor ifNil: [false]! Item was added: + ----- Method: UIManager class>>openToolsAttachedToMouseCursor: (in category 'preferences') ----- + openToolsAttachedToMouseCursor: aBoolean + + OpenToolsAttachedToMouseCursor := aBoolean.! Item was added: + ----- Method: UIManager>>openToolsAttachedToMouseCursor (in category 'accessing') ----- + openToolsAttachedToMouseCursor + self flag: #todo. "mt: Let each instances of ui manager have its own setting." + ^ self class openToolsAttachedToMouseCursor! Item was added: + ----- Method: UIManager>>openToolsAttachedToMouseCursor: (in category 'accessing') ----- + openToolsAttachedToMouseCursor: aBoolean + self flag: #todo. "mt: Let each instances of ui manager have its own setting." + self class openToolsAttachedToMouseCursor: aBoolean.! From commits at source.squeak.org Tue Aug 16 15:59:56 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 15:59:57 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1286.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1286.mcz ==================== Summary ==================== Name: Morphic-mt.1286 Author: mt Time: 16 August 2016, 5:59:18.265602 pm UUID: b29ce81c-8358-b44c-ab48-ddf9aca710ab Ancestors: Morphic-mt.1285 Reduce (additional) dependencies between packages. =============== Diff against Morphic-mt.1285 =============== Item was changed: ----- Method: SystemWindow>>justDroppedInto:event: (in category 'geometry') ----- justDroppedInto: aMorph event: anEvent isCollapsed ifTrue: [self position: ((self position max: 0@0) grid: 8@8). collapsedFrame := self bounds] ifFalse: [fullFrame := self bounds]. self beKeyWindow. self hasDropShadow: Preferences menuAppearance3d. "See #startDragFromLabel:." aMorph == self world ifTrue: [self assureLabelAreaVisible]. + (Project uiManager openToolsAttachedToMouseCursor and: (self hasProperty: #initialDrop)) - (ToolBuilder openToolsAttachedToMouseCursor and: (self hasProperty: #initialDrop)) ifTrue: [ self removeProperty: #initialDrop. (self submorphs detect: [:m | m isKindOf: BottomRightGripMorph] ifNone: []) ifNotNil: [:grip | grip referencePoint: anEvent position; setProperty: #targetHadDropShadow toValue: true "See MorphicToolBuilder >> #open:". self hasDropShadow: false. anEvent hand newMouseFocus: grip]]. ^super justDroppedInto: aMorph event: anEvent! From commits at source.squeak.org Tue Aug 16 16:00:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 16:00:25 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.75.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.75.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.75 Author: mt Time: 16 August 2016, 6:00:12.292602 pm UUID: a637d7c0-295e-624f-9a7e-b6136923af5d Ancestors: PreferenceBrowser-mt.74 Reduce (additional) dependencies between packages. =============== Diff against PreferenceBrowser-mt.74 =============== Item was changed: ----- Method: PreferenceBrowser>>defaultSelected (in category 'preferences search') ----- defaultSelected + (Project uiManager - (UIManager default confirm: 'Do you really want to restorethe default\preferences?\\If you want to keep the current state,\you have to save it first.' translated withCRs title: 'Restore Preferences') ifFalse: [^ self]. Preferences chooseInitialSettings! Item was changed: ----- Method: PreferenceBrowser>>loadFromDiskSelected (in category 'preferences search') ----- loadFromDiskSelected + (Project uiManager - (UIManager default confirm: 'Do you really want to restore your\personal preferences from disk?\\The file ''my.prefs'' will be loaded.' translated withCRs title: 'Restore Preferences from Disk') ifFalse: [^ self]. preferences restorePreferencesFromDisk! Item was changed: ----- Method: PreferenceBrowser>>loadSelected (in category 'preferences search') ----- loadSelected + (Project uiManager - (UIManager default confirm: 'Do you really want to restore\your personal preferences?' translated withCRs title: 'Restore Preferences') ifFalse: [^ self]. preferences restorePersonalPreferences.! Item was changed: ----- Method: PreferenceBrowser>>saveSelected (in category 'preferences search') ----- saveSelected + (Project uiManager - (UIManager default confirm: 'Do you really want to overwrite\your personal preferences?' translated withCRs title: 'Save Preferences') ifFalse: [^ self]. preferences savePersonalPreferences.! Item was changed: ----- Method: PreferenceBrowser>>saveToDiskSelected (in category 'preferences search') ----- saveToDiskSelected + (Project uiManager - (UIManager default confirm: 'Do you really want to overwrite your\personal preferences on disk?\\The file ''my.prefs'' will be updated.' translated withCRs title: 'Save Preferences to Disk') ifFalse: [^ self]. preferences storePreferencesToDisk! Item was changed: ----- Method: PreferenceWizardMorph>>initializePreviewWorld (in category 'initialization') ----- initializePreviewWorld | w1 w2 w3 | previewWorld := PasteUpMorph new hResizing: #spaceFill; vResizing: #spaceFill; viewBox: (0@0 corner: 500@500); layoutFrame: (LayoutFrame fractions: (0.3 @ 0 corner: 1.0 @ 1.0) offsets: (0@ titleMorph height corner: 0 @ buttonRowMorph height negated)); fillStyle: ActiveWorld fillStyle; borderWidth: 2; borderColor: Color white; cornerStyle: (self hasLowPerformance ifTrue: [#square] ifFalse: [#rounded]); yourself. + + w1 := (ToolSet browse: Morph selector: #drawOn:) dependents detect: [:ea | ea isSystemWindow]. - - w1 := ToolBuilder open: (Browser new setClass: Morph selector: #drawOn:). w2 := ToolSet browseMessageSet: (SystemNavigation default allCallsOn: #negated) name: 'Senders' translated autoSelect: 'negated'. w3 := (Workspace new contents: '3+4 "Select and hit [CMD]+[P]."') openLabel: 'Workspace'. {w1. w2. w3} do: [:ea | ea makeUnclosable. previewWorld addMorph: ea]. self updateWindowBounds.! Item was changed: ----- Method: PreferenceWizardMorph>>stateAttachToolsToMouse (in category 'buttons') ----- stateAttachToolsToMouse + ^ Project uiManager openToolsAttachedToMouseCursor! - ^ ToolBuilder openToolsAttachedToMouseCursor! Item was changed: ----- Method: PreferenceWizardMorph>>toggleAttachToolsToMouse (in category 'buttons') ----- toggleAttachToolsToMouse + Project uiManager openToolsAttachedToMouseCursor: Project uiManager openToolsAttachedToMouseCursor not. - ToolBuilder openToolsAttachedToMouseCursor: ToolBuilder openToolsAttachedToMouseCursor not. self changed: #stateAttachToolsToMouse.! From commits at source.squeak.org Tue Aug 16 16:01:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 16:01:14 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.186.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.186.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.186 Author: mt Time: 16 August 2016, 6:01:05.580602 pm UUID: f48e6eb7-0834-794d-b494-bdd58aa22d47 Ancestors: ToolBuilder-Morphic-mt.185 Reduce (additional) dependencies between packages. =============== Diff against ToolBuilder-Morphic-mt.185 =============== Item was changed: ----- Method: MorphicToolBuilder>>open: (in category 'opening') ----- open: anObject "Build and open the object. Answer the widget opened." | morph | anObject isMorph ifTrue:[morph := anObject] ifFalse:[morph := self build: anObject]. (morph isKindOf: MenuMorph) ifTrue:[morph popUpInWorld: World]. (morph isKindOf: DialogWindow) ifTrue: [^ morph moveToHand; getUserResponse]. (morph isKindOf: SystemWindow) ifFalse:[morph openInWorld] ifTrue:[ morph := morph openInWorldExtent: morph extent. + (Project uiManager openToolsAttachedToMouseCursor - (self class openToolsAttachedToMouseCursor and: [self currentEvent isMouse and: [self currentEvent isMouseUp]]) ifTrue: [ morph setProperty: #initialDrop toValue: true. morph hasDropShadow: false. self currentHand attachMorph: morph]]. ^morph! From eliot.miranda at gmail.com Tue Aug 16 16:01:24 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Aug 16 16:01:29 2016 Subject: [squeak-dev] The Trunk: Tests-pre.349.mcz In-Reply-To: References: Message-ID: On Mon, Aug 15, 2016 at 4:05 PM, Levente Uzonyi wrote: > On Mon, 15 Aug 2016, commits@source.squeak.org wrote: > > Patrick Rein uploaded a new version of Tests to project The Trunk: >> http://source.squeak.org/trunk/Tests-pre.349.mcz >> >> ==================== Summary ==================== >> >> Name: Tests-pre.349 >> Author: pre >> Time: 15 August 2016, 11:23:47.344656 pm >> UUID: ab567e83-59da-9049-af1a-aa3c78112c85 >> Ancestors: Tests-pre.348 >> >> Updates decompiler expected failures to the new state of the source code. >> >> =============== Diff against Tests-pre.348 =============== >> >> Item was changed: >> ----- Method: DecompilerTests>>decompilerFailures (in category >> 'utilities') ----- >> decompilerFailures >> "Here is the list of failures: either a syntax error, a hard >> error or some failure to decompile correctly. >> Collected via >> DecompilerTestFailuresCollector new computeFailures." >> >> "class name, selector, error class name or nil" >> + ^ #(#(#Behavior #toolIconSelector: #TestFailure) >> #(#BrowserCommentTextMorph #showPane #SyntaxErrorNotification) >> #(#ClassDescription #replaceSilently:to: #SyntaxErrorNotification) >> #(#CodeHolder #getSelectorAndSendQuery:to:with: >> #SyntaxErrorNotification) #(#Date #printOn: #TestFailure) >> #(#DecompilerTests #testDecompileUnreachableParameter #Error) >> #(#FontImporterTool #fontFromFamily: #SyntaxErrorNotification) #(#HttpUrl >> #checkAuthorization:retry: #TestFailure) #(#LargeNegativeIntegerTest >> #testReplaceFromToWithStartingAt #SyntaxErrorNotification) >> #(#LargePositiveIntegerTest #testReplaceFromToWithStartingAt >> #SyntaxErrorNotification) #(#MailComposition #breakLinesInMessage: >> #SyntaxErrorNotification) #(#MCConfigurationBrowser #post >> #SyntaxErrorNotification) #(#MVCToolBuilder #setLayout:in: >> #SyntaxErrorNotification) #(#ParagraphEditor #inOutdent:delta: >> #SyntaxErrorNotification) #(#PNGReadWriter #copyPixelsGray: >> #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNilIfNotNil >> #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNil >> #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNilIfNil >> #SyntaxErrorNotification) #(#RxsCharSet #enumerablePartPredicateIgnoringCase: >> #SyntaxErrorNotification) #(#ScaledDecimalTest #testConvertFromFraction >> #SyntaxErrorNotification) #(#SHMCClassDefinition #withAllSuperclassesDo: >> #SyntaxErrorNotification) #(#StandardScriptingSystem #holderWithAlphabet >> #SyntaxErrorNotification) #(#SyntaxMorph #mouseEnterDragging: >> #SyntaxErrorNotification) #(#SystemWindow #convertAlignment >> #SyntaxErrorNotification) #(#TextEditor #inOutdent:delta: >> #SyntaxErrorNotification) #(#TextURL #actOnClickFor: #TestFailure) >> #(#WeakSet #scanForLoadedSymbol: #TestFailure))! >> > > Please keep the indentation. +1. It's unreadable without :-( > > > Levente > > > - ^#( (Behavior toolIconSelector: TestFailure) >> - (BrowserCommentTextMorph showPane SyntaxErrorNotification) >> - (ClassDescription replaceSilently:to: >> SyntaxErrorNotification) >> - (CodeHolder getSelectorAndSendQuery:to:with: >> SyntaxErrorNotification) >> - (Date printOn: TestFailure) >> - (DecompilerTests testDecompileUnreachableParameter Error) >> - (FontImporterTool fontFromFamily: >> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >> - (HttpUrl checkAuthorization:retry: TestFailure) >> - (LargeNegativeIntegerTest testReplaceFromToWithStartingAt >> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >> - (LargePositiveIntegerTest testReplaceFromToWithStartingAt >> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >> - (MailComposition breakLinesInMessage: >> SyntaxErrorNotification) >> - (MCConfigurationBrowser post SyntaxErrorNotification) >> - (MVCToolBuilder setLayout:in: SyntaxErrorNotification) >> "same-name block-local temps in optimized blocks" >> - (ParagraphEditor inOutdent:delta: SyntaxErrorNotification) >> - (PNGReadWriter copyPixelsGray: SyntaxErrorNotification) >> - (ScaledDecimalTest testConvertFromFraction >> SyntaxErrorNotification) "local/non-local temps" >> - (SHMCClassDefinition withAllSuperclassesDo: >> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >> - (StandardScriptingSystem holderWithAlphabet >> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >> - (SystemWindow convertAlignment SyntaxErrorNotification) >> - (TextEditor inOutdent:delta: SyntaxErrorNotification) >> - (TextURL actOnClickFor: TestFailure) >> - (TTContourConstruction segmentsDo: >> SyntaxErrorNotification) "Worth fixing; these two are mistaken conversion >> from a whileTrue: to a to:do: but the index is used outside the whileTrue:" >> - (TTFontReader processHorizontalMetricsTable:length: >> SyntaxErrorNotification))! >> >> >> > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/aef75ca1/attachment.htm From commits at source.squeak.org Tue Aug 16 16:01:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 16:01:49 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.158.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.158.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.158 Author: mt Time: 16 August 2016, 6:01:42.155602 pm UUID: 498883a0-1e21-ea4b-83ba-56dc398a8ded Ancestors: ReleaseBuilder-mt.157 Reduce (additional) dependencies between packages. =============== Diff against ReleaseBuilder-mt.157 =============== Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. + Project uiManager openToolsAttachedToMouseCursor: false. - ToolBuilder openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; encloseSelection: false ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. Model windowActiveOnFirstClick: false. "Not good for little screen real estate." Model useColorfulWindows: false. Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false; passiveColor: (Color gray: 0.85); activeColor: (Color r: 1 g: 0.599 b: 0.0). ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; enable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 8. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From eliot.miranda at gmail.com Tue Aug 16 16:02:29 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Aug 16 16:02:33 2016 Subject: [squeak-dev] The Trunk: KernelTests-pre.310.mcz In-Reply-To: References: Message-ID: So shouldn't the code test for being on the Windows platform and not answer it as an expected failure on linux and Mac OS X? On Mon, Aug 15, 2016 at 4:23 PM, Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com> wrote: > It only fails for windows VM if using msvcrt.dll > because Microsoft math library is bugged... > > 2016-08-16 1:07 GMT+02:00 Levente Uzonyi : > >> On Mon, 15 Aug 2016, commits@source.squeak.org wrote: >> >> Patrick Rein uploaded a new version of KernelTests to project The Trunk: >>> http://source.squeak.org/trunk/KernelTests-pre.310.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: KernelTests-pre.310 >>> Author: pre >>> Time: 15 August 2016, 11:25:58.171656 pm >>> UUID: 38fde71e-1444-6b4f-9d3b-24221c24a5d2 >>> Ancestors: KernelTests-ul.309 >>> >>> Recorded the wrong float underflow as an expected failure as it is going >>> to be the expected behavior (somewhat) in the upcoming release >>> >> >> I've never seen that test failing. Is it a windows specific failure? >> >> Levente >> >> >> >>> =============== Diff against KernelTests-ul.309 =============== >>> >>> Item was added: >>> + ----- Method: FloatTest>>expectedFailures (in category >>> 'characterization') ----- >>> + expectedFailures >>> + >>> + ^ #(testTimesTwoPowerGradualUnderflow) ! >>> >>> >>> >>> >> > > > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/0ab5d1f1/attachment.htm From commits at source.squeak.org Tue Aug 16 16:08:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 16:08:24 2016 Subject: [squeak-dev] The Trunk: System-mt.901.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.901.mcz ==================== Summary ==================== Name: System-mt.901 Author: mt Time: 16 August 2016, 6:07:56.634602 pm UUID: c2315def-8477-364e-a56f-68e5d0bbec94 Ancestors: System-mt.900 Removes new dependency System -> Balloon. =============== Diff against System-mt.900 =============== Item was changed: ----- Method: MonokaiTheme class>>createDark (in category 'instance creation') ----- createDark "self createDark apply." | themeName | themeName := 'Monokai (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self yellow; set: #keyboardFocusWidth for: #Morph to: 1. + theme set: #background for: #MorphicProject to: self darkBackgroundForm. - theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme. theme]! Item was changed: ----- Method: SolarizedTheme class>>createDark (in category 'instance creation') ----- createDark "doIt: [self createDark apply.]" | themeName | themeName := 'Solarized (dark)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self darkContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. + theme set: #background for: #MorphicProject to: self lightBackgroundForm. - theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self lightBackgroundForm). self addDarkFonts: theme; addDarkWindowColors: theme; addDarkSyntaxHighlighting: theme; addDarkScrollables: theme; addDarkButtons: theme; addDarkDialogs: theme; addDarkMenusAndDockingBars: theme; addDarkToolColors: theme. theme]! Item was changed: ----- Method: SolarizedTheme class>>createLight (in category 'instance creation') ----- createLight "You have to create dark first. doIt: [self createDark. self createLight apply.]" | themeName | themeName := 'Solarized (light)'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Solarized (dark)') overwrite: true. theme name: themeName. "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: self lightContentSecondary; set: #keyboardFocusWidth for: #Morph to: 1. + theme set: #background for: #MorphicProject to: self darkBackgroundForm. - theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self darkBackgroundForm). self addLightFonts: theme; addLightWindowColors: theme; addLightSyntaxHighlighting: theme; addLightScrollables: theme; addLightButtons: theme; addLightDialogs: theme; addLightMenusAndDockingBars: theme; addLightToolColors: theme. theme]! Item was changed: ----- Method: SqueakTheme class>>create (in category 'instance creation') ----- create "This is the default theme for Squeak. self create apply. " ^ (self named: 'Squeak') in: [:theme | "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: (TranslucentColor r: 0.3 g: 0.5 b: 0.5 alpha: 0.5); set: #keyboardFocusWidth for: #Morph to: 3; set: #softShadowColor for: #Morph to: (Color black alpha: 0.01); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (Color black alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1@1. + theme set: #background for: #MorphicProject to: self linenblue. - theme set: #background for: #MorphicProject to: (BitmapFillStyle fromForm: self linenblue). self addFonts: theme; addWindowColors: theme; addSyntaxHighlighting: theme; addMenusAndDockingBars: theme; addDialogs: theme; addButtons: theme; addScrollables: theme; addToolColors: theme. theme]! From commits at source.squeak.org Tue Aug 16 16:17:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 16:17:40 2016 Subject: [squeak-dev] The Trunk: TrueType-mt.44.mcz Message-ID: Marcel Taeumel uploaded a new version of TrueType to project The Trunk: http://source.squeak.org/trunk/TrueType-mt.44.mcz ==================== Summary ==================== Name: TrueType-mt.44 Author: mt Time: 16 August 2016, 6:17:31.762602 pm UUID: b68152cf-22e5-bc4f-94f2-65c0c6769f62 Ancestors: TrueType-mt.43 Removes additional dependency TrueType -> Morphic. (Note that we will move the Canvas abstraction into Graphics in the future so that #getCanvas will also work without Morphic even though it does not at the moment as you can see in DisplayScreen >> #defaultCanvasClass). =============== Diff against TrueType-mt.43 =============== Item was changed: ----- Method: TTGlyph>>asFormWithScale:ascender:descender:fgColor:bgColor:depth:replaceColor:lineGlyph:lingGlyphWidth:emphasis: (in category 'converting') ----- asFormWithScale: scale ascender: ascender descender: descender fgColor: fgColor bgColor: bgColor depth: depth replaceColor: replaceColorFlag lineGlyph: lineGlyph lingGlyphWidth: lWidth emphasis: code | form canvas newScale | form := Form extent: (advanceWidth @ (ascender - descender) * scale) rounded depth: depth. form fillColor: bgColor. + canvas := form getCanvas asBalloonCanvas. - canvas := BalloonCanvas on: form. canvas aaLevel: 4. canvas transformBy: (MatrixTransform2x3 withScale: scale asPoint * (1 @ -1)). canvas transformBy: (MatrixTransform2x3 withOffset: 0 @ ascender negated). canvas drawGeneralBezierShape: self contours color: fgColor borderWidth: 0 borderColor: fgColor. ((code bitAnd: 4) ~= 0 or: [(code bitAnd: 16) ~= 0]) ifTrue: [ newScale := (form width + 1) asFloat / lineGlyph calculateWidth asFloat. canvas transformBy: (MatrixTransform2x3 withScale: (newScale / scale)@1.0). (code bitAnd: 4) ~= 0 ifTrue: [ canvas drawGeneralBezierShape: lineGlyph contours color: fgColor borderWidth: 0 borderColor: fgColor. ]. (code bitAnd: 16) ~= 0 ifTrue: [ canvas transformBy: (MatrixTransform2x3 withOffset: 0@(ascender // 2)). canvas drawGeneralBezierShape: lineGlyph contours color: fgColor borderWidth: 0 borderColor: fgColor. ]. ]. replaceColorFlag ifTrue: [ form replaceColor: bgColor withColor: Color transparent. ]. ^ form! From Marcel.Taeumel at hpi.de Tue Aug 16 16:43:24 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 16 16:44:06 2016 Subject: [squeak-dev] Re: The Trunk: KernelTests-pre.310.mcz In-Reply-To: References: Message-ID: <1471365804405-4911371.post@n4.nabble.com> Eliot Miranda-2 wrote > So shouldn't the code test for being on the Windows platform and not > answer > it as an expected failure on linux and Mac OS X? > > On Mon, Aug 15, 2016 at 4:23 PM, Nicolas Cellier < > nicolas.cellier.aka.nice@ >> wrote: > >> It only fails for windows VM if using msvcrt.dll >> because Microsoft math library is bugged... >> >> 2016-08-16 1:07 GMT+02:00 Levente Uzonyi < > leves@.elte > >: >> >>> On Mon, 15 Aug 2016, > commits@.squeak > wrote: >>> >>> Patrick Rein uploaded a new version of KernelTests to project The Trunk: >>>> http://source.squeak.org/trunk/KernelTests-pre.310.mcz >>>> >>>> ==================== Summary ==================== >>>> >>>> Name: KernelTests-pre.310 >>>> Author: pre >>>> Time: 15 August 2016, 11:25:58.171656 pm >>>> UUID: 38fde71e-1444-6b4f-9d3b-24221c24a5d2 >>>> Ancestors: KernelTests-ul.309 >>>> >>>> Recorded the wrong float underflow as an expected failure as it is >>>> going >>>> to be the expected behavior (somewhat) in the upcoming release >>>> >>> >>> I've never seen that test failing. Is it a windows specific failure? >>> >>> Levente >>> >>> >>> >>>> =============== Diff against KernelTests-ul.309 =============== >>>> >>>> Item was added: >>>> + ----- Method: FloatTest>>expectedFailures (in category >>>> 'characterization') ----- >>>> + expectedFailures >>>> + >>>> + ^ #(testTimesTwoPowerGradualUnderflow) ! >>>> >>>> >>>> >>>> >>> >> >> >> >> > > > -- > _,,,^..^,,,_ > best, Eliot Hi Eliot, yes, I already did that. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-KernelTests-pre-310-mcz-tp4911102p4911371.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Aug 16 16:45:29 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 16 16:46:08 2016 Subject: [squeak-dev] Re: Daily Commit Log In-Reply-To: References: <20160814215502.5861.qmail@box4.squeak.org> Message-ID: <1471365929717-4911372.post@n4.nabble.com> Eliot Miranda-2 wrote > Hi Marcel, > > On Sun, Aug 14, 2016 at 2:55 PM, < > commits@.squeak > > wrote: > [snip] > >> >> http://lists.squeakfoundation.org/pipermail/packages/2016- >> August/068596.html >> >> Name: HelpSystem-Core-mt.92 >> Ancestors: HelpSystem-Core-mt.91 >> >> Small fix to normalize selectors (needed for release notes). >> >> Is there a method to convert any string to a valid selector symbol? >> > > No, and there can't be. For example, no brackets "()[]{}" are legal in > binary selectors. > > _,,,^..^,,,_ > best, Eliot Hi Eliot, I meant something like this: "H/el\lo () ## .Wo..rld" -> #helloWorld Best, Marcel -- View this message in context: http://forum.world.st/Daily-Commit-Log-tp4911026p4911372.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From eliot.miranda at gmail.com Tue Aug 16 17:03:30 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Tue Aug 16 17:03:34 2016 Subject: [squeak-dev] Re: Daily Commit Log In-Reply-To: <1471365929717-4911372.post@n4.nabble.com> References: <20160814215502.5861.qmail@box4.squeak.org> <1471365929717-4911372.post@n4.nabble.com> Message-ID: On Tue, Aug 16, 2016 at 9:45 AM, marcel.taeumel wrote: > Eliot Miranda-2 wrote > > Hi Marcel, > > > > On Sun, Aug 14, 2016 at 2:55 PM, < > > > commits@.squeak > > > > wrote: > > [snip] > > > >> > >> http://lists.squeakfoundation.org/pipermail/packages/2016- > >> August/068596.html > >> > >> Name: HelpSystem-Core-mt.92 > >> Ancestors: HelpSystem-Core-mt.91 > >> > >> Small fix to normalize selectors (needed for release notes). > >> > >> Is there a method to convert any string to a valid selector symbol? > >> > > > > No, and there can't be. For example, no brackets "()[]{}" are legal in > > binary selectors. > > > > _,,,^..^,,,_ > > best, Eliot > > Hi Eliot, > > I meant something like this: > > "H/el\lo () ## .Wo..rld" -> #helloWorld > It's a bit arbitrary isn't it? Better to mint your own one liner: hackSymbol ^(self select: #isLetter) asSymbol ;-) > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Daily- > Commit-Log-tp4911026p4911372.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/0f104dc4/attachment.htm From nicolaihess at gmail.com Tue Aug 16 17:34:17 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Tue Aug 16 17:34:20 2016 Subject: [squeak-dev] Re: Daily Commit Log In-Reply-To: References: <20160814215502.5861.qmail@box4.squeak.org> <1471365929717-4911372.post@n4.nabble.com> Message-ID: 2016-08-16 19:03 GMT+02:00 Eliot Miranda : > > > On Tue, Aug 16, 2016 at 9:45 AM, marcel.taeumel > wrote: > >> Eliot Miranda-2 wrote >> > Hi Marcel, >> > >> > On Sun, Aug 14, 2016 at 2:55 PM, < >> >> > commits@.squeak >> >> > > wrote: >> > [snip] >> > >> >> >> >> http://lists.squeakfoundation.org/pipermail/packages/2016- >> >> August/068596.html >> >> >> >> Name: HelpSystem-Core-mt.92 >> >> Ancestors: HelpSystem-Core-mt.91 >> >> >> >> Small fix to normalize selectors (needed for release notes). >> >> >> >> Is there a method to convert any string to a valid selector symbol? >> >> >> > >> > No, and there can't be. For example, no brackets "()[]{}" are legal in >> > binary selectors. >> > >> > _,,,^..^,,,_ >> > best, Eliot >> >> Hi Eliot, >> >> I meant something like this: >> >> "H/el\lo () ## .Wo..rld" -> #helloWorld >> > > It's a bit arbitrary isn't it? Better to mint your own one liner: > > hackSymbol > ^(self select: #isLetter) asSymbol > > ;-) > String>>#asLegalSelector > > >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Daily-Co >> mmit-Log-tp4911026p4911372.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > > > -- > _,,,^..^,,,_ > best, Eliot > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/1a50d528/attachment.htm From leves at caesar.elte.hu Tue Aug 16 19:19:05 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Aug 16 19:19:10 2016 Subject: [squeak-dev] Re: Daily Commit Log In-Reply-To: <1471365929717-4911372.post@n4.nabble.com> References: <20160814215502.5861.qmail@box4.squeak.org> <1471365929717-4911372.post@n4.nabble.com> Message-ID: String >> #asLegalSelector does what you're looking for, though it doesn't return a symbol. Levente On Tue, 16 Aug 2016, marcel.taeumel wrote: > Eliot Miranda-2 wrote >> Hi Marcel, >> >> On Sun, Aug 14, 2016 at 2:55 PM, < > >> commits@.squeak > >> > wrote: >> [snip] >> >>> >>> http://lists.squeakfoundation.org/pipermail/packages/2016- >>> August/068596.html >>> >>> Name: HelpSystem-Core-mt.92 >>> Ancestors: HelpSystem-Core-mt.91 >>> >>> Small fix to normalize selectors (needed for release notes). >>> >>> Is there a method to convert any string to a valid selector symbol? >>> >> >> No, and there can't be. For example, no brackets "()[]{}" are legal in >> binary selectors. >> >> _,,,^..^,,,_ >> best, Eliot > > Hi Eliot, > > I meant something like this: > > "H/el\lo () ## .Wo..rld" -> #helloWorld > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Daily-Commit-Log-tp4911026p4911372.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From commits at source.squeak.org Tue Aug 16 20:32:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 20:32:17 2016 Subject: [squeak-dev] The Trunk: SqueakSSL-Tests-pre.21.mcz Message-ID: Patrick Rein uploaded a new version of SqueakSSL-Tests to project The Trunk: http://source.squeak.org/trunk/SqueakSSL-Tests-pre.21.mcz ==================== Summary ==================== Name: SqueakSSL-Tests-pre.21 Author: pre Time: 16 August 2016, 10:32:07.633215 pm UUID: 9db75c50-3149-0740-bb7e-7bbc76c2512e Ancestors: SqueakSSL-Tests-pre.20 Adds timeouts to SSLTests for running the tests with slow internet connections. =============== Diff against SqueakSSL-Tests-pre.20 =============== Item was changed: ----- Method: SqueakSSLTest>>testFaceBookAPI (in category 'tests') ----- testFaceBookAPI "Facebook sends incomplete data during SSL handshake. Useful for testing an edge condition in SqueakSSL." + self + timeout: 60; + ensureInternetConnectionTo: 'http://www.facebook.com'. - self ensureInternetConnectionTo: 'http://www.facebook.com'. Smalltalk at: #WebClient ifPresent:[:webClient| self shouldnt:[ [webClient httpGet: 'https://graph.facebook.com/oauth/access_token'] "Allow certificate errors on the Mac since cert validation isn't implemented yet." on: SqueakSSLCertificateError do:[:ex| SqueakSSL platformName = 'Mac OS' ifTrue:[ex resume] ifFalse:[ex pass]]. ] raise: Error. ].. ! Item was changed: ----- Method: SqueakSSLTest>>testGooglePopStream (in category 'tests') ----- testGooglePopStream "This tests the dreaded data-in-last-handshake problem that some people have been seeing. Google mail (at times) sends the first data chunk together with the last handshake and the Windows SSL code did not handle that correctly" "self run: #testGooglePopStream" | hostName address socket response stream | + self timeout: 60. hostName := 'pop.gmail.com'. address := NetNameResolver addressForName: hostName. socket := Socket newTCP. socket connectTo: address port: 995. socket waitForConnectionFor: 10. stream := self secureSocketStream on: socket. [ stream sslConnect. response := stream upToAll: String crlf. self assert: response notEmpty. ] ensure:[stream destroy]. ! From commits at source.squeak.org Tue Aug 16 20:35:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 20:35:10 2016 Subject: [squeak-dev] The Trunk: Tests-pre.351.mcz Message-ID: Patrick Rein uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-pre.351.mcz ==================== Summary ==================== Name: Tests-pre.351 Author: pre Time: 16 August 2016, 10:34:52.713215 pm UUID: aef8dba7-9f81-7446-939f-c0e351ba4f05 Ancestors: Tests-pre.350 Sets the timeout for MCMczInstallerTests to 1 minute to allow for the loading of the mcz files to finish =============== Diff against Tests-pre.350 =============== Item was added: + ----- Method: MCMczInstallerTest>>defaultTimeout (in category 'as yet unclassified') ----- + defaultTimeout + + ^ 60! From commits at source.squeak.org Tue Aug 16 20:43:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 20:43:40 2016 Subject: [squeak-dev] The Trunk: Tests-pre.352.mcz Message-ID: Patrick Rein uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-pre.352.mcz ==================== Summary ==================== Name: Tests-pre.352 Author: pre Time: 16 August 2016, 10:43:24.386215 pm UUID: b11b0547-910b-7844-af7f-8fe54faf5abe Ancestors: Tests-pre.351 Indents the expected failures list of the decompiler tests properly and adds two SyntaxErrorNotifactions not covered by the tool. (Mea culpa. I should not commit when I am tired...) =============== Diff against Tests-pre.351 =============== Item was changed: ----- Method: DecompilerTests>>decompilerFailures (in category 'utilities') ----- decompilerFailures "Here is the list of failures: either a syntax error, a hard error or some failure to decompile correctly. Collected via DecompilerTestFailuresCollector new computeFailures." "class name, selector, error class name or nil" + ^ #( + #(#Behavior #toolIconSelector: #TestFailure) + #(#BrowserCommentTextMorph #showPane #SyntaxErrorNotification) + #(#ClassDescription #replaceSilently:to: #SyntaxErrorNotification) + #(#CodeHolder #getSelectorAndSendQuery:to:with: #SyntaxErrorNotification) + #(#Date #printOn: #TestFailure) + #(#DecompilerTests #testDecompileUnreachableParameter #Error) + #(#FontImporterTool #fontFromFamily: #SyntaxErrorNotification) + #(#HttpUrl #checkAuthorization:retry: #TestFailure) + #(#LargeNegativeIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) + #(#LargePositiveIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) + #(#MailComposition #breakLinesInMessage: #SyntaxErrorNotification) + #(#MCConfigurationBrowser #post #SyntaxErrorNotification) + #(#MVCToolBuilder #setLayout:in: #SyntaxErrorNotification) + #(#ParagraphEditor #inOutdent:delta: #SyntaxErrorNotification) + #(#PNGReadWriter #copyPixelsGray: #SyntaxErrorNotification) + #(#ProtoObjectTest #testIfNilIfNotNil #SyntaxErrorNotification) + #(#ProtoObjectTest #testIfNotNil #SyntaxErrorNotification) + #(#ProtoObjectTest #testIfNotNilIfNil #SyntaxErrorNotification) + #(#RxsCharSet #enumerablePartPredicateIgnoringCase: #SyntaxErrorNotification) + #(#ScaledDecimalTest #testConvertFromFraction #SyntaxErrorNotification) + #(#SHMCClassDefinition #withAllSuperclassesDo: #SyntaxErrorNotification) + #(#StandardScriptingSystem #holderWithAlphabet #SyntaxErrorNotification) + #(#SyntaxMorph #mouseEnterDragging: #SyntaxErrorNotification) + #(#SystemWindow #convertAlignment #SyntaxErrorNotification) + #(#TextEditor #inOutdent:delta: #SyntaxErrorNotification) + #(#TextURL #actOnClickFor: #TestFailure) + #(#TTContourConstruction #segmentsDo: #SyntaxErrorNotification) + #(#TTFontReader #processHorizontalMetricsTable:length: #SyntaxErrorNotification) + #(#WeakSet #scanForLoadedSymbol: #TestFailure))! - ^ #(#(#Behavior #toolIconSelector: #TestFailure) #(#BrowserCommentTextMorph #showPane #SyntaxErrorNotification) #(#ClassDescription #replaceSilently:to: #SyntaxErrorNotification) #(#CodeHolder #getSelectorAndSendQuery:to:with: #SyntaxErrorNotification) #(#Date #printOn: #TestFailure) #(#DecompilerTests #testDecompileUnreachableParameter #Error) #(#FontImporterTool #fontFromFamily: #SyntaxErrorNotification) #(#HttpUrl #checkAuthorization:retry: #TestFailure) #(#LargeNegativeIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) #(#LargePositiveIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) #(#MailComposition #breakLinesInMessage: #SyntaxErrorNotification) #(#MCConfigurationBrowser #post #SyntaxErrorNotification) #(#MVCToolBuilder #setLayout:in: #SyntaxErrorNotification) #(#ParagraphEditor #inOutdent:delta: #SyntaxErrorNotification) #(#PNGReadWriter #copyPixelsGray: #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNilIfNotNil #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNil #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNilIfNil #SyntaxErrorNotification) #(#RxsCharSet #enumerablePartPredicateIgnoringCase: #SyntaxErrorNotification) #(#ScaledDecimalTest #testConvertFromFraction #SyntaxErrorNotification) #(#SHMCClassDefinition #withAllSuperclassesDo: #SyntaxErrorNotification) #(#StandardScriptingSystem #holderWithAlphabet #SyntaxErrorNotification) #(#SyntaxMorph #mouseEnterDragging: #SyntaxErrorNotification) #(#SystemWindow #convertAlignment #SyntaxErrorNotification) #(#TextEditor #inOutdent:delta: #SyntaxErrorNotification) #(#TextURL #actOnClickFor: #TestFailure) #(#WeakSet #scanForLoadedSymbol: #TestFailure))! From nicolas.cellier.aka.nice at gmail.com Tue Aug 16 21:12:19 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue Aug 16 21:12:23 2016 Subject: [squeak-dev] The Trunk: Tests-pre.349.mcz In-Reply-To: References: Message-ID: Fortunately, the server doesn't diffsWithPrettyPrint ;) That's definitely one Preferences to be set to false by default IMO. 2016-08-16 18:01 GMT+02:00 Eliot Miranda : > > > On Mon, Aug 15, 2016 at 4:05 PM, Levente Uzonyi > wrote: > >> On Mon, 15 Aug 2016, commits@source.squeak.org wrote: >> >> Patrick Rein uploaded a new version of Tests to project The Trunk: >>> http://source.squeak.org/trunk/Tests-pre.349.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Tests-pre.349 >>> Author: pre >>> Time: 15 August 2016, 11:23:47.344656 pm >>> UUID: ab567e83-59da-9049-af1a-aa3c78112c85 >>> Ancestors: Tests-pre.348 >>> >>> Updates decompiler expected failures to the new state of the source code. >>> >>> =============== Diff against Tests-pre.348 =============== >>> >>> Item was changed: >>> ----- Method: DecompilerTests>>decompilerFailures (in category >>> 'utilities') ----- >>> decompilerFailures >>> "Here is the list of failures: either a syntax error, a hard >>> error or some failure to decompile correctly. >>> Collected via >>> DecompilerTestFailuresCollector new computeFailures." >>> >>> "class name, selector, error class name or nil" >>> + ^ #(#(#Behavior #toolIconSelector: #TestFailure) >>> #(#BrowserCommentTextMorph #showPane #SyntaxErrorNotification) >>> #(#ClassDescription #replaceSilently:to: #SyntaxErrorNotification) >>> #(#CodeHolder #getSelectorAndSendQuery:to:with: >>> #SyntaxErrorNotification) #(#Date #printOn: #TestFailure) >>> #(#DecompilerTests #testDecompileUnreachableParameter #Error) >>> #(#FontImporterTool #fontFromFamily: #SyntaxErrorNotification) #(#HttpUrl >>> #checkAuthorization:retry: #TestFailure) #(#LargeNegativeIntegerTest >>> #testReplaceFromToWithStartingAt #SyntaxErrorNotification) >>> #(#LargePositiveIntegerTest #testReplaceFromToWithStartingAt >>> #SyntaxErrorNotification) #(#MailComposition #breakLinesInMessage: >>> #SyntaxErrorNotification) #(#MCConfigurationBrowser #post >>> #SyntaxErrorNotification) #(#MVCToolBuilder #setLayout:in: >>> #SyntaxErrorNotification) #(#ParagraphEditor #inOutdent:delta: >>> #SyntaxErrorNotification) #(#PNGReadWriter #copyPixelsGray: >>> #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNilIfNotNil >>> #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNil >>> #SyntaxErrorNotification) #(#ProtoObjectTest #testIfNotNilIfNil >>> #SyntaxErrorNotification) #(#RxsCharSet #enumerablePartPredicateIgnoringCase: >>> #SyntaxErrorNotification) #(#ScaledDecimalTest #testConvertFromFraction >>> #SyntaxErrorNotification) #(#SHMCClassDefinition #withAllSuperclassesDo: >>> #SyntaxErrorNotification) #(#StandardScriptingSystem #holderWithAlphabet >>> #SyntaxErrorNotification) #(#SyntaxMorph #mouseEnterDragging: >>> #SyntaxErrorNotification) #(#SystemWindow #convertAlignment >>> #SyntaxErrorNotification) #(#TextEditor #inOutdent:delta: >>> #SyntaxErrorNotification) #(#TextURL #actOnClickFor: #TestFailure) >>> #(#WeakSet #scanForLoadedSymbol: #TestFailure))! >>> >> >> Please keep the indentation. > > > +1. It's unreadable without :-( > > > >> >> >> Levente >> >> >> - ^#( (Behavior toolIconSelector: TestFailure) >>> - (BrowserCommentTextMorph showPane >>> SyntaxErrorNotification) >>> - (ClassDescription replaceSilently:to: >>> SyntaxErrorNotification) >>> - (CodeHolder getSelectorAndSendQuery:to:with: >>> SyntaxErrorNotification) >>> - (Date printOn: TestFailure) >>> - (DecompilerTests testDecompileUnreachableParameter >>> Error) >>> - (FontImporterTool fontFromFamily: >>> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >>> - (HttpUrl checkAuthorization:retry: TestFailure) >>> - (LargeNegativeIntegerTest testReplaceFromToWithStartingAt >>> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >>> - (LargePositiveIntegerTest testReplaceFromToWithStartingAt >>> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >>> - (MailComposition breakLinesInMessage: >>> SyntaxErrorNotification) >>> - (MCConfigurationBrowser post SyntaxErrorNotification) >>> - (MVCToolBuilder setLayout:in: SyntaxErrorNotification) >>> "same-name block-local temps in optimized blocks" >>> - (ParagraphEditor inOutdent:delta: >>> SyntaxErrorNotification) >>> - (PNGReadWriter copyPixelsGray: SyntaxErrorNotification) >>> - (ScaledDecimalTest testConvertFromFraction >>> SyntaxErrorNotification) "local/non-local temps" >>> - (SHMCClassDefinition withAllSuperclassesDo: >>> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >>> - (StandardScriptingSystem holderWithAlphabet >>> SyntaxErrorNotification) "same-name block-local temps in optimized blocks" >>> - (SystemWindow convertAlignment SyntaxErrorNotification) >>> - (TextEditor inOutdent:delta: SyntaxErrorNotification) >>> - (TextURL actOnClickFor: TestFailure) >>> - (TTContourConstruction segmentsDo: >>> SyntaxErrorNotification) "Worth fixing; these two are mistaken conversion >>> from a whileTrue: to a to:do: but the index is used outside the whileTrue:" >>> - (TTFontReader processHorizontalMetricsTable:length: >>> SyntaxErrorNotification))! >>> >>> >>> >> >> >> > > > -- > _,,,^..^,,,_ > best, Eliot > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/a30b35f7/attachment.htm From nicolas.cellier.aka.nice at gmail.com Tue Aug 16 21:16:15 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue Aug 16 21:16:18 2016 Subject: [squeak-dev] Re: The Trunk: KernelTests-pre.310.mcz In-Reply-To: <1471365804405-4911371.post@n4.nabble.com> References: <1471365804405-4911371.post@n4.nabble.com> Message-ID: BTW, VM produced by appveyor automaton doesn't suffer from the problem, at least since we refactored the makefile and removed explicit msvcrt library linking. So whether compiled with gcc or clang, the win32 failure will disappear as soon as we declare a newer vm as stable. 2016-08-16 18:43 GMT+02:00 marcel.taeumel : > Eliot Miranda-2 wrote > > So shouldn't the code test for being on the Windows platform and not > > answer > > it as an expected failure on linux and Mac OS X? > > > > On Mon, Aug 15, 2016 at 4:23 PM, Nicolas Cellier < > > > nicolas.cellier.aka.nice@ > > >> wrote: > > > >> It only fails for windows VM if using msvcrt.dll > >> because Microsoft math library is bugged... > >> > >> 2016-08-16 1:07 GMT+02:00 Levente Uzonyi < > > > leves@.elte > > > >: > >> > >>> On Mon, 15 Aug 2016, > > > commits@.squeak > > > wrote: > >>> > >>> Patrick Rein uploaded a new version of KernelTests to project The > Trunk: > >>>> http://source.squeak.org/trunk/KernelTests-pre.310.mcz > >>>> > >>>> ==================== Summary ==================== > >>>> > >>>> Name: KernelTests-pre.310 > >>>> Author: pre > >>>> Time: 15 August 2016, 11:25:58.171656 pm > >>>> UUID: 38fde71e-1444-6b4f-9d3b-24221c24a5d2 > >>>> Ancestors: KernelTests-ul.309 > >>>> > >>>> Recorded the wrong float underflow as an expected failure as it is > >>>> going > >>>> to be the expected behavior (somewhat) in the upcoming release > >>>> > >>> > >>> I've never seen that test failing. Is it a windows specific failure? > >>> > >>> Levente > >>> > >>> > >>> > >>>> =============== Diff against KernelTests-ul.309 =============== > >>>> > >>>> Item was added: > >>>> + ----- Method: FloatTest>>expectedFailures (in category > >>>> 'characterization') ----- > >>>> + expectedFailures > >>>> + > >>>> + ^ #(testTimesTwoPowerGradualUnderflow) ! > >>>> > >>>> > >>>> > >>>> > >>> > >> > >> > >> > >> > > > > > > -- > > _,,,^..^,,,_ > > best, Eliot > > Hi Eliot, > > yes, I already did that. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The- > Trunk-KernelTests-pre-310-mcz-tp4911102p4911371.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/a705259d/attachment.htm From lists at fniephaus.com Tue Aug 16 21:25:54 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Tue Aug 16 21:26:08 2016 Subject: [squeak-dev] Re: The Trunk: KernelTests-pre.310.mcz In-Reply-To: References: <1471365804405-4911371.post@n4.nabble.com> Message-ID: On Tue, Aug 16, 2016 at 11:16 PM Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com> wrote: > BTW, VM produced by appveyor automaton doesn't suffer from the problem, at > least since we refactored the makefile and removed explicit msvcrt library > linking. > So whether compiled with gcc or clang, the win32 failure will disappear as > soon as we declare a newer vm as stable. > Does this mean we can/should use a recent win32 built by AppVeyor for the upcoming Squeak release? > > 2016-08-16 18:43 GMT+02:00 marcel.taeumel : > >> Eliot Miranda-2 wrote >> > So shouldn't the code test for being on the Windows platform and not >> > answer >> > it as an expected failure on linux and Mac OS X? >> > >> > On Mon, Aug 15, 2016 at 4:23 PM, Nicolas Cellier < >> >> > nicolas.cellier.aka.nice@ >> >> >> wrote: >> > >> >> It only fails for windows VM if using msvcrt.dll >> >> because Microsoft math library is bugged... >> >> >> >> 2016-08-16 1:07 GMT+02:00 Levente Uzonyi < >> >> > leves@.elte >> >> > >: >> >> >> >>> On Mon, 15 Aug 2016, >> >> > commits@.squeak >> >> > wrote: >> >>> >> >>> Patrick Rein uploaded a new version of KernelTests to project The >> Trunk: >> >>>> http://source.squeak.org/trunk/KernelTests-pre.310.mcz >> >>>> >> >>>> ==================== Summary ==================== >> >>>> >> >>>> Name: KernelTests-pre.310 >> >>>> Author: pre >> >>>> Time: 15 August 2016, 11:25:58.171656 pm >> >>>> UUID: 38fde71e-1444-6b4f-9d3b-24221c24a5d2 >> >>>> Ancestors: KernelTests-ul.309 >> >>>> >> >>>> Recorded the wrong float underflow as an expected failure as it is >> >>>> going >> >>>> to be the expected behavior (somewhat) in the upcoming release >> >>>> >> >>> >> >>> I've never seen that test failing. Is it a windows specific failure? >> >>> >> >>> Levente >> >>> >> >>> >> >>> >> >>>> =============== Diff against KernelTests-ul.309 =============== >> >>>> >> >>>> Item was added: >> >>>> + ----- Method: FloatTest>>expectedFailures (in category >> >>>> 'characterization') ----- >> >>>> + expectedFailures >> >>>> + >> >>>> + ^ #(testTimesTwoPowerGradualUnderflow) ! >> >>>> >> >>>> >> >>>> >> >>>> >> >>> >> >> >> >> >> >> >> >> >> > >> > >> > -- >> > _,,,^..^,,,_ >> > best, Eliot >> >> Hi Eliot, >> >> yes, I already did that. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/The-Trunk-KernelTests-pre-310-mcz-tp4911102p4911371.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/7a7b1cec/attachment.htm From commits at source.squeak.org Tue Aug 16 21:27:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 21:27:33 2016 Subject: [squeak-dev] The Inbox: SMLoader-cmm.89.mcz Message-ID: Chris Muller uploaded a new version of SMLoader to project The Inbox: http://source.squeak.org/inbox/SMLoader-cmm.89.mcz ==================== Summary ==================== Name: SMLoader-cmm.89 Author: cmm Time: 16 August 2016, 4:27:27.421151 pm UUID: b29bad6b-f9ed-4209-9c85-b3c70d7ea805 Ancestors: SMLoader-mt.88 Make SMReleaseBrowser support a multi-selection of Squeak Version categories, not just one. The SMServer will still pick just one to be the "primary" Squeak version, which is a questionable behavior. =============== Diff against SMLoader-mt.88 =============== Item was changed: ----- Method: SMPackageRelease>>httpPostContent (in category '*smloader') ----- httpPostContent "Answer the url-encoded parameters for this object." | allCategories | ^ String streamContents: [ : stream | self isNewObject ifTrue: [ "Make the parent release the selected." self parentReleaseIndex > 0 ifTrue: [ stream nextPutAll: '1-1=' , self parentReleaseIndex , '&' ] ] ifFalse: [ "Make this release the selected." self releaseIndex > 0 ifTrue: [ stream nextPutAll: '1-1=' , self releaseIndex , '&' ] ]. "The following category fields must remain in alphabetical order. Add 1 to category indexes because web-server expects the first item to always be nil." stream nextPutAll: '1-3=' , self version asString encodeForHTTP ; nextPutAll: '&1-4=' , (self compatibilityIndex + 1) ; nextPutAll: '&1-5=' , (self licenseIndex + 1) ; nextPutAll: '&1-6=' , (self maturityIndex + 1) ; nextPutAll: '&1-7=' , (self squeakVersionIndex + 1) ; nextPutAll: '&1-8=' , self downloadUrl "already http encoded" ; nextPutAll: '&1-9=1&1-10=&1-11=' "No file selection, 'cool' name or summary". "Specify only the mandatory categories for 'additional categories', otherwise prior mandatory selections will be reflected in the objects categories, causing the highest-in-the-list to always win. Ugh.." allCategories := SMSqueakMap default sortedCategories. {allCategories indexOf: self compatibility. allCategories indexOf: self license. + allCategories indexOf: self maturity} do: - allCategories indexOf: self maturity. - allCategories indexOf: self squeakVersion} do: [ : each | stream nextPutAll: '&1-12=' , each asString ]. + self squeakVersions do: [ : each | stream nextPutAll: '&1-12=', (allCategories indexOf: each) asString ]. self isCommunitySupported ifTrue: [ stream nextPutAll: '&1-12=', (allCategories indexOf: self communitySupportedCategory) asString ]. stream nextPutAll: '&1-13=' , self note asString encodeForHTTP. self isNewObject ifTrue: [ stream nextPutAll: '&1-18=Save+as+new+release' ] ifFalse: [ stream nextPutAll: '&1-17=Save+changes' ]. self parentRelease ifNotNilDo: [ : pr | stream nextPutAll: '&1-19=' , pr releaseIndex ] ]! Item was changed: ----- Method: SMPackageRelease>>initializeMandatoryCategories (in category '*smloader') ----- initializeMandatoryCategories "Set default mandatory categories." self license: self map mit ; + squeakVersions: {self map currentSqueakVersion} ; - squeakVersion: self map currentSqueakVersion ; compatibility: self map onlyExtensions ; maturity: self map alpha! Item was removed: - ----- Method: SMPackageRelease>>squeakVersion (in category '*smloader') ----- - squeakVersion - ^ self categories - detect: - [ : each | each parent = self map squeakVersions ] - ifNone: [ ]! Item was removed: - ----- Method: SMPackageRelease>>squeakVersion: (in category '*smloader') ----- - squeakVersion: aSMCategory - | vers | - aSMCategory parent = self map squeakVersions ifFalse: [ self error: 'Not a squeakVersion category.' ]. - "Remove all squeakVersion-categories." - [ vers := self squeakVersion. - vers notNil ] whileTrue: [ self removeCategory: vers ]. - self addCategory: aSMCategory! Item was changed: ----- Method: SMPackageRelease>>squeakVersionIndex (in category '*smloader') ----- squeakVersionIndex + "Answer my last versions position in the list of my maps squeakVersions." + ^ self map squeakVersions subCategories indexOf: + (self squeakVersions + ifEmpty: [ ^ 0 ] + ifNotEmpty: [ : versions | versions last ])! - "Answer my position in the list of my maps squeakVersions." - ^ self map squeakVersions subCategories indexOf: self squeakVersion! Item was added: + ----- Method: SMPackageRelease>>squeakVersions (in category '*smloader') ----- + squeakVersions + ^ self categories + select: [ : each | each parent = self map squeakVersions ]! Item was added: + ----- Method: SMPackageRelease>>squeakVersions: (in category '*smloader') ----- + squeakVersions: aCollection + aCollection do: + [ : eachVersion | eachVersion parent = self map squeakVersions ifFalse: [ self error: 'Please specify only squeakVersion categories.' ] ]. + "Remove all squeakVersion-categories." + categories copy do: + [ : each | each parent = self map squeakVersions ifTrue: [ self removeCategory: each ] ]. + aCollection do: + [ : each | self addCategory: each ]! Item was changed: CodeHolder subclass: #SMReleaseBrowser + instanceVariableNames: 'release loadScript smClient squeakVersionsSelections' - instanceVariableNames: 'release loadScript smClient' classVariableNames: '' poolDictionaries: '' category: 'SMLoader'! !SMReleaseBrowser commentStamp: 'cmm 1/23/2011 17:44' prior: 0! A browser for specific SqueakMap packages. - Across the top: - version name text input (across the top) - parent release (uneditable text) - Four lists across the width: - license single-select. - versions multi-select. - compatibility single-select. - maturity single-select. X File to upload | elipsis. - Load-script paragraph | Release notes paragraph. - Buttons: - Save. - Cancel. ! Item was added: + ----- Method: SMReleaseBrowser>>allSqueakVersions (in category 'model access') ----- + allSqueakVersions + "Answer all the squeak-versions subcategories." + ^ SMSqueakMap default squeakVersions subCategories! Item was added: + ----- Method: SMReleaseBrowser>>ensureSqueakVersions (in category 'initialize-release') ----- + ensureSqueakVersions + | versions | + versions := self squeakVersions. + (squeakVersionsSelections isNil or: [ squeakVersionsSelections size ~= self allSqueakVersions size ]) ifTrue: + [ squeakVersionsSelections := self allSqueakVersions collect: + [ : each | versions includes: each ] ]! Item was changed: ----- Method: SMReleaseBrowser>>newSqueakVersionSpec: (in category 'toolbuilder') ----- newSqueakVersionSpec: aToolBuilder + ^ aToolBuilder pluggableMultiSelectionListSpec new + model: self ; + name: #squeakVersions ; + help: 'Select the image versions for this release.' ; + autoDeselect: false ; + list: #allSqueakVersions ; + getIndex: #selectedIndex ; + setIndex: #selectedIndex: ; + getSelectionList: #squeakVersionSelectionAt: ; + setSelectionList: #squeakVersionSelectionAt:put: ; + yourself! - ^ aToolBuilder pluggableListSpec new - model: self ; - name: #licenses ; - help: 'Select the image version for this release.' ; - autoDeselect: false ; - list: #squeakVersions ; - getSelected: #squeakVersion ; - setSelected: #squeakVersion: ; - yourself! Item was changed: ----- Method: SMReleaseBrowser>>postInitialize (in category 'initialize-release') ----- postInitialize + self ensureSqueakVersions. (release downloadUrl endsWith: '.st') ifTrue: [ release ensureInCache ifTrue: [ self loadScript: release contents ] ]! Item was added: + ----- Method: SMReleaseBrowser>>selectedIndex (in category 'model access') ----- + selectedIndex + "Required by widget." + ^ 0! Item was added: + ----- Method: SMReleaseBrowser>>selectedIndex: (in category 'model access') ----- + selectedIndex: anIndex + "Required by widget." + self changed: #selectedIndex.! Item was removed: - ----- Method: SMReleaseBrowser>>squeakVersion (in category 'model access') ----- - squeakVersion - ^ release squeakVersion! Item was removed: - ----- Method: SMReleaseBrowser>>squeakVersion: (in category 'model access') ----- - squeakVersion: aSMCategory - release squeakVersion: aSMCategory. - self changed: #squeakVersion! Item was added: + ----- Method: SMReleaseBrowser>>squeakVersionSelectionAt: (in category 'model access') ----- + squeakVersionSelectionAt: anInteger + ^ squeakVersionsSelections at: anInteger! Item was added: + ----- Method: SMReleaseBrowser>>squeakVersionSelectionAt:put: (in category 'model access') ----- + squeakVersionSelectionAt: anInteger put: aBoolean + ^ squeakVersionsSelections at: anInteger put: aBoolean! Item was changed: ----- Method: SMReleaseBrowser>>squeakVersions (in category 'model access') ----- squeakVersions + "Answer the squeak-versions which this release is compatible with." + ^ release squeakVersions! - "Answer the squeak-versions subcategories." - ^ SMSqueakMap default squeakVersions subCategories! Item was added: + ----- Method: SMReleaseBrowser>>squeakVersionsAt: (in category 'model access') ----- + squeakVersionsAt: anInteger + ^ self squeakVersions at: anInteger! Item was added: + ----- Method: SMReleaseBrowser>>squeakVersionsAt:put: (in category 'model access') ----- + squeakVersionsAt: anInteger put: aSMCategory + self squeakVersions halt + at: anInteger + put: aSMCategory. + self changed: #squeakVersions! From commits at source.squeak.org Tue Aug 16 21:29:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 21:29:50 2016 Subject: [squeak-dev] The Trunk: Tests-pre.353.mcz Message-ID: Patrick Rein uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-pre.353.mcz ==================== Summary ==================== Name: Tests-pre.353 Author: pre Time: 16 August 2016, 11:28:55.154232 pm UUID: 46ff28ff-ac37-4141-8d71-bcca99980a55 Ancestors: Tests-pre.352 Fixes the LocaleTest which runs when locale files are present. Adds a setUp and tearDown to make sure that the previous locale is re-installed after the test ran. =============== Diff against Tests-pre.352 =============== Item was changed: TestCase subclass: #LocaleTest + instanceVariableNames: 'previousID' - instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Tests-Localization'! !LocaleTest commentStamp: 'tak 8/3/2005 18:24' prior: 0! LocaleTest buildSuite run! Item was added: + ----- Method: LocaleTest>>setUp (in category 'testing') ----- + setUp + + previousID := Locale current localeID.! Item was added: + ----- Method: LocaleTest>>tearDown (in category 'testing') ----- + tearDown + + Locale switchToID: (LocaleID isoLanguage: previousID).! Item was changed: ----- Method: LocaleTest>>testLocaleChanged (in category 'testing') ----- testLocaleChanged "self debug: #testLocaleChanged" "LanguageEnvironment >> startUp is called from Prject >> localeChanged" "takes quite a while" Project current updateLocaleDependents. self assert: (ActiveHand instVarNamed: 'keyboardInterpreter') isNil description: 'non-nil keyboardInterpreter'. self assert: (Clipboard default instVarNamed: 'interpreter') isNil description: 'non-nil interpreter'. Locale switchToID: (LocaleID isoLanguage: 'ja'). + self assert: 'ja' equals: Locale current localeID isoLanguage. - self assert: 'ja' equals: Locale current localeID. Locale switchToID: (LocaleID isoLanguage: 'en'). + self assert: 'en' equals: Locale current localeID isoLanguage.! - self assert: 'en' equals: Locale current localeID.! From asqueaker at gmail.com Tue Aug 16 21:37:13 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Aug 16 21:37:56 2016 Subject: [squeak-dev] Squeak5.1 category added to SqueakMap, please make new SM releases of your projects In-Reply-To: References: Message-ID: Hi Hannes, I had to do a lot of research to answer your question. That's certainly valid use-case for simple packages, and the flexible Category model of SqueakMap's domain model supports it now. Its also easy enough to update the UI to support it too (see my Inbox submission). Unfortunately, its the SMServer which currently, for some strange reason, wants to have a single Squeak version associated with a Release. Note the web site presents it as a drop-down as well, so it seems intentionally limited to one primary version, but I'm not sure why. I imagine when someone re-writes the SMServer that will be fixed. For 5.1, it appears we still have to go through the process for each package if we wish for them to appear in the 5.1 list. - Chris On Mon, Aug 15, 2016 at 10:51 PM, H. Hirzel wrote: > The instructions seem to cover the case where an updated version of > the package is necessary. > > > What is missing is the answer to the following questions: > > What are the instructions if when the current package runs fine in 5.1 > and thus no new release of the package is necessary? > > Is it still necessary to copy the load script or can the Squeak5.1 > category be added to the existing entry? > > On 8/16/16, Chris Muller wrote: >> Its a pain, but it only takes a few minutes, so I documented the >> current state of my main projects on SqueakMap. >> >> This also means they show up in the catalog list for 5.1, of course. >> The longer the list, the better it looks (at ESUG, etc.). >> >> I freshened the instructions here: >> >> http://wiki.squeak.org/squeak/6180 >> >> > From commits at source.squeak.org Tue Aug 16 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 21:55:07 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160816215503.11962.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068619.html Name: KernelTests-mt.311 Ancestors: KernelTests-pre.310 Let #testTimesTwoPowerGradualUnderflow only expected-fail on the Windows platform. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068620.html Name: Morphic-mt.1282 Ancestors: Morphic-mt.1281 Fixes regression in Fill-in-the-blank morph by making it resizable again. (Use visible corner grips as in the list chooser.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068621.html Name: Morphic-mt.1283 Ancestors: Morphic-mt.1282 This fixes a bug that became clear in UserInputEventTests where ActiveWorld was broken after these tests ran. Due to the latest refactorings in the Project mechanism, we can implement the set/clear of ActiveWorld, ActiveHand, and ActiveEvent more safely. Tell me if I am mistaken, but #ensure: should not slow down event dispatch to a notable extent -- not even on ARM platforms. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068622.html Name: System-mt.893 Ancestors: System-mt.892 Appendix to Morphic-mt.1283 ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068623.html Name: MorphicTests-mt.38 Ancestors: MorphicTests-mt.37 Revert the hack to restore the prior ActiveWorld now that the behavior is fixed in Morphic. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068624.html Name: NetworkTests-mt.43 Ancestors: NetworkTests-bp.42 Socket reuse is not possible on Windows platform. Make it an expected failure there. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068625.html Name: Morphic-mt.1284 Ancestors: Morphic-mt.1283 Fix window color for windows without models. Do not make them transparent by default. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068626.html Name: System-mt.894 Ancestors: System-mt.893 Small adjustments in the Solarized and Monokai themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068627.html Name: Tests-pre.350 Ancestors: Tests-pre.349 Fixes timout issues of large font test cases ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068628.html Name: ToolBuilder-Kernel-mt.106 Ancestors: ToolBuilder-Kernel-mt.105 Fixes test result colors in TestRunner. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068629.html Name: ToolBuilder-Kernel-mt.106 Ancestors: ToolBuilder-Kernel-mt.105 Fixes test result colors in TestRunner. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068630.html Name: ToolBuilder-Morphic-mt.185 Ancestors: ToolBuilder-Morphic-mt.184 Fixes test result colors in TestRunner. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068631.html Name: SUnitGUI-mt.64 Ancestors: SUnitGUI-mt.63 Fixes test result colors in TestRunner. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068632.html Name: System-mt.895 Ancestors: System-mt.894 Sets UI theme colors for TestRunner status field. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068633.html Name: Monticello-mt.646 Ancestors: Monticello-mt.645 Fix UI theme for MCOperationsBrowser. For the sake of feature freeze, do it for ignore/reject changes only. As far as I can see, the MCMergeBrowser requires a little more care. However, the MCConflict summaries are emphasis only (bold etc.) and not colorized, so this is not that urgent. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068634.html Name: MultilingualTests-pre.21 Ancestors: MultilingualTests-tpr.20 Adds caretWidth to the MultilingualFontTests similar to the way other FontTests were updated before ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068635.html Name: System-mt.896 Ancestors: System-mt.895 Add default text attributes for ignored/reverted operations in MCOperationsBrowser (i.e. MC save dialog). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068636.html Name: System-mt.897 Ancestors: System-mt.896 Significat speed-up in UI theme switching. (Thanks Tim F.!) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068637.html Name: ShoutCore-mt.57 Ancestors: ShoutCore-mt.56 Appendix to System-mt.897 ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068638.html Name: Collections-mt.711 Ancestors: Collections-mt.710 Appendix to System-mt.897 ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068639.html Name: Morphic-mt.1285 Ancestors: Morphic-mt.1284 Sorry for the MVC-hickup. Make pop-up menus in MVC pop-up at the right location again. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068640.html Name: Tools-mt.719 Ancestors: Tools-mt.718 Flag a method for later refactoring. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068641.html Name: System-mt.898 Ancestors: System-mt.897 Clean-up I missed in previous commit. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068642.html Name: CollectionsTests-pre.267 Ancestors: CollectionsTests-topa.266 Improves attribute scanning tests by using specific fonts and adds tests documenting issues with bold fonts. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068643.html Name: HelpSystem-Core-mt.96 Ancestors: HelpSystem-Core-mt.95 Fix package api help topics so that they never create and register PackageInfo instances by accident. Our PackageDependencyTest notices everything! *__* ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068644.html Name: Kernel-mt.1035 Ancestors: Kernel-mt.1034 Fixes additional dependency by moving some window color-related methods to System extension. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068645.html Name: System-mt.899 Ancestors: System-mt.898 Fixes additional dependency by moving some window color-related methods to System extension. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068646.html Name: 51Deprecated-mt.44 Ancestors: 51Deprecated-mt.43 Update #defaultBackgroundColor deprecation consistently with Object. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068647.html Name: System-mt.900 Ancestors: System-mt.899 Reduce (additional) dependencies between packages. Go via Project's UI manager for many ToolBuilder-related things. Add convenient API for it. Goal: Fix failing dependency tests. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068648.html Name: ToolBuilder-Kernel-mt.107 Ancestors: ToolBuilder-Kernel-mt.106 Reduce (additional) dependencies between packages. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068649.html Name: Morphic-mt.1286 Ancestors: Morphic-mt.1285 Reduce (additional) dependencies between packages. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068650.html Name: PreferenceBrowser-mt.75 Ancestors: PreferenceBrowser-mt.74 Reduce (additional) dependencies between packages. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068651.html Name: ToolBuilder-Morphic-mt.186 Ancestors: ToolBuilder-Morphic-mt.185 Reduce (additional) dependencies between packages. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068652.html Name: ReleaseBuilder-mt.158 Ancestors: ReleaseBuilder-mt.157 Reduce (additional) dependencies between packages. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068653.html Name: System-mt.901 Ancestors: System-mt.900 Removes new dependency System -> Balloon. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068654.html Name: TrueType-mt.44 Ancestors: TrueType-mt.43 Removes additional dependency TrueType -> Morphic. (Note that we will move the Canvas abstraction into Graphics in the future so that #getCanvas will also work without Morphic even though it does not at the moment as you can see in DisplayScreen >> #defaultCanvasClass). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068655.html Name: SqueakSSL-Tests-pre.21 Ancestors: SqueakSSL-Tests-pre.20 Adds timeouts to SSLTests for running the tests with slow internet connections. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068656.html Name: Tests-pre.351 Ancestors: Tests-pre.350 Sets the timeout for MCMczInstallerTests to 1 minute to allow for the loading of the mcz files to finish ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068657.html Name: Tests-pre.352 Ancestors: Tests-pre.351 Indents the expected failures list of the decompiler tests properly and adds two SyntaxErrorNotifactions not covered by the tool. (Mea culpa. I should not commit when I am tired...) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068658.html Name: Tests-pre.353 Ancestors: Tests-pre.352 Fixes the LocaleTest which runs when locale files are present. Adds a setUp and tearDown to make sure that the previous locale is re-installed after the test ran. ============================================= From commits at source.squeak.org Tue Aug 16 22:00:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 16 22:00:24 2016 Subject: [squeak-dev] The Trunk: Tests-pre.354.mcz Message-ID: Patrick Rein uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-pre.354.mcz ==================== Summary ==================== Name: Tests-pre.354 Author: pre Time: 17 August 2016, 12:00:07.986232 am UUID: 1db2e27b-4abf-5d47-85ea-5eb0fed302a1 Ancestors: Tests-pre.353 Further work on the LocaleTest to make it even more isolated. It now tries to also restore any keyboard or clipboard interpreters. =============== Diff against Tests-pre.353 =============== Item was changed: SystemOrganization addCategory: #'Tests-Bugs'! SystemOrganization addCategory: #'Tests-Compiler'! SystemOrganization addCategory: #'Tests-Dependencies'! SystemOrganization addCategory: #'Tests-Digital Signatures'! SystemOrganization addCategory: #'Tests-Environments'! SystemOrganization addCategory: #'Tests-Exceptions'! SystemOrganization addCategory: #'Tests-FilePackage'! SystemOrganization addCategory: #'Tests-Files'! SystemOrganization addCategory: #'Tests-Finalization'! SystemOrganization addCategory: #'Tests-Hex'! SystemOrganization addCategory: #'Tests-Installer-Core'! SystemOrganization addCategory: #'Tests-Localization'! SystemOrganization addCategory: #'Tests-Monticello'! SystemOrganization addCategory: #'Tests-Monticello-Mocks'! SystemOrganization addCategory: #'Tests-Monticello-Utils'! SystemOrganization addCategory: #'Tests-Object Events'! SystemOrganization addCategory: #'Tests-ObjectsAsMethods'! SystemOrganization addCategory: #'Tests-PrimCallController'! SystemOrganization addCategory: #'Tests-Release'! SystemOrganization addCategory: #'Tests-System-Object Storage'! SystemOrganization addCategory: #'Tests-System-Support'! SystemOrganization addCategory: #'Tests-Utilities'! SystemOrganization addCategory: #'Tests-VM'! SystemOrganization addCategory: #'Tests-System-Digital Signatures'! SystemOrganization addCategory: #'Tests-System-Preferences'! + SystemOrganization addCategory: #'Tests-MonticelloMocks'! Item was changed: TestCase subclass: #LocaleTest + instanceVariableNames: 'previousID previousKeyboardInterpreter previousClipboardInterpreter' - instanceVariableNames: 'previousID' classVariableNames: '' poolDictionaries: '' category: 'Tests-Localization'! !LocaleTest commentStamp: 'tak 8/3/2005 18:24' prior: 0! LocaleTest buildSuite run! Item was changed: ----- Method: LocaleTest>>setUp (in category 'testing') ----- setUp + previousID := Locale current localeID. + previousKeyboardInterpreter := ActiveHand instVarNamed: 'keyboardInterpreter'. + previousClipboardInterpreter := Clipboard default instVarNamed: 'interpreter'. + ActiveHand clearKeyboardInterpreter. + Clipboard default clearInterpreter. + ! - previousID := Locale current localeID.! Item was changed: ----- Method: LocaleTest>>tearDown (in category 'testing') ----- tearDown + ActiveHand instVarNamed: 'keyboardInterpreter' put: previousKeyboardInterpreter. + Clipboard default instVarNamed: 'interpreter' put: previousClipboardInterpreter. Locale switchToID: (LocaleID isoLanguage: previousID).! From eliot.miranda at gmail.com Wed Aug 17 02:14:33 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Aug 17 02:14:39 2016 Subject: [squeak-dev] Re: The Trunk: KernelTests-pre.310.mcz In-Reply-To: References: <1471365804405-4911371.post@n4.nabble.com> Message-ID: <723C8646-55AA-4494-A28E-6A995492F7AE@gmail.com> > On Aug 16, 2016, at 2:25 PM, Fabio Niephaus wrote: > > > >> On Tue, Aug 16, 2016 at 11:16 PM Nicolas Cellier wrote: >> BTW, VM produced by appveyor automaton doesn't suffer from the problem, at least since we refactored the makefile and removed explicit msvcrt library linking. >> So whether compiled with gcc or clang, the win32 failure will disappear as soon as we declare a newer vm as stable. > > Does this mean we can/should use a recent win32 built by AppVeyor for the upcoming Squeak release? Not until it proves to be stable. Cl?ment and I suspect the recent revision of the leafless setter optimisation in the Cogit. Until we crack this I recommend using older VMs. > >> >> 2016-08-16 18:43 GMT+02:00 marcel.taeumel : >>> Eliot Miranda-2 wrote >>> > So shouldn't the code test for being on the Windows platform and not >>> > answer >>> > it as an expected failure on linux and Mac OS X? >>> > >>> > On Mon, Aug 15, 2016 at 4:23 PM, Nicolas Cellier < >>> >>> > nicolas.cellier.aka.nice@ >>> >>> >> wrote: >>> > >>> >> It only fails for windows VM if using msvcrt.dll >>> >> because Microsoft math library is bugged... >>> >> >>> >> 2016-08-16 1:07 GMT+02:00 Levente Uzonyi < >>> >>> > leves@.elte >>> >>> > >: >>> >> >>> >>> On Mon, 15 Aug 2016, >>> >>> > commits@.squeak >>> >>> > wrote: >>> >>> >>> >>> Patrick Rein uploaded a new version of KernelTests to project The Trunk: >>> >>>> http://source.squeak.org/trunk/KernelTests-pre.310.mcz >>> >>>> >>> >>>> ==================== Summary ==================== >>> >>>> >>> >>>> Name: KernelTests-pre.310 >>> >>>> Author: pre >>> >>>> Time: 15 August 2016, 11:25:58.171656 pm >>> >>>> UUID: 38fde71e-1444-6b4f-9d3b-24221c24a5d2 >>> >>>> Ancestors: KernelTests-ul.309 >>> >>>> >>> >>>> Recorded the wrong float underflow as an expected failure as it is >>> >>>> going >>> >>>> to be the expected behavior (somewhat) in the upcoming release >>> >>>> >>> >>> >>> >>> I've never seen that test failing. Is it a windows specific failure? >>> >>> >>> >>> Levente >>> >>> >>> >>> >>> >>> >>> >>>> =============== Diff against KernelTests-ul.309 =============== >>> >>>> >>> >>>> Item was added: >>> >>>> + ----- Method: FloatTest>>expectedFailures (in category >>> >>>> 'characterization') ----- >>> >>>> + expectedFailures >>> >>>> + >>> >>>> + ^ #(testTimesTwoPowerGradualUnderflow) ! >>> >>>> >>> >>>> >>> >>>> >>> >>>> >>> >>> >>> >> >>> >> >>> >> >>> >> >>> > >>> > >>> > -- >>> > _,,,^..^,,,_ >>> > best, Eliot >>> >>> Hi Eliot, >>> >>> yes, I already did that. >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: http://forum.world.st/The-Trunk-KernelTests-pre-310-mcz-tp4911102p4911371.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160816/b5cb0906/attachment.htm From jdelgado.pin at gmail.com Wed Aug 17 05:37:14 2016 From: jdelgado.pin at gmail.com (Jordi Delgado) Date: Wed Aug 17 05:37:17 2016 Subject: [squeak-dev] Remainder: ESUG 2016, 13th Innovation Technology Awards Message-ID: Reminder: *Only a few days left to submit!!* ESUG 2016, 13th Innovation Technology Awards Have you written innovative Smalltalk? The developers of any Smalltalk-based software can enter by submitting a 3-5min video of their software. Entrants demo their systems in a session at the end of Monday August 22, 2016, after which the conference attendees vote. (A vote consists in providing a sorted list of 3 preferred pieces of software.) The top 3 teams with the most innovative software will receive, respectively, 500 Euros, 300 Euros and 200 Euros. The results are announced in the Awards ceremony that is held during the social event. Applicants should provide the following information on the conference registration server (registration.esug.org). Once you have registered your personal info, an 'Awards' menu allows submitting your software. You can provide this information when you first register, or login again later and update your details. Info to provide: Name of the software Licence information (free, shareware, or commercial) Name of the Smalltalk dialect used Name, Affiliation and Country of developers Besides, it would be great if the submission could include: URL for a video (3-5 min) showing a screencast / demo of the software URL for downloading the software or at least a runnable demo Deadline: *August 21, 2016* Any Smalltalker can apply (students, companies, ...). The presented piece of code/software should be written in Smalltalk or directly support Smalltalk (e.g. Smalltalk VM). All Smalltalk dialects are accepted. The applicant should be "strongly related" to the presented code, be it as an author, as owner of the copyright/copyleft, or as an official representative of the copyright/copyleft owner. Bests, Jordi -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/5fc9cf47/attachment.htm From commits at source.squeak.org Wed Aug 17 08:40:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 08:40:45 2016 Subject: [squeak-dev] The Trunk: Chronology-Tests-pre.4.mcz Message-ID: Patrick Rein uploaded a new version of Chronology-Tests to project The Trunk: http://source.squeak.org/trunk/Chronology-Tests-pre.4.mcz ==================== Summary ==================== Name: Chronology-Tests-pre.4 Author: pre Time: 17 August 2016, 10:40:34.494232 am UUID: bb438ab5-6837-d74f-9036-cfb85ef62bf7 Ancestors: Chronology-Tests-bf.3 Updates makeUTC test for Dates to cater for the timezone independent behavior of Date objects. (together with Marcel) =============== Diff against Chronology-Tests-bf.3 =============== Item was changed: ----- Method: DateTest>>testMakeUTC (in category 'testing') ----- testMakeUTC + "Equal dates should compare equal regardless of which TimeZone they are created in." + + | priorTz march31stLocal march31stOcean | - "Equal dates should compare equal regardless of which TimeZone - they are created in." - | priorTz march31stLocal march31stOcean | - "This test won't work in GMT-9, but nobody lives there." - self deny: DateAndTime localTimeZone offset hours = -9. priorTz := DateAndTime localTimeZone. + + [DateAndTime + localTimeZone: (TimeZone + offset: 9 hours + name: 'Early Test Countries' + abbreviation: 'Test Ocean Early'). + + march31stLocal := Date year: 2016 month: 3 day: 31. + march31stLocal start: (march31stLocal start offset: DateAndTime localTimeZone offset). + - march31stLocal := Date today. DateAndTime localTimeZone: (TimeZone + offset: -9 hours + name: 'Late Test Countries' + abbreviation: 'Test Ocean Late'). + + march31stOcean := Date year: 2016 month: 3 day: 31. + march31stOcean start: (march31stOcean start offset: DateAndTime localTimeZone offset).] + ensure: [DateAndTime localTimeZone: priorTz]. + + self + deny: march31stLocal = march31stOcean; + assert: march31stOcean > march31stLocal. + + self + assert: march31stLocal makeUTC = march31stOcean makeUTC; + deny: march31stOcean makeUTC > march31stLocal makeUTC; + deny: march31stOcean makeUTC < march31stLocal makeUTC.! - offset: -9 hours - name: 'No Countries' - abbreviation: 'Ocean'). - march31stOcean := Date today. - DateAndTime localTimeZone: priorTz. - self assert: march31stLocal makeUTC = march31stOcean makeUTC ; - deny: march31stOcean makeUTC > march31stLocal makeUTC ; - deny: march31stOcean makeUTC < march31stLocal makeUTC! From commits at source.squeak.org Wed Aug 17 08:41:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 08:41:57 2016 Subject: [squeak-dev] The Trunk: SqueakSSL-Tests-pre.22.mcz Message-ID: Patrick Rein uploaded a new version of SqueakSSL-Tests to project The Trunk: http://source.squeak.org/trunk/SqueakSSL-Tests-pre.22.mcz ==================== Summary ==================== Name: SqueakSSL-Tests-pre.22 Author: pre Time: 17 August 2016, 10:41:49.267232 am UUID: beffd6c1-026b-f64e-9cf4-ca6d17ef1a68 Ancestors: SqueakSSL-Tests-pre.21 Gives the SqueakSSL tests even more timeout tolerance to cater for all kinds of connections =============== Diff against SqueakSSL-Tests-pre.21 =============== Item was changed: ----- Method: SqueakSSLTest>>testFaceBookAPI (in category 'tests') ----- testFaceBookAPI "Facebook sends incomplete data during SSL handshake. Useful for testing an edge condition in SqueakSSL." self + timeout: 90; - timeout: 60; ensureInternetConnectionTo: 'http://www.facebook.com'. Smalltalk at: #WebClient ifPresent:[:webClient| self shouldnt:[ [webClient httpGet: 'https://graph.facebook.com/oauth/access_token'] "Allow certificate errors on the Mac since cert validation isn't implemented yet." on: SqueakSSLCertificateError do:[:ex| SqueakSSL platformName = 'Mac OS' ifTrue:[ex resume] ifFalse:[ex pass]]. ] raise: Error. ].. ! Item was changed: ----- Method: SqueakSSLTest>>testGooglePopStream (in category 'tests') ----- testGooglePopStream "This tests the dreaded data-in-last-handshake problem that some people have been seeing. Google mail (at times) sends the first data chunk together with the last handshake and the Windows SSL code did not handle that correctly" "self run: #testGooglePopStream" | hostName address socket response stream | + self timeout: 90. - self timeout: 60. hostName := 'pop.gmail.com'. address := NetNameResolver addressForName: hostName. socket := Socket newTCP. socket connectTo: address port: 995. socket waitForConnectionFor: 10. stream := self secureSocketStream on: socket. [ stream sslConnect. response := stream upToAll: String crlf. self assert: response notEmpty. ] ensure:[stream destroy]. ! From commits at source.squeak.org Wed Aug 17 08:53:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 08:53:35 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.97.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.97.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.97 Author: mt Time: 17 August 2016, 8:50:01.275517 am UUID: b02687fa-938d-d440-939a-ea8ce99dae33 Ancestors: HelpSystem-Core-mt.96 Small fix to ensure legal selectors when updating class/method-based help books/topics. =============== Diff against HelpSystem-Core-mt.96 =============== Item was changed: ----- Method: ClassBasedHelpTopic>>accept:for: (in category 'editing') ----- accept: newContents for: subtopic | topicClass topicMethodSelector code | topicClass := self helpClass. + topicMethodSelector := subtopic key asLegalSelector asSymbol. - topicMethodSelector := (subtopic key copyReplaceAll: '-' with: '') copyReplaceAll: '.' with: ''. code := String streamContents:[:s| s nextPutAll: topicMethodSelector. s crtab; nextPutAll: '"This method was automatically generated. Edit it using:"'. s crtab; nextPutAll: '"', topicClass name,' edit: ', subtopic key storeString,'"'. s crtab; nextPutAll: '^(HelpTopic'. s crtab: 2; nextPutAll: 'title: ', subtopic title storeString. s crtab: 2; nextPutAll: 'contents: '. s cr; nextPutAll: (String streamContents:[:c| c nextChunkPutWithStyle: newContents]) storeString. s nextPutAll:' readStream nextChunkText)'. s crtab: 3; nextPutAll: 'key: ', subtopic key storeString. ]. topicClass class compile: code classified: ((topicClass class organization categoryOfElement: topicMethodSelector) ifNil:['pages']).! From commits at source.squeak.org Wed Aug 17 09:00:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 09:01:01 2016 Subject: [squeak-dev] The Trunk: Tests-mt.355.mcz Message-ID: Marcel Taeumel uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-mt.355.mcz ==================== Summary ==================== Name: Tests-mt.355 Author: mt Time: 17 August 2016, 9:00:42.591517 am UUID: dd413400-672e-d449-97a1-7967a96b7974 Ancestors: Tests-pre.354 Restore formatting and comments in #decompilerFailures. =============== Diff against Tests-pre.354 =============== Item was changed: ----- Method: DecompilerTests>>decompilerFailures (in category 'utilities') ----- decompilerFailures "Here is the list of failures: either a syntax error, a hard error or some failure to decompile correctly. Collected via DecompilerTestFailuresCollector new computeFailures." "class name, selector, error class name or nil" ^ #( + #(Behavior toolIconSelector: TestFailure) + #(BrowserCommentTextMorph showPane SyntaxErrorNotification) + #(ClassDescription replaceSilently:to: SyntaxErrorNotification) + #(CodeHolder getSelectorAndSendQuery:to:with: SyntaxErrorNotification) + #(Date printOn: TestFailure) + #(DecompilerTests testDecompileUnreachableParameter Error) + #(FontImporterTool fontFromFamily: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" + #(HttpUrl checkAuthorization:retry: TestFailure) + #(LargeNegativeIntegerTest testReplaceFromToWithStartingAt SyntaxErrorNotification) "same-name block-local temps in optimized blocks" + #(LargePositiveIntegerTest testReplaceFromToWithStartingAt SyntaxErrorNotification) "same-name block-local temps in optimized blocks" + #(MailComposition breakLinesInMessage: SyntaxErrorNotification) + #(MCConfigurationBrowser post SyntaxErrorNotification) + #(MVCToolBuilder setLayout:in: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" + #(ParagraphEditor inOutdent:delta: SyntaxErrorNotification) + #(PNGReadWriter copyPixelsGray: SyntaxErrorNotification) + #(ProtoObjectTest testIfNilIfNotNil SyntaxErrorNotification) + #(ProtoObjectTest testIfNotNil SyntaxErrorNotification) + #(ProtoObjectTest testIfNotNilIfNil SyntaxErrorNotification) + #(RxsCharSet enumerablePartPredicateIgnoringCase: SyntaxErrorNotification) + #(ScaledDecimalTest testConvertFromFraction SyntaxErrorNotification) "local/non-local temps" + #(SHMCClassDefinition withAllSuperclassesDo: SyntaxErrorNotification) "same-name block-local temps in optimized blocks" + #(StandardScriptingSystem holderWithAlphabet SyntaxErrorNotification) "same-name block-local temps in optimized blocks" + #(SyntaxMorph mouseEnterDragging: SyntaxErrorNotification) + #(SystemWindow convertAlignment SyntaxErrorNotification) + #(TextEditor inOutdent:delta: SyntaxErrorNotification) + #(TextURL actOnClickFor: TestFailure) + #(TTContourConstruction segmentsDo: SyntaxErrorNotification) "Worth fixing; these two are mistaken conversion from a whileTrue: to a to:do: but the index is used outside the whileTrue:" + #(TTFontReader processHorizontalMetricsTable:length: SyntaxErrorNotification) + #(WeakSet scanForLoadedSymbol: TestFailure))! - #(#Behavior #toolIconSelector: #TestFailure) - #(#BrowserCommentTextMorph #showPane #SyntaxErrorNotification) - #(#ClassDescription #replaceSilently:to: #SyntaxErrorNotification) - #(#CodeHolder #getSelectorAndSendQuery:to:with: #SyntaxErrorNotification) - #(#Date #printOn: #TestFailure) - #(#DecompilerTests #testDecompileUnreachableParameter #Error) - #(#FontImporterTool #fontFromFamily: #SyntaxErrorNotification) - #(#HttpUrl #checkAuthorization:retry: #TestFailure) - #(#LargeNegativeIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) - #(#LargePositiveIntegerTest #testReplaceFromToWithStartingAt #SyntaxErrorNotification) - #(#MailComposition #breakLinesInMessage: #SyntaxErrorNotification) - #(#MCConfigurationBrowser #post #SyntaxErrorNotification) - #(#MVCToolBuilder #setLayout:in: #SyntaxErrorNotification) - #(#ParagraphEditor #inOutdent:delta: #SyntaxErrorNotification) - #(#PNGReadWriter #copyPixelsGray: #SyntaxErrorNotification) - #(#ProtoObjectTest #testIfNilIfNotNil #SyntaxErrorNotification) - #(#ProtoObjectTest #testIfNotNil #SyntaxErrorNotification) - #(#ProtoObjectTest #testIfNotNilIfNil #SyntaxErrorNotification) - #(#RxsCharSet #enumerablePartPredicateIgnoringCase: #SyntaxErrorNotification) - #(#ScaledDecimalTest #testConvertFromFraction #SyntaxErrorNotification) - #(#SHMCClassDefinition #withAllSuperclassesDo: #SyntaxErrorNotification) - #(#StandardScriptingSystem #holderWithAlphabet #SyntaxErrorNotification) - #(#SyntaxMorph #mouseEnterDragging: #SyntaxErrorNotification) - #(#SystemWindow #convertAlignment #SyntaxErrorNotification) - #(#TextEditor #inOutdent:delta: #SyntaxErrorNotification) - #(#TextURL #actOnClickFor: #TestFailure) - #(#TTContourConstruction #segmentsDo: #SyntaxErrorNotification) - #(#TTFontReader #processHorizontalMetricsTable:length: #SyntaxErrorNotification) - #(#WeakSet #scanForLoadedSymbol: #TestFailure))! From bert at freudenbergs.de Wed Aug 17 10:11:05 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Aug 17 10:11:09 2016 Subject: [squeak-dev] The Trunk: Tests-pre.349.mcz In-Reply-To: References: Message-ID: On Tue, Aug 16, 2016 at 11:12 PM, Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com> wrote: > Fortunately, the server doesn't diffsWithPrettyPrint ;) > That's definitely one Preferences to be set to false by default IMO. > +1 - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/f04f24dc/attachment.htm From commits at source.squeak.org Wed Aug 17 10:23:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 10:23:25 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.159.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.159.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.159 Author: mt Time: 17 August 2016, 10:22:45.937517 am UUID: 1920f248-643b-9a4a-b1c4-0affddce0911 Ancestors: ReleaseBuilder-mt.158 Clean-up in the release builder in preparation for the code freeze. =============== Diff against ReleaseBuilder-mt.158 =============== Item was added: + ----- Method: ReleaseBuilder class>>checkCurrentProjects (in category 'scripts - support') ----- + checkCurrentProjects + + Project current isMorphic ifFalse: [ + Warning signal: 'The current project is not Morphic. Please create a new Morphic project, enter it, and restart the release building process.']. + + Project allProjects size = 1 ifFalse: [ + Warning signal: 'There should only be one project.'].! Item was changed: + ----- Method: ReleaseBuilder class>>doNextStep (in category 'manual - steps') ----- - ----- Method: ReleaseBuilder class>>doNextStep (in category 'manual') ----- doNextStep "Use this call to perform the manual steps in the release process." | versionString | SystemVersion current isRelease ifTrue: [ ^ self inform: 'This is a release image. Please use a trunk image to prepare the next release']. versionString := SystemVersion current version. SystemVersion current isAlpha ifTrue: [^ self step1FeatureFreeze]. SystemVersion current isFeatureFreeze ifTrue: [^ self step2CodeFreeze]. SystemVersion current isReleaseCandidate ifTrue: [ "Still code freeze and another RC? Or do the release?" (UIManager default chooseFrom: #('Create next release candidate' 'Create next release' 'Do nothing') lines: #(2) title: versionString) in: [:answer | answer = 1 ifTrue: [^ self step3NextReleaseCandidate]. answer = 2 ifTrue: [^ self step4Release]]. ^ self].! Item was added: + ----- Method: ReleaseBuilder class>>ensureMorphicTopProject (in category 'scripts - support') ----- + ensureMorphicTopProject + + Project current isMorphic ifFalse: [ + Warning signal: 'The current project is not Morphic. A new Morphic project will be created and entered. Please restart the release building process after that.'. + MorphicProject new enter "current process terminates after this"].! Item was changed: ----- Method: ReleaseBuilder class>>prepareEnvironment (in category 'preparing') ----- prepareEnvironment "Prepare everything that should be done for a new image build. Clear caches, passwords, etc." "ReleaseBuilder prepareNewBuild" self + checkCurrentProjects; clearCaches; configureTools; setPreferences; configureDesktop. DeferredTask := [PreferenceWizardMorph new openInWorld]. "If you save-and-quit the image after calling #prepareEnvironment, ensure that the next image startup will be fast." Project current world doOneCycle.! Item was changed: ----- Method: ReleaseBuilder class>>prepareSourceCode (in category 'preparing') ----- prepareSourceCode "Update code. Remove foreign packages." MCMcmUpdater defaultUpdateURL: self buildRepository description. MCMcmUpdater updateMissingPackages: true. MCMcmUpdater enableUpdatesForAllPackages. + TestCase new ensureInternetConnectionTo: self buildRepository description. + + "Flush all caches. If a previous download failed this is often helpful" + MCFileBasedRepository flushAllCaches. - MCMcmUpdater default doUpdate: false. "non-interactive". + [MCMcmUpdater default doUpdate: false. "non-interactive"] + on: MCEmptyVersion do: [:warning | warning resume]. + self unloadForeignPackages; checkForDirtyPackages; loadWellKnownPackages; checkForUndeclaredSymbols. Compiler recompileAll.! Item was changed: + ----- Method: ReleaseBuilder class>>requestNextReleaseVersion (in category 'manual') ----- - ----- Method: ReleaseBuilder class>>requestNextReleaseVersion (in category 'manual - steps') ----- requestNextReleaseVersion "self requestNextReleaseVersion" | nextMinor nextMajor current | current := { SystemVersion current majorVersionNumber. SystemVersion current minorVersionNumber}. nextMinor := { current first. current second + 1}. nextMajor := { current first + 1. 0}. (UIManager default chooseFrom: { '{1}.{2}' format: {nextMinor first. nextMinor second}. '{1}.{2}' format: {nextMajor first. nextMajor second}} title: 'Please Choose Next Version') in: [:answer | answer ifNil: [^ self requestNextReleaseVersion]. answer = 1 ifTrue: [ NextMinorVersion := nextMinor second]. answer = 2 ifTrue: [ NextMajorVersion := nextMajor first. NextMinorVersion := 0]].! Item was added: + ----- Method: ReleaseBuilder class>>saveAsNewRelease (in category 'saving') ----- + saveAsNewRelease + "Use this to create a new release image to be used in the automated release artifact building process on http://www.github.com/squeak-smalltalk/squeak-app." + + | fileName | + self setNewSystemVersion: self versionString. + + fileName := ('squeak-{1}.{2}{3}' format: { + SystemVersion current majorVersionNumber. + SystemVersion current minorVersionNumber. + self releaseLocally ifTrue: ['-offline'] ifFalse: ['']}). + Smalltalk saveAs: fileName. + + "Update the image state." + self + prepareSourceCode; + prepareEnvironment; + switchToNewRepository: self releaseRepository; + addAdditionalRepositories. + + Smalltalk condenseChanges. + Smalltalk snapshot: true "Important!!" andQuit: true.! Item was changed: ----- Method: ReleaseBuilder class>>saveAsNewTrunk (in category 'saving') ----- saveAsNewTrunk + "Use this to create a new release image to be used in the automated release artifact building process on http://www.github.com/squeak-smalltalk/squeak-app." - "Use this to create a new trunk image to be used by smalltalkCI." | fileName | fileName := ('squeak-trunk{1}' format: { self releaseLocally ifTrue: ['-offline'] ifFalse: ['']}). + Smalltalk saveAs: fileName. + self - [ self - setTopProject; prepareSourceCode; prepareEnvironment; switchToNewRepository: self buildRepository. - ] on: MCEmptyVersion do: [:warning | warning resume]. - - Smalltalk saveAs: fileName. Smalltalk condenseChanges. Smalltalk snapshot: true "Important!!" andQuit: true.! Item was changed: ----- Method: ReleaseBuilder class>>setNewSystemVersion: (in category 'manual') ----- setNewSystemVersion: version self class compile: (self initializeTemplate format: {version}) classified: 'class initialization'. self initialize. + self assert: self versionString = SystemVersion current version. + SystemVersion current isRelease ifFalse: [ + self inform: ('You just changed the system version to {1}.\Please upload the changed ''ReleaseBuilder'' package to\\ {2}\\so that this version change will be official.' translated withCRs format: {SystemVersion current version. self buildRepository description})].! - SystemVersion current isRelease - ifFalse: [self uploadNewSystemVersion].! Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. Project uiManager openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; encloseSelection: false ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. Model windowActiveOnFirstClick: false. "Not good for little screen real estate." Model useColorfulWindows: false. Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false; passiveColor: (Color gray: 0.85); activeColor: (Color r: 1 g: 0.599 b: 0.0). ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; enable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 8. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; + disable: #diffsWithPrettyPrint; - enable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! Item was changed: ----- Method: ReleaseBuilder class>>step4Release (in category 'manual - steps') ----- step4Release "Creates the release. New file, clean-ed up." (UIManager default confirm: ('Do you want release {1}{2}?' withCRs format: { self versionString. (self releaseLocally ifTrue: [' locally'] ifFalse: [''])}) title: 'Release Builder Step 4 of 4: The Release') ifFalse: [^ self]. "If you re-open the current trunk image again, it will be an alpha version for the next release." DeferredTask := [self step0AssureAlpha]. "We continue with preparing the release image." + NextTask := [self saveAsNewRelease]. - NextTask := [self step5DoRelease]. "Now save it but do not quit." Smalltalk snapshot: true andQuit: false.! Item was removed: - ----- Method: ReleaseBuilder class>>step5DoRelease (in category 'manual - steps') ----- - step5DoRelease - "Creates the release. New file, clean-ed up." - - | fileName | - - "Create new .image and .changes files for the release image." - self setNewSystemVersion: self versionString. - fileName := ('squeak-{1}.{2}{3}' format: { - SystemVersion current majorVersionNumber. - SystemVersion current minorVersionNumber. - self releaseLocally ifTrue: ['-offline'] ifFalse: ['']}). - Smalltalk saveAs: fileName. - - "Update the image state." - [ self - setTopProject; - prepareSourceCode; - prepareEnvironment; - switchToNewRepository: self releaseRepository. - ] on: MCEmptyVersion do: [:warning | warning resume]. - - NextTask := [self uploadForSmalltalkCI: fileName.]. - - Smalltalk condenseChanges. - Smalltalk snapshot: true "Important!!" andQuit: false. - "Finished. See NextTask."! Item was removed: - ----- Method: ReleaseBuilder class>>uploadForSmalltalkCI: (in category 'manual') ----- - uploadForSmalltalkCI: fileName - "TODO Automate upload." - - self releaseLocally ifTrue: [ - ^ UserDialogBoxMorph - inform: ('Please do never upload images that are meant to be used locally.') - title: 'Release Builder - Local Release Finished'.]. - - UserDialogBoxMorph - inform: ('Please upload {1] and {2} to files.squeak.org/smalltalkCI' format: {fileName, '.image'. fileName, '.changes'}) - title: 'Release Builder - Almost Done'.! From commits at source.squeak.org Wed Aug 17 12:23:31 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 12:23:33 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1287.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1287.mcz ==================== Summary ==================== Name: Morphic-mt.1287 Author: mt Time: 17 August 2016, 2:12:36.939125 pm UUID: 093b8798-343f-024c-bddb-bb9fcc3bf4af Ancestors: Morphic-mt.1286 Makes triangular adornments not so prominent (especially when gradients are off) and flush the adornment cache in the release clean-up process. =============== Diff against Morphic-mt.1286 =============== Item was changed: ----- Method: PluggableTextMorph class>>adornmentWithColor: (in category 'frame adornments') ----- adornmentWithColor: aColor "Create and return a frame adornment with the given color" | size box form fillStyle | ^self adornmentCache at: aColor ifAbsentPut:[ + size := 16. - size := 20. box := 0@0 extent: size asPoint. form := Form extent: size@size depth: 32. fillStyle := MenuMorph gradientMenu ifFalse: [SolidFillStyle color: aColor] ifTrue: [ (GradientFillStyle ramp: { 0.0->(aColor alpha: 0.01). 0.8->aColor. 1.0->aColor}) origin: box topRight - (size@0); direction: (size @ size negated) // 4; radial: false]. form getCanvas drawPolygon: { box topRight. box topRight + (0@size). box topRight - (size@0) } fillStyle: fillStyle. form]. ! Item was added: + ----- Method: PluggableTextMorph class>>cleanUp: (in category 'as yet unclassified') ----- + cleanUp: aggressive + + aggressive ifTrue: [self flushAdornmentCache].! From commits at source.squeak.org Wed Aug 17 12:29:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 12:29:34 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.160.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.160.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.160 Author: mt Time: 17 August 2016, 2:28:08.414125 pm UUID: ee18c398-7310-7b43-9bcd-484b07e66650 Ancestors: ReleaseBuilder-mt.159 Minor adjustment in welcome workspaces. =============== Diff against ReleaseBuilder-mt.159 =============== Item was changed: ----- Method: ReleaseBuilder class>>openWelcomeWorkspaces (in category 'scripts - support') ----- openWelcomeWorkspaces + | t browser balloon | - | t b | t := HelpTopic title: 'Welcome to Squeak' readOnlyContents: 'Please choose a topic from the left sidebare.'. t subtopics add: (SqueakHelp asHelpTopic subtopics detect: [:ea | ea key = #introduction]); add: SqueakLicenseHelp asHelpTopic; add: (SqueakProjectHelp asHelpTopic subtopics detect: [:ea | ea key = #squeakUserInterface]); add: (SqueakProjectHelp asHelpTopic subtopics detect: [:ea | ea key = #workingWithSqueak]); add: SqueakReleaseNotes asHelpTopic. + browser := HelpBrowser openOn: t. + browser extent: browser world extent * 0.6. + browser center: browser world center. + browser model showFirstTopic. + + (FileDirectory default fileExists: 'balloon.png') ifFalse: [^ self]. + + balloon := (Form fromFileNamed: 'balloon.png') asMorph. + browser addMorphFront: balloon. + balloon layoutFrame: (LayoutFrame + fractions: (0@1 corner: 0@1) + offsets: (balloon width // 1.7 negated @ (balloon height * 0.9) negated corner: 0@0)).! - b := HelpBrowser openOn: t. - b extent: b world extent * 0.6. - b center: b world center. - b model showFirstTopic.! From hannes.hirzel at gmail.com Wed Aug 17 12:51:22 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 17 12:51:26 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <225C3C37-AC66-4F7B-93F7-CEA819DE1AF1@rowledge.org> <2C5E23EE-E0FC-4AD7-9F79-19F6E10A9182@gmx.de> <1471014517691-4910762.post@n4.nabble.com> <10C57A6A-30E9-4A0A-8392-28C293D8267C@rowledge.org> <26A8EECE-AC0D-492E-B98C-39ADBE5CA47D@rowledge.org> <562D043D-B6F6-49EC-B6A3-8D5AAB143B1D@rowledge.org> <1471069252501-4910837.post@n4.nabble.com> <1471093893291-4910908.post@n4.nabble.com> <1471098008117-4910909.post@n4.nabble.com> <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> Message-ID: A minor bug: If I open 'Help menu' -> 'Squeak Help' then choose 'The Project' -> 'Extending the system' and click on 'SqueakMap' the SqueakMap window opens _behind_ the 'Help window' ----- /home/user/sq5.1.beta/Squeak5.1beta-16420-32bit-r3397-All-in-One.app/Contents/Resources/Squeak5.1beta-16420-32bit.image Squeak5.1beta latest update: #16506 Current Change Set: Unnamed1 Image format 6521 (32 bit) -- --Hannes On 8/16/16, Fabio Niephaus wrote: > -- > > On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel wrote: > >> On 8/14/16, Fabio Niephaus wrote: >> > Here are the helper functions I came up with for the squeak.sh launcher >> to >> > ensure that the kernel is newer than 2.6.12 and that a squeak.conf >> exists: >> > https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe >> > >> > Best, >> > Fabio >> >> I added the calls to the two functions to helpers.sh >> >> It works but needs sudo permission which is normally not given. So >> some tweaking is needed. >> >> >> THIS DOES NOT WORK >> user8@user8-Latitude:~$ ./helpers.sh >> ./helpers.sh: line 17: \: command not found >> /etc/security/limits.d/squeak.conf is missing. Do you want to create >> one? This operation requires sudo permissions. (y/N): y >> You may be asked to enter your password... >> ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: Permission >> denied >> Done! Please log out and log back in before you try again. >> user8@user8-Latitude:~$ >> >> THIS IS FINE >> sudo ./helpers.sh >> [sudo] password for user8: >> ./helpers.sh: line 17: \: command not found >> /etc/security/limits.d/squeak.conf is missing. Do you want to create >> one? This operation requires sudo permissions. (y/N): y >> You may be asked to enter your password... >> Done! Please log out and log back in before you try again. >> user8@user8-Latitude:~$ >> > > Thanks for the feedback, Hannes. > I've already fixed and tested this on Linux (see [1]), but I forgot to > update the gist which I just did. > The newer version now uses `sudo tee -a`. > > Thanks again, > Fabio > > [1] > https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a > > >> >> --Hannes >> >> > -- >> > >> > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel >> wrote: >> > >> >> For the case I reported >> >> >> >> uname -r >> >> >> >> gives >> >> >> >> 3.19.0-25-generic >> >> >> >> for the kernel version >> >> >> >> --Hannes >> >> >> >> On 8/14/16, Levente Uzonyi wrote: >> >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >> >> > >> >> >> >> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel >> >> >>> wrote: >> >> >>> >> >> >>> Hello Levente >> >> >>> >> >> >>> The following on did the job. The 64bit all-in-one runs fine on >> >> >>> Ubuntu >> >> >>> 14.04.1. >> >> >> >> >> >> I guess an obvious question here is why on earth ubuntu is using >> >> >> such >> >> >> an >> >> >> old kernel. Raspbian (based on debian and so very conservative) got >> >> >> past >> >> >> that point at least 18 months ago. >> >> > >> >> > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o >> >> > 4.4 >> >> > if >> >> > you want to. >> >> > >> >> > Levente >> >> > >> >> >> >> >> >> >> >> >> tim >> >> >> -- >> >> >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> >> >> Strange OpCodes: BBL: Branch on Burned out Light >> >> >> >> >> >> >> >> >> >> >> >> >> >> > >> >> > >> >> >> >> >> > >> >> > From hannes.hirzel at gmail.com Wed Aug 17 13:19:44 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 17 13:19:50 2016 Subject: [squeak-dev] NuScratch error: DockingBarMenuMorph(Object)>>doesNotUnderstand: #useRoundedCorners Message-ID: Hello I load NuScratch through SqueakMap into Squeak 5.1beta (Update 16506). It loads fine but when I choose 'Scratch' from the apps menu I get the error mentioned in the subject line. --Hannes From eliot.miranda at gmail.com Wed Aug 17 14:41:05 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Aug 17 14:41:12 2016 Subject: [squeak-dev] Re: [Vm-dev] VM Maker: VMMaker.oscog-cb.1919.mcz In-Reply-To: References: <57b470e1.2637ed0a.99c78.a5dbSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: I will generate and commit sources today. If possible we should use the resulting VMs in the 5.1 release. We have until early next week to test then harshly and see if they stand up to abuse ;-) _,,,^..^,,,_ (phone) > On Aug 17, 2016, at 7:27 AM, Cl?ment Bera wrote: > > With that commit the VM is stable again. > >> On Wed, Aug 17, 2016 at 4:11 PM, wrote: >> >> ClementBera uploaded a new version of VMMaker to project VM Maker: >> http://source.squeak.org/VMMaker/VMMaker.oscog-cb.1919.mcz >> >> ==================== Summary ==================== >> >> Name: VMMaker.oscog-cb.1919 >> Author: cb >> Time: 17 August 2016, 4:10:53.445475 pm >> UUID: 00a8dd2a-bc8d-4552-b400-be781c8aabec >> Ancestors: VMMaker.oscog-cb.1918 >> >> fixed bug in scanner related to twoPath methods >> >> =============== Diff against VMMaker.oscog-cb.1918 =============== >> >> Item was changed: >> ----- Method: StackToRegisterMappingCogit>>compileFrameBuild (in category 'compile abstract instructions') ----- >> compileFrameBuild >> "Build a frame for a CogMethod activation. See CoInterpreter class>>initializeFrameIndices. >> Override to push the register receiver and register arguments, if any." >> self cppIf: IMMUTABILITY ifTrue: >> [useTwoPaths ifTrue: >> [self compileTwoPathFrameBuild. >> ^self]]. >> needsFrame ifFalse: >> [useTwoPaths ifTrue: >> [self compileTwoPathFramelessInit]. >> self initSimStackForFramelessMethod: initialPC. >> ^self]. >> + self deny: useTwoPaths. >> self genPushRegisterArgs. >> super compileFrameBuild. >> self initSimStackForFramefulMethod: initialPC! >> >> Item was changed: >> ----- Method: StackToRegisterMappingCogit>>scanMethod (in category 'compile abstract instructions') ----- >> scanMethod >> "Scan the method (and all embedded blocks) to determine >> - what the last bytecode is; extra bytes at the end of a method are used to encode things like source pointers or temp names >> - if the method needs a frame or not >> - what are the targets of any backward branches. >> - how many blocks it creates >> Answer the block count or on error a negative error code" >> | latestContinuation nExts descriptor pc numBlocks distance targetPC framelessStackDelta seenInstVarStore | >> >> needsFrame := useTwoPaths := seenInstVarStore := false. >> self maybeInitNumFixups. >> self maybeInitNumCounters. >> prevBCDescriptor := nil. >> NewspeakVM ifTrue: >> [numIRCs := 0]. >> (primitiveIndex > 0 >> and: [coInterpreter isQuickPrimitiveIndex: primitiveIndex]) ifTrue: >> [^0]. >> pc := latestContinuation := initialPC. >> numBlocks := framelessStackDelta := nExts := extA := extB := 0. >> [pc <= endPC] whileTrue: >> [byte0 := (objectMemory fetchByte: pc ofObject: methodObj) + bytecodeSetOffset. >> descriptor := self generatorAt: byte0. >> descriptor isExtension ifTrue: >> [descriptor opcode = Nop ifTrue: "unknown bytecode tag; see Cogit class>>#generatorTableFrom:" >> [^EncounteredUnknownBytecode]. >> self loadSubsequentBytesForDescriptor: descriptor at: pc. >> self perform: descriptor generator]. >> (descriptor isReturn >> and: [pc >= latestContinuation]) ifTrue: >> [endPC := pc]. >> >> needsFrame ifFalse: >> [(descriptor needsFrameFunction isNil >> or: [self perform: descriptor needsFrameFunction with: framelessStackDelta]) >> ifTrue: >> ["With immutability we win simply by avoiding a frame build if the receiver is young and not immutable." >> self cppIf: IMMUTABILITY >> ifTrue: [descriptor is1ByteInstVarStore >> ifTrue: [useTwoPaths := true] >> ifFalse: [needsFrame := true. useTwoPaths := false]] >> + ifFalse: [needsFrame := true. useTwoPaths := false]] >> - ifFalse: [needsFrame := true]] >> ifFalse: >> [framelessStackDelta := framelessStackDelta + descriptor stackDelta. >> "Without immutability we win if there are two or more stores and the receiver is new." >> self cppIf: IMMUTABILITY >> ifTrue: [] >> ifFalse: >> [descriptor is1ByteInstVarStore ifTrue: >> [seenInstVarStore >> ifTrue: [useTwoPaths := true] >> ifFalse: [seenInstVarStore := true]]]]]. >> >> descriptor isBranch ifTrue: >> [distance := self spanFor: descriptor at: pc exts: nExts in: methodObj. >> targetPC := pc + descriptor numBytes + distance. >> (self isBackwardBranch: descriptor at: pc exts: nExts in: methodObj) >> ifTrue: [self initializeFixupAt: targetPC - initialPC] >> ifFalse: >> [latestContinuation := latestContinuation max: targetPC. >> self maybeCountFixup. >> self maybeCountCounter]]. >> descriptor isBlockCreation ifTrue: >> [numBlocks := numBlocks + 1. >> distance := self spanFor: descriptor at: pc exts: nExts in: methodObj. >> targetPC := pc + descriptor numBytes + distance. >> latestContinuation := latestContinuation max: targetPC. >> self maybeCountFixup]. >> >> NewspeakVM ifTrue: >> [descriptor hasIRC ifTrue: >> [numIRCs := numIRCs + 1]]. >> pc := pc + descriptor numBytes. >> descriptor isExtension >> ifTrue: [nExts := nExts + 1] >> ifFalse: [nExts := extA := extB := 0]. >> prevBCDescriptor := descriptor]. >> ^numBlocks! > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/39e1a7de/attachment-0001.htm From commits at source.squeak.org Wed Aug 17 14:47:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 14:47:06 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1288.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1288.mcz ==================== Summary ==================== Name: Morphic-mt.1288 Author: mt Time: 17 August 2016, 2:48:55.896125 pm UUID: 9537c911-8b66-fb41-8b55-64717908dd01 Ancestors: Morphic-mt.1287 There is a toolbuilder test that fails if all buttons in the system have gradients. Make it possible to turn off gradients for certain (test) buttons. =============== Diff against Morphic-mt.1287 =============== Item was changed: Morph subclass: #PluggableButtonMorph + instanceVariableNames: 'model label font getStateSelector actionSelector getLabelSelector getMenuSelector shortcutCharacter askBeforeChanging triggerOnMouseDown offColor onColor feedbackColor showSelectionFeedback allButtons arguments argumentsProvider argumentsSelector style hoverColor borderColor textColor labelOffset wantsGradient' - instanceVariableNames: 'model label font getStateSelector actionSelector getLabelSelector getMenuSelector shortcutCharacter askBeforeChanging triggerOnMouseDown offColor onColor feedbackColor showSelectionFeedback allButtons arguments argumentsProvider argumentsSelector style hoverColor borderColor textColor labelOffset' classVariableNames: 'GradientButton RoundedButtonCorners' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'! !PluggableButtonMorph commentStamp: '' prior: 0! A PluggableButtonMorph is a combination of an indicator for a boolean value stored in its model and an action button. The action of a button is often, but not always, to toggle the boolean value that it shows. Its pluggable selectors are: getStateSelector fetch a boolean value from the model actionSelector invoke this button's action on the model getLabelSelector fetch this button's lable from the model getMenuSelector fetch a pop-up menu for this button from the model Any of the above selectors can be nil, meaning that the model does not supply behavior for the given action, and the default behavior should be used. For example, if getStateSelector is nil, then this button shows the state of a read-only boolean that is always false. The model informs its view(s) of changes by sending #changed: to itself with getStateSelector as a parameter. The view tells the model when the button is pressed by sending actionSelector. If the actionSelector takes one or more arguments, then the following are relevant: arguments A list of arguments to provide when the actionSelector is called. argumentsProvider The object that is sent the argumentSelector to obtain arguments, if dynamic argumentsSelector The message sent to the argumentProvider to obtain the arguments. Options: askBeforeChanging have model ask user before allowing a change that could lose edits triggerOnMouseDown do this button's action on mouse down (vs. up) transition shortcutCharacter a place to record an optional shortcut key ! Item was changed: ----- Method: PluggableButtonMorph>>updateFillStylePressing:hovering: (in category 'updating') ----- updateFillStylePressing: isPressing hovering: isHovering | gradient cc | "Migrate old instances." hoverColor ifNil: [hoverColor := onColor darker]. self labelOffset: (isPressing ifTrue: [1@1] ifFalse: [0@0]). self getModelState ifTrue: [self color: onColor] ifFalse: [self color: offColor]. self borderStyle color: borderColor. + self wantsGradient ifFalse: [ - self class gradientButton ifFalse: [ isPressing ifTrue: [ self color: feedbackColor. self borderStyle color: feedbackColor muchDarker]. isHovering ifTrue: [ self color: hoverColor. self borderStyle color: borderColor]. ^ self]. isPressing ifTrue: [ cc := feedbackColor. self borderColor: feedbackColor muchDarker. gradient := GradientFillStyle ramp: { 0.0 -> cc muchDarker. 0.1-> (cc adjustBrightness: -0.2). 0.5 -> cc. 0.9-> (cc adjustBrightness: -0.1). 1 -> cc muchDarker}]. isHovering ifTrue: [ cc := hoverColor. gradient := GradientFillStyle ramp: { 0.0 -> Color white. 0.1-> (cc adjustBrightness: 0.05). 0.6 -> (cc darker)}]. gradient ifNil: [ cc := self color. gradient := GradientFillStyle ramp: { 0.0 -> Color white. 0.1-> (cc adjustBrightness: 0.05). 0.6 -> (cc darker)}]. gradient origin: bounds topLeft. gradient direction: 0@self height. self fillStyle: gradient.! Item was added: + ----- Method: PluggableButtonMorph>>wantsGradient (in category 'accessing') ----- + wantsGradient + ^ wantsGradient ifNil: [self class gradientButton]! Item was added: + ----- Method: PluggableButtonMorph>>wantsGradient: (in category 'accessing') ----- + wantsGradient: aBoolean + wantsGradient := aBoolean. + self changed.! From commits at source.squeak.org Wed Aug 17 14:47:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 14:47:09 2016 Subject: [squeak-dev] The Trunk: MorphicTests-mt.39.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicTests to project The Trunk: http://source.squeak.org/trunk/MorphicTests-mt.39.mcz ==================== Summary ==================== Name: MorphicTests-mt.39 Author: mt Time: 17 August 2016, 4:46:50.851674 pm UUID: a8697c66-a205-3b41-9b29-7447949779c3 Ancestors: MorphicTests-mt.38 Fixes a Morphic button test wrt. global gradients preference. =============== Diff against MorphicTests-mt.38 =============== Item was added: + ----- Method: MorphicToolBuilderTests>>makeButton (in category 'tests-button') ----- + makeButton + super makeButton. + widget wantsGradient: false. + ^ widget! From commits at source.squeak.org Wed Aug 17 14:57:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 14:57:34 2016 Subject: [squeak-dev] The Trunk: Collections-mt.712.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.712.mcz ==================== Summary ==================== Name: Collections-mt.712 Author: mt Time: 17 August 2016, 4:57:14.736674 pm UUID: df56cb06-3e8b-3444-aeae-194a531f000a Ancestors: Collections-mt.711 Quickfix: Due to some hick-ups with clickable text actions and mouse (up) events, process do-it actions as deferred message. For example, if you open windows in a do-it, those windows will now be at the top again. (Note that we should think about fixing TextEditor >> #mouseDown: and NewParagraph >> #clickAt:for:controller: later.) =============== Diff against Collections-mt.711 =============== Item was changed: ----- Method: TextDoIt>>actOnClickFor: (in category 'as yet unclassified') ----- actOnClickFor: anObject "Note: evalString gets evaluated IN THE CONTEXT OF anObject -- meaning that self and all instVars are accessible" + Project current addDeferredUIMessage: [Compiler evaluate: evalString for: anObject]. - Compiler evaluate: evalString for: anObject. ^ true ! From Marcel.Taeumel at hpi.de Wed Aug 17 14:57:53 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 17 14:58:38 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> Message-ID: <1471445873540-4911565.post@n4.nabble.com> Hannes Hirzel wrote > A minor bug: > > If I open > > 'Help menu' -> 'Squeak Help' > > then choose 'The Project' -> 'Extending the system' > > and click on 'SqueakMap' > > the SqueakMap window opens _behind_ the 'Help window' > > ----- > /home/user/sq5.1.beta/Squeak5.1beta-16420-32bit-r3397-All-in-One.app/Contents/Resources/Squeak5.1beta-16420-32bit.image > Squeak5.1beta > latest update: #16506 > Current Change Set: Unnamed1 > Image format 6521 (32 bit) > -- > > --Hannes > > On 8/16/16, Fabio Niephaus < > lists@ > > wrote: >> -- >> >> On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel < > hannes.hirzel@ > > wrote: >> >>> On 8/14/16, Fabio Niephaus < > lists@ > > wrote: >>> > Here are the helper functions I came up with for the squeak.sh >>> launcher >>> to >>> > ensure that the kernel is newer than 2.6.12 and that a squeak.conf >>> exists: >>> > https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe >>> > >>> > Best, >>> > Fabio >>> >>> I added the calls to the two functions to helpers.sh >>> >>> It works but needs sudo permission which is normally not given. So >>> some tweaking is needed. >>> >>> >>> THIS DOES NOT WORK >>> user8@user8-Latitude:~$ ./helpers.sh >>> ./helpers.sh: line 17: \: command not found >>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>> one? This operation requires sudo permissions. (y/N): y >>> You may be asked to enter your password... >>> ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: Permission >>> denied >>> Done! Please log out and log back in before you try again. >>> user8@user8-Latitude:~$ >>> >>> THIS IS FINE >>> sudo ./helpers.sh >>> [sudo] password for user8: >>> ./helpers.sh: line 17: \: command not found >>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>> one? This operation requires sudo permissions. (y/N): y >>> You may be asked to enter your password... >>> Done! Please log out and log back in before you try again. >>> user8@user8-Latitude:~$ >>> >> >> Thanks for the feedback, Hannes. >> I've already fixed and tested this on Linux (see [1]), but I forgot to >> update the gist which I just did. >> The newer version now uses `sudo tee -a`. >> >> Thanks again, >> Fabio >> >> [1] >> https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a >> >> >>> >>> --Hannes >>> >>> > -- >>> > >>> > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel < > hannes.hirzel@ > > >>> wrote: >>> > >>> >> For the case I reported >>> >> >>> >> uname -r >>> >> >>> >> gives >>> >> >>> >> 3.19.0-25-generic >>> >> >>> >> for the kernel version >>> >> >>> >> --Hannes >>> >> >>> >> On 8/14/16, Levente Uzonyi < > leves@.elte > > wrote: >>> >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >>> >> > >>> >> >> >>> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel < > hannes.hirzel@ > > >>> >> >>> wrote: >>> >> >>> >>> >> >>> Hello Levente >>> >> >>> >>> >> >>> The following on did the job. The 64bit all-in-one runs fine on >>> >> >>> Ubuntu >>> >> >>> 14.04.1. >>> >> >> >>> >> >> I guess an obvious question here is why on earth ubuntu is using >>> >> >> such >>> >> >> an >>> >> >> old kernel. Raspbian (based on debian and so very conservative) >>> got >>> >> >> past >>> >> >> that point at least 18 months ago. >>> >> > >>> >> > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o >>> >> > 4.4 >>> >> > if >>> >> > you want to. >>> >> > >>> >> > Levente >>> >> > >>> >> >> >>> >> >> >>> >> >> tim >>> >> >> -- >>> >> >> tim Rowledge; > tim@ > ; http://www.rowledge.org/tim >>> >> >> Strange OpCodes: BBL: Branch on Burned out Light >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> > >>> >> > >>> >> >>> >> >>> > >>> >>> >> Hi Hannes, should work now: http://forum.world.st/The-Trunk-Collections-mt-712-mcz-tp4911564.html Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911565.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 17 15:09:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 15:09:16 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.45.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.45.mcz ==================== Summary ==================== Name: 51Deprecated-mt.45 Author: mt Time: 17 August 2016, 5:09:05.536674 pm UUID: cf6de90d-fbf7-2446-8332-0c7ff7f03ed1 Ancestors: 51Deprecated-mt.44 Due to some simplification in the inheritance chain of docking bars and menus, restore some rounded-corner methods as deprecated to improve backwards compatibility (e.g. NuScratch). In the future, we can descide whether to add it to Morph in general or not. =============== Diff against 51Deprecated-mt.44 =============== Item was added: + ----- Method: DockingBarMorph>>useRoundedCorners (in category '*51Deprecated') ----- + useRoundedCorners + self cornerStyle: #rounded! Item was added: + ----- Method: DockingBarMorph>>useSquareCorners (in category '*51Deprecated') ----- + useSquareCorners + self cornerStyle: #square! Item was added: + ----- Method: MenuMorph>>useRoundedCorners (in category '*51Deprecated') ----- + useRoundedCorners + self cornerStyle: #rounded! Item was added: + ----- Method: MenuMorph>>useSquareCorners (in category '*51Deprecated') ----- + useSquareCorners + self cornerStyle: #square! From Marcel.Taeumel at hpi.de Wed Aug 17 15:10:52 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 17 15:11:45 2016 Subject: [squeak-dev] Re: NuScratch error: DockingBarMenuMorph(Object)>>doesNotUnderstand: #useRoundedCorners In-Reply-To: References: Message-ID: <1471446652462-4911568.post@n4.nabble.com> Hannes Hirzel wrote > Hello > > I load NuScratch through SqueakMap into Squeak 5.1beta (Update 16506). > > It loads fine but when I choose 'Scratch' from the apps menu I get the > error mentioned in the subject line. > > --Hannes Thanks: http://forum.world.st/The-Trunk-51Deprecated-mt-45-mcz-tp4911566.html Best, Marcel -- View this message in context: http://forum.world.st/NuScratch-error-DockingBarMenuMorph-Object-doesNotUnderstand-useRoundedCorners-tp4911546p4911568.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From hannes.hirzel at gmail.com Wed Aug 17 15:25:55 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 17 15:25:58 2016 Subject: [squeak-dev] Re: NuScratch error: DockingBarMenuMorph(Object)>>doesNotUnderstand: #useRoundedCorners In-Reply-To: <1471446652462-4911568.post@n4.nabble.com> References: <1471446652462-4911568.post@n4.nabble.com> Message-ID: Thanks as well, With your updates in image latest update: #16510 Current Change Set: NuScratch Image format 6521 (32 bit) the Scratch now starts fine. Best Hannes On 8/17/16, marcel.taeumel wrote: > Hannes Hirzel wrote >> Hello >> >> I load NuScratch through SqueakMap into Squeak 5.1beta (Update 16506). >> >> It loads fine but when I choose 'Scratch' from the apps menu I get the >> error mentioned in the subject line. >> >> --Hannes > > Thanks: > http://forum.world.st/The-Trunk-51Deprecated-mt-45-mcz-tp4911566.html > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/NuScratch-error-DockingBarMenuMorph-Object-doesNotUnderstand-useRoundedCorners-tp4911546p4911568.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From hannes.hirzel at gmail.com Wed Aug 17 15:32:07 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 17 15:32:10 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471445873540-4911565.post@n4.nabble.com> References: <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> <1471445873540-4911565.post@n4.nabble.com> Message-ID: Hello Marcel Unfortunately it is not an improvement. It now does not work at all. And the links on the 'Welcome' page are no longer working either. --Hannes On 8/17/16, marcel.taeumel wrote: > Hannes Hirzel wrote >> A minor bug: >> >> If I open >> >> 'Help menu' -> 'Squeak Help' >> >> then choose 'The Project' -> 'Extending the system' >> >> and click on 'SqueakMap' >> >> the SqueakMap window opens _behind_ the 'Help window' >> >> ----- >> /home/user/sq5.1.beta/Squeak5.1beta-16420-32bit-r3397-All-in-One.app/Contents/Resources/Squeak5.1beta-16420-32bit.image >> Squeak5.1beta >> latest update: #16506 >> Current Change Set: Unnamed1 >> Image format 6521 (32 bit) >> -- >> >> --Hannes >> >> On 8/16/16, Fabio Niephaus < > >> lists@ > >> > wrote: >>> -- >>> >>> On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel < > >> hannes.hirzel@ > >> > wrote: >>> >>>> On 8/14/16, Fabio Niephaus < > >> lists@ > >> > wrote: >>>> > Here are the helper functions I came up with for the squeak.sh >>>> launcher >>>> to >>>> > ensure that the kernel is newer than 2.6.12 and that a squeak.conf >>>> exists: >>>> > https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe >>>> > >>>> > Best, >>>> > Fabio >>>> >>>> I added the calls to the two functions to helpers.sh >>>> >>>> It works but needs sudo permission which is normally not given. So >>>> some tweaking is needed. >>>> >>>> >>>> THIS DOES NOT WORK >>>> user8@user8-Latitude:~$ ./helpers.sh >>>> ./helpers.sh: line 17: \: command not found >>>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>>> one? This operation requires sudo permissions. (y/N): y >>>> You may be asked to enter your password... >>>> ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: Permission >>>> denied >>>> Done! Please log out and log back in before you try again. >>>> user8@user8-Latitude:~$ >>>> >>>> THIS IS FINE >>>> sudo ./helpers.sh >>>> [sudo] password for user8: >>>> ./helpers.sh: line 17: \: command not found >>>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>>> one? This operation requires sudo permissions. (y/N): y >>>> You may be asked to enter your password... >>>> Done! Please log out and log back in before you try again. >>>> user8@user8-Latitude:~$ >>>> >>> >>> Thanks for the feedback, Hannes. >>> I've already fixed and tested this on Linux (see [1]), but I forgot to >>> update the gist which I just did. >>> The newer version now uses `sudo tee -a`. >>> >>> Thanks again, >>> Fabio >>> >>> [1] >>> https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a >>> >>> >>>> >>>> --Hannes >>>> >>>> > -- >>>> > >>>> > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel < > >> hannes.hirzel@ > >> > >>>> wrote: >>>> > >>>> >> For the case I reported >>>> >> >>>> >> uname -r >>>> >> >>>> >> gives >>>> >> >>>> >> 3.19.0-25-generic >>>> >> >>>> >> for the kernel version >>>> >> >>>> >> --Hannes >>>> >> >>>> >> On 8/14/16, Levente Uzonyi < > >> leves@.elte > >> > wrote: >>>> >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >>>> >> > >>>> >> >> >>>> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel < > >> hannes.hirzel@ > >> > >>>> >> >>> wrote: >>>> >> >>> >>>> >> >>> Hello Levente >>>> >> >>> >>>> >> >>> The following on did the job. The 64bit all-in-one runs fine on >>>> >> >>> Ubuntu >>>> >> >>> 14.04.1. >>>> >> >> >>>> >> >> I guess an obvious question here is why on earth ubuntu is using >>>> >> >> such >>>> >> >> an >>>> >> >> old kernel. Raspbian (based on debian and so very conservative) >>>> got >>>> >> >> past >>>> >> >> that point at least 18 months ago. >>>> >> > >>>> >> > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o >>>> >> > 4.4 >>>> >> > if >>>> >> > you want to. >>>> >> > >>>> >> > Levente >>>> >> > >>>> >> >> >>>> >> >> >>>> >> >> tim >>>> >> >> -- >>>> >> >> tim Rowledge; > >> tim@ > >> ; http://www.rowledge.org/tim >>>> >> >> Strange OpCodes: BBL: Branch on Burned out Light >>>> >> >> >>>> >> >> >>>> >> >> >>>> >> >> >>>> >> > >>>> >> > >>>> >> >>>> >> >>>> > >>>> >>>> >>> > > Hi Hannes, > > should work now: > http://forum.world.st/The-Trunk-Collections-mt-712-mcz-tp4911564.html > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911565.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From Marcel.Taeumel at hpi.de Wed Aug 17 15:34:01 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 17 15:34:46 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> <1471445873540-4911565.post@n4.nabble.com> Message-ID: <1471448041769-4911572.post@n4.nabble.com> Hannes Hirzel wrote > Hello Marcel > > Unfortunately it is not an improvement. It now does not work at all. > > And the links on the 'Welcome' page are no longer working either. > > --Hannes > > On 8/17/16, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >> Hannes Hirzel wrote >>> A minor bug: >>> >>> If I open >>> >>> 'Help menu' -> 'Squeak Help' >>> >>> then choose 'The Project' -> 'Extending the system' >>> >>> and click on 'SqueakMap' >>> >>> the SqueakMap window opens _behind_ the 'Help window' >>> >>> ----- >>> /home/user/sq5.1.beta/Squeak5.1beta-16420-32bit-r3397-All-in-One.app/Contents/Resources/Squeak5.1beta-16420-32bit.image >>> Squeak5.1beta >>> latest update: #16506 >>> Current Change Set: Unnamed1 >>> Image format 6521 (32 bit) >>> -- >>> >>> --Hannes >>> >>> On 8/16/16, Fabio Niephaus < >> >>> lists@ >> >>> > wrote: >>>> -- >>>> >>>> On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel < >> >>> hannes.hirzel@ >> >>> > wrote: >>>> >>>>> On 8/14/16, Fabio Niephaus < >> >>> lists@ >> >>> > wrote: >>>>> > Here are the helper functions I came up with for the squeak.sh >>>>> launcher >>>>> to >>>>> > ensure that the kernel is newer than 2.6.12 and that a squeak.conf >>>>> exists: >>>>> > https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe >>>>> > >>>>> > Best, >>>>> > Fabio >>>>> >>>>> I added the calls to the two functions to helpers.sh >>>>> >>>>> It works but needs sudo permission which is normally not given. So >>>>> some tweaking is needed. >>>>> >>>>> >>>>> THIS DOES NOT WORK >>>>> user8@user8-Latitude:~$ ./helpers.sh >>>>> ./helpers.sh: line 17: \: command not found >>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>>>> one? This operation requires sudo permissions. (y/N): y >>>>> You may be asked to enter your password... >>>>> ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: Permission >>>>> denied >>>>> Done! Please log out and log back in before you try again. >>>>> user8@user8-Latitude:~$ >>>>> >>>>> THIS IS FINE >>>>> sudo ./helpers.sh >>>>> [sudo] password for user8: >>>>> ./helpers.sh: line 17: \: command not found >>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>>>> one? This operation requires sudo permissions. (y/N): y >>>>> You may be asked to enter your password... >>>>> Done! Please log out and log back in before you try again. >>>>> user8@user8-Latitude:~$ >>>>> >>>> >>>> Thanks for the feedback, Hannes. >>>> I've already fixed and tested this on Linux (see [1]), but I forgot to >>>> update the gist which I just did. >>>> The newer version now uses `sudo tee -a`. >>>> >>>> Thanks again, >>>> Fabio >>>> >>>> [1] >>>> https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a >>>> >>>> >>>>> >>>>> --Hannes >>>>> >>>>> > -- >>>>> > >>>>> > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel < >> >>> hannes.hirzel@ >> >>> > >>>>> wrote: >>>>> > >>>>> >> For the case I reported >>>>> >> >>>>> >> uname -r >>>>> >> >>>>> >> gives >>>>> >> >>>>> >> 3.19.0-25-generic >>>>> >> >>>>> >> for the kernel version >>>>> >> >>>>> >> --Hannes >>>>> >> >>>>> >> On 8/14/16, Levente Uzonyi < >> >>> leves@.elte >> >>> > wrote: >>>>> >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >>>>> >> > >>>>> >> >> >>>>> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel < >> >>> hannes.hirzel@ >> >>> > >>>>> >> >>> wrote: >>>>> >> >>> >>>>> >> >>> Hello Levente >>>>> >> >>> >>>>> >> >>> The following on did the job. The 64bit all-in-one runs fine >>>>> on >>>>> >> >>> Ubuntu >>>>> >> >>> 14.04.1. >>>>> >> >> >>>>> >> >> I guess an obvious question here is why on earth ubuntu is using >>>>> >> >> such >>>>> >> >> an >>>>> >> >> old kernel. Raspbian (based on debian and so very conservative) >>>>> got >>>>> >> >> past >>>>> >> >> that point at least 18 months ago. >>>>> >> > >>>>> >> > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 o >>>>> >> > 4.4 >>>>> >> > if >>>>> >> > you want to. >>>>> >> > >>>>> >> > Levente >>>>> >> > >>>>> >> >> >>>>> >> >> >>>>> >> >> tim >>>>> >> >> -- >>>>> >> >> tim Rowledge; >> >>> tim@ >> >>> ; http://www.rowledge.org/tim >>>>> >> >> Strange OpCodes: BBL: Branch on Burned out Light >>>>> >> >> >>>>> >> >> >>>>> >> >> >>>>> >> >> >>>>> >> > >>>>> >> > >>>>> >> >>>>> >> >>>>> > >>>>> >>>>> >>>> >> >> Hi Hannes, >> >> should work now: >> http://forum.world.st/The-Trunk-Collections-mt-712-mcz-tp4911564.html >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911565.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Hi Hannes, there was no change to the links on the welcome page. Those are TextURL and no TextDoit. Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911572.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From hannes.hirzel at gmail.com Wed Aug 17 15:37:29 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 17 15:37:32 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471448041769-4911572.post@n4.nabble.com> References: <6D51852B-C114-4178-9FEC-0D68DFEF116A@rowledge.org> <1471445873540-4911565.post@n4.nabble.com> <1471448041769-4911572.post@n4.nabble.com> Message-ID: To be more precise: The windows open but not in the current project. They open in the project from which I called the menu entry 'Squeak' -> 'Update Squeak'. On 8/17/16, marcel.taeumel wrote: > Hannes Hirzel wrote >> Hello Marcel >> >> Unfortunately it is not an improvement. It now does not work at all. >> >> And the links on the 'Welcome' page are no longer working either. >> >> --Hannes >> >> On 8/17/16, marcel.taeumel < > >> Marcel.Taeumel@ > >> > wrote: >>> Hannes Hirzel wrote >>>> A minor bug: >>>> >>>> If I open >>>> >>>> 'Help menu' -> 'Squeak Help' >>>> >>>> then choose 'The Project' -> 'Extending the system' >>>> >>>> and click on 'SqueakMap' >>>> >>>> the SqueakMap window opens _behind_ the 'Help window' >>>> >>>> ----- >>>> /home/user/sq5.1.beta/Squeak5.1beta-16420-32bit-r3397-All-in-One.app/Contents/Resources/Squeak5.1beta-16420-32bit.image >>>> Squeak5.1beta >>>> latest update: #16506 >>>> Current Change Set: Unnamed1 >>>> Image format 6521 (32 bit) >>>> -- >>>> >>>> --Hannes >>>> >>>> On 8/16/16, Fabio Niephaus < >>> >>>> lists@ >>> >>>> > wrote: >>>>> -- >>>>> >>>>> On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel < >>> >>>> hannes.hirzel@ >>> >>>> > wrote: >>>>> >>>>>> On 8/14/16, Fabio Niephaus < >>> >>>> lists@ >>> >>>> > wrote: >>>>>> > Here are the helper functions I came up with for the squeak.sh >>>>>> launcher >>>>>> to >>>>>> > ensure that the kernel is newer than 2.6.12 and that a squeak.conf >>>>>> exists: >>>>>> > https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe >>>>>> > >>>>>> > Best, >>>>>> > Fabio >>>>>> >>>>>> I added the calls to the two functions to helpers.sh >>>>>> >>>>>> It works but needs sudo permission which is normally not given. So >>>>>> some tweaking is needed. >>>>>> >>>>>> >>>>>> THIS DOES NOT WORK >>>>>> user8@user8-Latitude:~$ ./helpers.sh >>>>>> ./helpers.sh: line 17: \: command not found >>>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>>>>> one? This operation requires sudo permissions. (y/N): y >>>>>> You may be asked to enter your password... >>>>>> ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: Permission >>>>>> denied >>>>>> Done! Please log out and log back in before you try again. >>>>>> user8@user8-Latitude:~$ >>>>>> >>>>>> THIS IS FINE >>>>>> sudo ./helpers.sh >>>>>> [sudo] password for user8: >>>>>> ./helpers.sh: line 17: \: command not found >>>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>>>>> one? This operation requires sudo permissions. (y/N): y >>>>>> You may be asked to enter your password... >>>>>> Done! Please log out and log back in before you try again. >>>>>> user8@user8-Latitude:~$ >>>>>> >>>>> >>>>> Thanks for the feedback, Hannes. >>>>> I've already fixed and tested this on Linux (see [1]), but I forgot to >>>>> update the gist which I just did. >>>>> The newer version now uses `sudo tee -a`. >>>>> >>>>> Thanks again, >>>>> Fabio >>>>> >>>>> [1] >>>>> https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a >>>>> >>>>> >>>>>> >>>>>> --Hannes >>>>>> >>>>>> > -- >>>>>> > >>>>>> > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel < >>> >>>> hannes.hirzel@ >>> >>>> > >>>>>> wrote: >>>>>> > >>>>>> >> For the case I reported >>>>>> >> >>>>>> >> uname -r >>>>>> >> >>>>>> >> gives >>>>>> >> >>>>>> >> 3.19.0-25-generic >>>>>> >> >>>>>> >> for the kernel version >>>>>> >> >>>>>> >> --Hannes >>>>>> >> >>>>>> >> On 8/14/16, Levente Uzonyi < >>> >>>> leves@.elte >>> >>>> > wrote: >>>>>> >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >>>>>> >> > >>>>>> >> >> >>>>>> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel < >>> >>>> hannes.hirzel@ >>> >>>> > >>>>>> >> >>> wrote: >>>>>> >> >>> >>>>>> >> >>> Hello Levente >>>>>> >> >>> >>>>>> >> >>> The following on did the job. The 64bit all-in-one runs fine >>>>>> on >>>>>> >> >>> Ubuntu >>>>>> >> >>> 14.04.1. >>>>>> >> >> >>>>>> >> >> I guess an obvious question here is why on earth ubuntu is >>>>>> >> >> using >>>>>> >> >> such >>>>>> >> >> an >>>>>> >> >> old kernel. Raspbian (based on debian and so very conservative) >>>>>> got >>>>>> >> >> past >>>>>> >> >> that point at least 18 months ago. >>>>>> >> > >>>>>> >> > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 >>>>>> >> > o >>>>>> >> > 4.4 >>>>>> >> > if >>>>>> >> > you want to. >>>>>> >> > >>>>>> >> > Levente >>>>>> >> > >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> tim >>>>>> >> >> -- >>>>>> >> >> tim Rowledge; >>> >>>> tim@ >>> >>>> ; http://www.rowledge.org/tim >>>>>> >> >> Strange OpCodes: BBL: Branch on Burned out Light >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> >> >> >>>>>> >> > >>>>>> >> > >>>>>> >> >>>>>> >> >>>>>> > >>>>>> >>>>>> >>>>> >>> >>> Hi Hannes, >>> >>> should work now: >>> http://forum.world.st/The-Trunk-Collections-mt-712-mcz-tp4911564.html >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: >>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911565.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>> >>> > > Hi Hannes, > > there was no change to the links on the welcome page. Those are TextURL and > no TextDoit. > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911572.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From commits at source.squeak.org Wed Aug 17 15:53:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 15:53:56 2016 Subject: [squeak-dev] The Trunk: Collections-mt.713.mcz Message-ID: Marcel Taeumel uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-mt.713.mcz ==================== Summary ==================== Name: Collections-mt.713 Author: mt Time: 17 August 2016, 5:53:25.818397 pm UUID: 9ae54fc6-0cc6-f243-abd7-b2510484603c Ancestors: Collections-mt.712 Revert previous change because Collections have no dependency on System. =============== Diff against Collections-mt.712 =============== Item was changed: ----- Method: TextDoIt>>actOnClickFor: (in category 'as yet unclassified') ----- actOnClickFor: anObject "Note: evalString gets evaluated IN THE CONTEXT OF anObject -- meaning that self and all instVars are accessible" + Compiler evaluate: evalString for: anObject. - Project current addDeferredUIMessage: [Compiler evaluate: evalString for: anObject]. ^ true ! From Marcel.Taeumel at hpi.de Wed Aug 17 16:10:26 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 17 16:11:11 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: References: <1471445873540-4911565.post@n4.nabble.com> <1471448041769-4911572.post@n4.nabble.com> Message-ID: <1471450226342-4911578.post@n4.nabble.com> Hannes Hirzel wrote > To be more precise: > > The windows open but not in the current project. They open in the > project from which I called the menu entry 'Squeak' -> 'Update > Squeak'. > > On 8/17/16, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >> Hannes Hirzel wrote >>> Hello Marcel >>> >>> Unfortunately it is not an improvement. It now does not work at all. >>> >>> And the links on the 'Welcome' page are no longer working either. >>> >>> --Hannes >>> >>> On 8/17/16, marcel.taeumel < >> >>> Marcel.Taeumel@ >> >>> > wrote: >>>> Hannes Hirzel wrote >>>>> A minor bug: >>>>> >>>>> If I open >>>>> >>>>> 'Help menu' -> 'Squeak Help' >>>>> >>>>> then choose 'The Project' -> 'Extending the system' >>>>> >>>>> and click on 'SqueakMap' >>>>> >>>>> the SqueakMap window opens _behind_ the 'Help window' >>>>> >>>>> ----- >>>>> /home/user/sq5.1.beta/Squeak5.1beta-16420-32bit-r3397-All-in-One.app/Contents/Resources/Squeak5.1beta-16420-32bit.image >>>>> Squeak5.1beta >>>>> latest update: #16506 >>>>> Current Change Set: Unnamed1 >>>>> Image format 6521 (32 bit) >>>>> -- >>>>> >>>>> --Hannes >>>>> >>>>> On 8/16/16, Fabio Niephaus < >>>> >>>>> lists@ >>>> >>>>> > wrote: >>>>>> -- >>>>>> >>>>>> On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel < >>>> >>>>> hannes.hirzel@ >>>> >>>>> > wrote: >>>>>> >>>>>>> On 8/14/16, Fabio Niephaus < >>>> >>>>> lists@ >>>> >>>>> > wrote: >>>>>>> > Here are the helper functions I came up with for the squeak.sh >>>>>>> launcher >>>>>>> to >>>>>>> > ensure that the kernel is newer than 2.6.12 and that a squeak.conf >>>>>>> exists: >>>>>>> > https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe >>>>>>> > >>>>>>> > Best, >>>>>>> > Fabio >>>>>>> >>>>>>> I added the calls to the two functions to helpers.sh >>>>>>> >>>>>>> It works but needs sudo permission which is normally not given. So >>>>>>> some tweaking is needed. >>>>>>> >>>>>>> >>>>>>> THIS DOES NOT WORK >>>>>>> user8@user8-Latitude:~$ ./helpers.sh >>>>>>> ./helpers.sh: line 17: \: command not found >>>>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>>>>>> one? This operation requires sudo permissions. (y/N): y >>>>>>> You may be asked to enter your password... >>>>>>> ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: >>>>>>> Permission >>>>>>> denied >>>>>>> Done! Please log out and log back in before you try again. >>>>>>> user8@user8-Latitude:~$ >>>>>>> >>>>>>> THIS IS FINE >>>>>>> sudo ./helpers.sh >>>>>>> [sudo] password for user8: >>>>>>> ./helpers.sh: line 17: \: command not found >>>>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to create >>>>>>> one? This operation requires sudo permissions. (y/N): y >>>>>>> You may be asked to enter your password... >>>>>>> Done! Please log out and log back in before you try again. >>>>>>> user8@user8-Latitude:~$ >>>>>>> >>>>>> >>>>>> Thanks for the feedback, Hannes. >>>>>> I've already fixed and tested this on Linux (see [1]), but I forgot >>>>>> to >>>>>> update the gist which I just did. >>>>>> The newer version now uses `sudo tee -a`. >>>>>> >>>>>> Thanks again, >>>>>> Fabio >>>>>> >>>>>> [1] >>>>>> https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a >>>>>> >>>>>> >>>>>>> >>>>>>> --Hannes >>>>>>> >>>>>>> > -- >>>>>>> > >>>>>>> > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel < >>>> >>>>> hannes.hirzel@ >>>> >>>>> > >>>>>>> wrote: >>>>>>> > >>>>>>> >> For the case I reported >>>>>>> >> >>>>>>> >> uname -r >>>>>>> >> >>>>>>> >> gives >>>>>>> >> >>>>>>> >> 3.19.0-25-generic >>>>>>> >> >>>>>>> >> for the kernel version >>>>>>> >> >>>>>>> >> --Hannes >>>>>>> >> >>>>>>> >> On 8/14/16, Levente Uzonyi < >>>> >>>>> leves@.elte >>>> >>>>> > wrote: >>>>>>> >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >>>>>>> >> > >>>>>>> >> >> >>>>>>> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel < >>>> >>>>> hannes.hirzel@ >>>> >>>>> > >>>>>>> >> >>> wrote: >>>>>>> >> >>> >>>>>>> >> >>> Hello Levente >>>>>>> >> >>> >>>>>>> >> >>> The following on did the job. The 64bit all-in-one runs fine >>>>>>> on >>>>>>> >> >>> Ubuntu >>>>>>> >> >>> 14.04.1. >>>>>>> >> >> >>>>>>> >> >> I guess an obvious question here is why on earth ubuntu is >>>>>>> >> >> using >>>>>>> >> >> such >>>>>>> >> >> an >>>>>>> >> >> old kernel. Raspbian (based on debian and so very >>>>>>> conservative) >>>>>>> got >>>>>>> >> >> past >>>>>>> >> >> that point at least 18 months ago. >>>>>>> >> > >>>>>>> >> > It doesn't. 14.04 uses 3.13 by default, but you can install 4.2 >>>>>>> >> > o >>>>>>> >> > 4.4 >>>>>>> >> > if >>>>>>> >> > you want to. >>>>>>> >> > >>>>>>> >> > Levente >>>>>>> >> > >>>>>>> >> >> >>>>>>> >> >> >>>>>>> >> >> tim >>>>>>> >> >> -- >>>>>>> >> >> tim Rowledge; >>>> >>>>> tim@ >>>> >>>>> ; http://www.rowledge.org/tim >>>>>>> >> >> Strange OpCodes: BBL: Branch on Burned out Light >>>>>>> >> >> >>>>>>> >> >> >>>>>>> >> >> >>>>>>> >> >> >>>>>>> >> > >>>>>>> >> > >>>>>>> >> >>>>>>> >> >>>>>>> > >>>>>>> >>>>>>> >>>>>> >>>> >>>> Hi Hannes, >>>> >>>> should work now: >>>> http://forum.world.st/The-Trunk-Collections-mt-712-mcz-tp4911564.html >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911565.html >>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>> >>>> >> >> Hi Hannes, >> >> there was no change to the links on the welcome page. Those are TextURL >> and >> no TextDoit. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911572.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Oooops... I'm on it. Thanks for the bug report. Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911578.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 17 16:24:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 16:24:13 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1289.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1289.mcz ==================== Summary ==================== Name: Morphic-mt.1289 Author: mt Time: 17 August 2016, 6:23:34.536397 pm UUID: 495102e8-04e6-bb40-acb9-c15a0703485a Ancestors: Morphic-mt.1288 Fixes a regression regarding the global ActiveWorld. Sorry for that. (Images might have to switch projects back and forth to get into a consistent state again.) =============== Diff against Morphic-mt.1288 =============== Item was changed: ----- Method: Debugger class>>morphicOpenOn:context:label:contents:fullView: (in category '*Morphic-opening') ----- morphicOpenOn: process context: context label: title contents: contentsStringOrNil fullView: full "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger." | errorWasInUIProcess debugger | ErrorRecursion ifTrue: [ "self assert: process == Project current uiProcess -- DOCUMENTATION ONLY" ErrorRecursion := false. ^ Project current handleFatalDrawingError: title]. [ErrorRecursion not & Preferences logDebuggerStackToFile ifTrue: [Smalltalk logSqueakError: title inContext: context]] on: Error do: [:ex | ex return: nil]. ErrorRecursion := true. errorWasInUIProcess := Project current spawnNewProcessIfThisIsUI: process. "Schedule debugging in deferred UI message because 1) If process is the current UI process, it is already broken. 2) If process is some other process, it must not execute UI code" Project current addDeferredUIMessage: [ debugger := self new process: process controller: nil context: context. full ifTrue: [debugger openFullNoSuspendLabel: title] ifFalse: [debugger openNotifierContents: contentsStringOrNil label: title]. debugger errorWasInUIProcess: errorWasInUIProcess. "Try drawing the debugger tool at least once to avoid freeze." + Project current world displayWorldSafely. - ActiveWorld displayWorldSafely. ErrorRecursion := false. ]. process suspend. ! Item was changed: ----- Method: HandMorph>>becomeActiveDuring: (in category 'initialization') ----- becomeActiveDuring: aBlock "Make the receiver the ActiveHand during the evaluation of aBlock." | priorHand | priorHand := ActiveHand. ActiveHand := self. ^ aBlock ensure: [ + "check to support project switching." + ActiveHand == self ifTrue: [ActiveHand := priorHand]].! - "nil check to support project switching." - ActiveHand ifNotNil: [ActiveHand := priorHand]].! Item was changed: ----- Method: MorphicEvent>>becomeActiveDuring: (in category 'initialize') ----- becomeActiveDuring: aBlock "Make the receiver the ActiveEvent during the evaluation of aBlock." | priorEvent | priorEvent := ActiveEvent. ActiveEvent := self. ^ aBlock ensure: [ + "check to support project switching." + ActiveEvent == self ifTrue: [ActiveEvent := priorEvent]].! - "nil check to support project switching." - ActiveEvent ifNotNil: [ActiveEvent := priorEvent]].! Item was changed: ----- Method: PasteUpMorph>>becomeActiveDuring: (in category 'initialization') ----- becomeActiveDuring: aBlock "Make the receiver the ActiveWorld during the evaluation of aBlock." | priorWorld | priorWorld := ActiveWorld. ActiveWorld := self. ^ aBlock ensure: [ + "check to support project switching." + ActiveWorld == self ifTrue: [ActiveWorld := priorWorld]].! - "nil check to support project switching." - ActiveWorld ifNotNil: [ActiveWorld := priorWorld]].! From commits at source.squeak.org Wed Aug 17 16:31:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 16:31:12 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.50.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.50.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.50 Author: mt Time: 17 August 2016, 6:31:01.259397 pm UUID: 21d3b6a7-7e33-264d-aca3-ccab213d784a Ancestors: Help-Squeak-Project-mt.49 Replace two TextDoIt instances with a TextURL (and 'code://' prefix) until we figure out a better way to invoke clickable text actions without disturbing the Morphic event dispatcher. =============== Diff against Help-Squeak-Project-mt.49 =============== Item was changed: ----- Method: SqueakProjectHelp class>>extendingTheSystem (in category 'pages') ----- extendingTheSystem + "This method was automatically generated. Edit it using:" + "SqueakProjectHelp edit: #extendingTheSystem" + ^(HelpTopic - ^HelpTopic title: 'Extending The System' + contents: + 'SqueakMap is an integrated catalog of external applications for Squeak. It is accessible from the "Apps" menu. This catalog does not host the projects, it merely documents the load scripts required to correctly bring them into the image. - icon: (HelpIcons iconNamed: #squeakIcon) - contents: 'SqueakMap is an integrated catalog of external applications for Squeak. It is accessible from the "Apps" menu. This catalog does not host the projects, it merely documents the load scripts required to correctly bring them into the image. Many SqueakMap packages use Installer, which defines several packages in its package-definitions protocol. Any of these can be loaded with an expression like the following: Installer new merge: #openGL Change #openGL to the selector name of the package you want to load. The latest version of that package and all of its prerequisites will be merged into the image. Merging a package is no different from loading it unless the package is already loaded, in which case it is upgraded to the latest version in a way that preserves any local changes you may already have made. --------------- This remainder of this workspace documents load-scripts for packages that are not documented in either SqueakMap or Installer. OCompletion "Provides source code completion as you type" (Installer ss project: ''OCompletion'') install: ''Ocompletion''. (Smalltalk at: #ECToolSet) register. (Smalltalk at: #ToolSet) default: (Smalltalk at: #ECToolSet). Omnibrowser "Including Refactoring engine" (Installer ss project: ''MetacelloRepository'') install: ''ConfigurationOfOmniBrowser''. ((Smalltalk at: #ConfigurationOfOmniBrowser) project perform: #lastVersion) load: #( Dev ). Pier CMS "Pier CMS: http://www.piercms.com" (Installer ss project: ''MetacelloRepository'') install: ''ConfigurationOfPier2''. (Smalltalk at: #ConfigurationOfPier2) load. (Installer lukas project: ''pier2'') install: ''Pier-Blog''. (Installer lukas project: ''pier2'') install: ''Pier-Book''. (Installer lukas project: ''pier2addons'') install: ''Pier-Setup''. (Smalltalk at: #PRDistribution) new register. Open Cobalt "http://opencobalt.org (Best to run this from an image in an open cobalt directory)" Installer ss project: ''TweakCore''; install: ''update''. [Installer ss project: ''TweakExtras''; install: ''update''] on: (Smalltalk at: #CUnsynchronizedModification) do: [:ex | ex resume]. Installer cobalt project: ''Tweak''; answer: ''Would you like to conserve memory at all costs?'' with: true; answer: ''Password for interactive VNC connections?'' with: ''cobalt''; answer: ''Would you like to add the RFBServer to the World open menu?'' with: true; install: ''update'' !! + ]style[(9 309 19 252 6 126 8 237 11 209 11 210 8 386 11 547)Rcode://SMLoaderPlus open;,,Rcode://ToolSet browseClass: Installer category: ''package-definitions'';,,i,,u,,bu,,bu,,bu,,bu,!!' readStream nextChunkText) + key: #extendingTheSystem! - ]style[(9 309 19 252 6 126 8 237 11 209 11 210 8 386 11 547)dSMLoaderPlus open;;,,d| newBrowser | - newBrowser := Browser new selectSystemCategory: ''Installer-Core''; selectClass: Installer; metaClassIndicated: false; selectMessageCategoryNamed: ''package-definitions''; selectMessageNamed: #openGL. - Browser openBrowserView: (newBrowser openMessageCatEditString: nil) label: ''External Package Definitions'';;,,i,,u,,bu,,bu,,bu,,bu,!!' readStream nextChunkText! From Marcel.Taeumel at hpi.de Wed Aug 17 16:32:51 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 17 16:33:36 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471450226342-4911578.post@n4.nabble.com> References: <1471445873540-4911565.post@n4.nabble.com> <1471448041769-4911572.post@n4.nabble.com> <1471450226342-4911578.post@n4.nabble.com> Message-ID: <1471451571107-4911582.post@n4.nabble.com> marcel.taeumel wrote > > Hannes Hirzel wrote >> To be more precise: >> >> The windows open but not in the current project. They open in the >> project from which I called the menu entry 'Squeak' -> 'Update >> Squeak'. >> >> On 8/17/16, marcel.taeumel < >> Marcel.Taeumel@ >> > wrote: >>> Hannes Hirzel wrote >>>> Hello Marcel >>>> >>>> Unfortunately it is not an improvement. It now does not work at all. >>>> >>>> And the links on the 'Welcome' page are no longer working either. >>>> >>>> --Hannes >>>> >>>> On 8/17/16, marcel.taeumel < >>> >>>> Marcel.Taeumel@ >>> >>>> > wrote: >>>>> Hannes Hirzel wrote >>>>>> A minor bug: >>>>>> >>>>>> If I open >>>>>> >>>>>> 'Help menu' -> 'Squeak Help' >>>>>> >>>>>> then choose 'The Project' -> 'Extending the system' >>>>>> >>>>>> and click on 'SqueakMap' >>>>>> >>>>>> the SqueakMap window opens _behind_ the 'Help window' >>>>>> >>>>>> ----- >>>>>> /home/user/sq5.1.beta/Squeak5.1beta-16420-32bit-r3397-All-in-One.app/Contents/Resources/Squeak5.1beta-16420-32bit.image >>>>>> Squeak5.1beta >>>>>> latest update: #16506 >>>>>> Current Change Set: Unnamed1 >>>>>> Image format 6521 (32 bit) >>>>>> -- >>>>>> >>>>>> --Hannes >>>>>> >>>>>> On 8/16/16, Fabio Niephaus < >>>>> >>>>>> lists@ >>>>> >>>>>> > wrote: >>>>>>> -- >>>>>>> >>>>>>> On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel < >>>>> >>>>>> hannes.hirzel@ >>>>> >>>>>> > wrote: >>>>>>> >>>>>>>> On 8/14/16, Fabio Niephaus < >>>>> >>>>>> lists@ >>>>> >>>>>> > wrote: >>>>>>>> > Here are the helper functions I came up with for the squeak.sh >>>>>>>> launcher >>>>>>>> to >>>>>>>> > ensure that the kernel is newer than 2.6.12 and that a >>>>>>>> squeak.conf >>>>>>>> exists: >>>>>>>> > >>>>>>>> https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe >>>>>>>> > >>>>>>>> > Best, >>>>>>>> > Fabio >>>>>>>> >>>>>>>> I added the calls to the two functions to helpers.sh >>>>>>>> >>>>>>>> It works but needs sudo permission which is normally not given. So >>>>>>>> some tweaking is needed. >>>>>>>> >>>>>>>> >>>>>>>> THIS DOES NOT WORK >>>>>>>> user8@user8-Latitude:~$ ./helpers.sh >>>>>>>> ./helpers.sh: line 17: \: command not found >>>>>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to >>>>>>>> create >>>>>>>> one? This operation requires sudo permissions. (y/N): y >>>>>>>> You may be asked to enter your password... >>>>>>>> ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: >>>>>>>> Permission >>>>>>>> denied >>>>>>>> Done! Please log out and log back in before you try again. >>>>>>>> user8@user8-Latitude:~$ >>>>>>>> >>>>>>>> THIS IS FINE >>>>>>>> sudo ./helpers.sh >>>>>>>> [sudo] password for user8: >>>>>>>> ./helpers.sh: line 17: \: command not found >>>>>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to >>>>>>>> create >>>>>>>> one? This operation requires sudo permissions. (y/N): y >>>>>>>> You may be asked to enter your password... >>>>>>>> Done! Please log out and log back in before you try again. >>>>>>>> user8@user8-Latitude:~$ >>>>>>>> >>>>>>> >>>>>>> Thanks for the feedback, Hannes. >>>>>>> I've already fixed and tested this on Linux (see [1]), but I forgot >>>>>>> to >>>>>>> update the gist which I just did. >>>>>>> The newer version now uses `sudo tee -a`. >>>>>>> >>>>>>> Thanks again, >>>>>>> Fabio >>>>>>> >>>>>>> [1] >>>>>>> https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> --Hannes >>>>>>>> >>>>>>>> > -- >>>>>>>> > >>>>>>>> > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel < >>>>> >>>>>> hannes.hirzel@ >>>>> >>>>>> > >>>>>>>> wrote: >>>>>>>> > >>>>>>>> >> For the case I reported >>>>>>>> >> >>>>>>>> >> uname -r >>>>>>>> >> >>>>>>>> >> gives >>>>>>>> >> >>>>>>>> >> 3.19.0-25-generic >>>>>>>> >> >>>>>>>> >> for the kernel version >>>>>>>> >> >>>>>>>> >> --Hannes >>>>>>>> >> >>>>>>>> >> On 8/14/16, Levente Uzonyi < >>>>> >>>>>> leves@.elte >>>>> >>>>>> > wrote: >>>>>>>> >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >>>>>>>> >> > >>>>>>>> >> >> >>>>>>>> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel < >>>>> >>>>>> hannes.hirzel@ >>>>> >>>>>> > >>>>>>>> >> >>> wrote: >>>>>>>> >> >>> >>>>>>>> >> >>> Hello Levente >>>>>>>> >> >>> >>>>>>>> >> >>> The following on did the job. The 64bit all-in-one runs >>>>>>>> fine >>>>>>>> on >>>>>>>> >> >>> Ubuntu >>>>>>>> >> >>> 14.04.1. >>>>>>>> >> >> >>>>>>>> >> >> I guess an obvious question here is why on earth ubuntu is >>>>>>>> >> >> using >>>>>>>> >> >> such >>>>>>>> >> >> an >>>>>>>> >> >> old kernel. Raspbian (based on debian and so very >>>>>>>> conservative) >>>>>>>> got >>>>>>>> >> >> past >>>>>>>> >> >> that point at least 18 months ago. >>>>>>>> >> > >>>>>>>> >> > It doesn't. 14.04 uses 3.13 by default, but you can install >>>>>>>> 4.2 >>>>>>>> >> > o >>>>>>>> >> > 4.4 >>>>>>>> >> > if >>>>>>>> >> > you want to. >>>>>>>> >> > >>>>>>>> >> > Levente >>>>>>>> >> > >>>>>>>> >> >> >>>>>>>> >> >> >>>>>>>> >> >> tim >>>>>>>> >> >> -- >>>>>>>> >> >> tim Rowledge; >>>>> >>>>>> tim@ >>>>> >>>>>> ; http://www.rowledge.org/tim >>>>>>>> >> >> Strange OpCodes: BBL: Branch on Burned out Light >>>>>>>> >> >> >>>>>>>> >> >> >>>>>>>> >> >> >>>>>>>> >> >> >>>>>>>> >> > >>>>>>>> >> > >>>>>>>> >> >>>>>>>> >> >>>>>>>> > >>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>>> Hi Hannes, >>>>> >>>>> should work now: >>>>> http://forum.world.st/The-Trunk-Collections-mt-712-mcz-tp4911564.html >>>>> >>>>> Best, >>>>> Marcel >>>>> >>>>> >>>>> >>>>> -- >>>>> View this message in context: >>>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911565.html >>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>>> >>>>> >>> >>> Hi Hannes, >>> >>> there was no change to the links on the welcome page. Those are TextURL >>> and >>> no TextDoit. >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: >>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911572.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>> >>> > Oooops... I'm on it. Thanks for the bug report. > > Best, > Marcel Hi Hannes, please update, switch between two projects back-and-forth. Re-open those help browsers. It should work now. :-) Sorry for those inconveniences..... Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911582.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From hannes.hirzel at gmail.com Wed Aug 17 16:54:16 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 17 16:54:20 2016 Subject: [squeak-dev] Testing JSON in Squeak 5.1beta : 1 failure Message-ID: testing JSON (Squeak 5.1beta-16510) MCHttpRepository location: 'http://www.squeaksource.com/JSON' user: '' password: '' Version: Name: JSON-tonyg.37 Author: tonyg Time: 29 April 2016, 11:47:17.129 am UUID: 63e50a8f-d436-4128-952c-3c0c8c12e120 16 out of 17 tests pass, 1 failure in testStreaming | j | j := Json new stream: 'truefalsetrue[]{}1.234 5.678"A""B"nullnull' readStream. self assert: j readAny equals: true. self assert: j readAny equals: false. self assert: j readAny equals: true. self assert: j readAny equals: #(). self assert: j readAny equals: Dictionary new. "<<<<<<< FAILURE HERE " self assert: j readAny equals: 1.234. self assert: j readAny equals: 5.678. self assert: j readAny equals: 'A'. self assert: j readAny equals: 'B'. self assert: j readAny equals: nil. self assert: j readAny equals: nil. --Hannes From commits at source.squeak.org Wed Aug 17 17:03:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 17:03:08 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.161.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.161.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.161 Author: mt Time: 17 August 2016, 7:02:57.914774 pm UUID: 4d539a77-098d-8d44-a375-7f3f36618ac9 Ancestors: ReleaseBuilder-mt.160 Only open the welcome workspaces on the first start to avoid interference with the file system on Travis. =============== Diff against ReleaseBuilder-mt.160 =============== Item was changed: ----- Method: ReleaseBuilder class>>configureDesktop (in category 'scripts') ----- configureDesktop "Open tools, multimedia content, etc." self setDisplayExtent: 1024 @ 768. self setProjectBackground: Color darkGray. (UserInterfaceTheme named: 'Squeak') apply. self deleteAllWindows. "Replace docking bar instance in case its code has changed." Project current removeMainDockingBar. + TheWorldMainDockingBar updateInstances.! - TheWorldMainDockingBar updateInstances. - - self openWelcomeWorkspaces.! Item was changed: ----- Method: ReleaseBuilder class>>prepareEnvironment (in category 'preparing') ----- prepareEnvironment "Prepare everything that should be done for a new image build. Clear caches, passwords, etc." "ReleaseBuilder prepareNewBuild" self checkCurrentProjects; clearCaches; configureTools; setPreferences; configureDesktop. + DeferredTask := [ + self openWelcomeWorkspaces. + PreferenceWizardMorph new openInWorld]. - DeferredTask := [PreferenceWizardMorph new openInWorld]. "If you save-and-quit the image after calling #prepareEnvironment, ensure that the next image startup will be fast." Project current world doOneCycle.! From hannes.hirzel at gmail.com Wed Aug 17 17:08:01 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 17 17:08:04 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Feature Freeze -- Trunk closed for new features; only bug fixes or text updates In-Reply-To: <1471451571107-4911582.post@n4.nabble.com> References: <1471445873540-4911565.post@n4.nabble.com> <1471448041769-4911572.post@n4.nabble.com> <1471450226342-4911578.post@n4.nabble.com> <1471451571107-4911582.post@n4.nabble.com> Message-ID: It works fine now, thank you, Marcel. Some suggestions for more hyperlinks to open tools entry 'Tools' 'Basic Development Tools' Workspace, Browser, File List, Method Finder, Change Sorter 'Transcript' 'Transcript Window' have a link behind 'Workspace' 'Workspace' 'Open a workspace' 1. have a link behind 'Workspace' 2. Have the proper short cut mentioned for Linux (ctrl K) --Hannes On 8/17/16, marcel.taeumel wrote: > marcel.taeumel wrote >> >> Hannes Hirzel wrote >>> To be more precise: >>> >>> The windows open but not in the current project. They open in the >>> project from which I called the menu entry 'Squeak' -> 'Update >>> Squeak'. >>> >>> On 8/17/16, marcel.taeumel < > >>> Marcel.Taeumel@ > >>> > wrote: >>>> Hannes Hirzel wrote >>>>> Hello Marcel >>>>> >>>>> Unfortunately it is not an improvement. It now does not work at all. >>>>> >>>>> And the links on the 'Welcome' page are no longer working either. >>>>> >>>>> --Hannes >>>>> >>>>> On 8/17/16, marcel.taeumel < >>>> >>>>> Marcel.Taeumel@ >>>> >>>>> > wrote: >>>>>> Hannes Hirzel wrote >>>>>>> A minor bug: >>>>>>> >>>>>>> If I open >>>>>>> >>>>>>> 'Help menu' -> 'Squeak Help' >>>>>>> >>>>>>> then choose 'The Project' -> 'Extending the system' >>>>>>> >>>>>>> and click on 'SqueakMap' >>>>>>> >>>>>>> the SqueakMap window opens _behind_ the 'Help window' >>>>>>> >>>>>>> ----- >>>>>>> /home/user/sq5.1.beta/Squeak5.1beta-16420-32bit-r3397-All-in-One.app/Contents/Resources/Squeak5.1beta-16420-32bit.image >>>>>>> Squeak5.1beta >>>>>>> latest update: #16506 >>>>>>> Current Change Set: Unnamed1 >>>>>>> Image format 6521 (32 bit) >>>>>>> -- >>>>>>> >>>>>>> --Hannes >>>>>>> >>>>>>> On 8/16/16, Fabio Niephaus < >>>>>> >>>>>>> lists@ >>>>>> >>>>>>> > wrote: >>>>>>>> -- >>>>>>>> >>>>>>>> On Tue, Aug 16, 2016 at 2:07 PM H. Hirzel < >>>>>> >>>>>>> hannes.hirzel@ >>>>>> >>>>>>> > wrote: >>>>>>>> >>>>>>>>> On 8/14/16, Fabio Niephaus < >>>>>> >>>>>>> lists@ >>>>>> >>>>>>> > wrote: >>>>>>>>> > Here are the helper functions I came up with for the squeak.sh >>>>>>>>> launcher >>>>>>>>> to >>>>>>>>> > ensure that the kernel is newer than 2.6.12 and that a >>>>>>>>> squeak.conf >>>>>>>>> exists: >>>>>>>>> > >>>>>>>>> https://gist.github.com/fniephaus/84dc1e065b2694cf9beafed5920f8cfe >>>>>>>>> > >>>>>>>>> > Best, >>>>>>>>> > Fabio >>>>>>>>> >>>>>>>>> I added the calls to the two functions to helpers.sh >>>>>>>>> >>>>>>>>> It works but needs sudo permission which is normally not given. So >>>>>>>>> some tweaking is needed. >>>>>>>>> >>>>>>>>> >>>>>>>>> THIS DOES NOT WORK >>>>>>>>> user8@user8-Latitude:~$ ./helpers.sh >>>>>>>>> ./helpers.sh: line 17: \: command not found >>>>>>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to >>>>>>>>> create >>>>>>>>> one? This operation requires sudo permissions. (y/N): y >>>>>>>>> You may be asked to enter your password... >>>>>>>>> ./helpers.sh: line 32: /etc/security/limits.d/squeak.conf: >>>>>>>>> Permission >>>>>>>>> denied >>>>>>>>> Done! Please log out and log back in before you try again. >>>>>>>>> user8@user8-Latitude:~$ >>>>>>>>> >>>>>>>>> THIS IS FINE >>>>>>>>> sudo ./helpers.sh >>>>>>>>> [sudo] password for user8: >>>>>>>>> ./helpers.sh: line 17: \: command not found >>>>>>>>> /etc/security/limits.d/squeak.conf is missing. Do you want to >>>>>>>>> create >>>>>>>>> one? This operation requires sudo permissions. (y/N): y >>>>>>>>> You may be asked to enter your password... >>>>>>>>> Done! Please log out and log back in before you try again. >>>>>>>>> user8@user8-Latitude:~$ >>>>>>>>> >>>>>>>> >>>>>>>> Thanks for the feedback, Hannes. >>>>>>>> I've already fixed and tested this on Linux (see [1]), but I forgot >>>>>>>> to >>>>>>>> update the gist which I just did. >>>>>>>> The newer version now uses `sudo tee -a`. >>>>>>>> >>>>>>>> Thanks again, >>>>>>>> Fabio >>>>>>>> >>>>>>>> [1] >>>>>>>> https://github.com/squeak-smalltalk/squeak-app/commit/4e83cc33b65f4222c1fed778d200d578af5d941a >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> --Hannes >>>>>>>>> >>>>>>>>> > -- >>>>>>>>> > >>>>>>>>> > On Sun, Aug 14, 2016 at 11:03 PM H. Hirzel < >>>>>> >>>>>>> hannes.hirzel@ >>>>>> >>>>>>> > >>>>>>>>> wrote: >>>>>>>>> > >>>>>>>>> >> For the case I reported >>>>>>>>> >> >>>>>>>>> >> uname -r >>>>>>>>> >> >>>>>>>>> >> gives >>>>>>>>> >> >>>>>>>>> >> 3.19.0-25-generic >>>>>>>>> >> >>>>>>>>> >> for the kernel version >>>>>>>>> >> >>>>>>>>> >> --Hannes >>>>>>>>> >> >>>>>>>>> >> On 8/14/16, Levente Uzonyi < >>>>>> >>>>>>> leves@.elte >>>>>> >>>>>>> > wrote: >>>>>>>>> >> > On Sun, 14 Aug 2016, tim Rowledge wrote: >>>>>>>>> >> > >>>>>>>>> >> >> >>>>>>>>> >> >>> On 14-08-2016, at 12:43 AM, H. Hirzel < >>>>>> >>>>>>> hannes.hirzel@ >>>>>> >>>>>>> > >>>>>>>>> >> >>> wrote: >>>>>>>>> >> >>> >>>>>>>>> >> >>> Hello Levente >>>>>>>>> >> >>> >>>>>>>>> >> >>> The following on did the job. The 64bit all-in-one runs >>>>>>>>> fine >>>>>>>>> on >>>>>>>>> >> >>> Ubuntu >>>>>>>>> >> >>> 14.04.1. >>>>>>>>> >> >> >>>>>>>>> >> >> I guess an obvious question here is why on earth ubuntu is >>>>>>>>> >> >> using >>>>>>>>> >> >> such >>>>>>>>> >> >> an >>>>>>>>> >> >> old kernel. Raspbian (based on debian and so very >>>>>>>>> conservative) >>>>>>>>> got >>>>>>>>> >> >> past >>>>>>>>> >> >> that point at least 18 months ago. >>>>>>>>> >> > >>>>>>>>> >> > It doesn't. 14.04 uses 3.13 by default, but you can install >>>>>>>>> 4.2 >>>>>>>>> >> > o >>>>>>>>> >> > 4.4 >>>>>>>>> >> > if >>>>>>>>> >> > you want to. >>>>>>>>> >> > >>>>>>>>> >> > Levente >>>>>>>>> >> > >>>>>>>>> >> >> >>>>>>>>> >> >> >>>>>>>>> >> >> tim >>>>>>>>> >> >> -- >>>>>>>>> >> >> tim Rowledge; >>>>>> >>>>>>> tim@ >>>>>> >>>>>>> ; http://www.rowledge.org/tim >>>>>>>>> >> >> Strange OpCodes: BBL: Branch on Burned out Light >>>>>>>>> >> >> >>>>>>>>> >> >> >>>>>>>>> >> >> >>>>>>>>> >> >> >>>>>>>>> >> > >>>>>>>>> >> > >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> > >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>> >>>>>> Hi Hannes, >>>>>> >>>>>> should work now: >>>>>> http://forum.world.st/The-Trunk-Collections-mt-712-mcz-tp4911564.html >>>>>> >>>>>> Best, >>>>>> Marcel >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> View this message in context: >>>>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911565.html >>>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>>>> >>>>>> >>>> >>>> Hi Hannes, >>>> >>>> there was no change to the links on the welcome page. Those are TextURL >>>> and >>>> no TextDoit. >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911572.html >>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>> >>>> >> Oooops... I'm on it. Thanks for the bug report. >> >> Best, >> Marcel > > Hi Hannes, > > please update, switch between two projects back-and-forth. Re-open those > help browsers. It should work now. :-) Sorry for those inconveniences..... > > Best, > Marcel > > > > -- > View this message in context: > http://forum.world.st/ANN-Squeak-5-1-Feature-Freeze-Trunk-closed-for-new-features-only-bug-fixes-or-text-updates-tp4909004p4911582.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From lists at fniephaus.com Wed Aug 17 17:14:02 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Aug 17 17:14:15 2016 Subject: [squeak-dev] Testing JSON in Squeak 5.1beta : 1 failure In-Reply-To: References: Message-ID: -- On Wed, Aug 17, 2016 at 6:54 PM H. Hirzel wrote: > testing JSON (Squeak 5.1beta-16510) > > MCHttpRepository > location: 'http://www.squeaksource.com/JSON' > user: '' > password: '' > > Version: > > Name: JSON-tonyg.37 > Author: tonyg > Time: 29 April 2016, 11:47:17.129 am > UUID: 63e50a8f-d436-4128-952c-3c0c8c12e120 > > > 16 out of 17 tests pass, 1 failure in > > testStreaming > | j | > j := Json new stream: 'truefalsetrue[]{}1.234 5.678"A""B"nullnull' > readStream. > self assert: j readAny equals: true. > self assert: j readAny equals: false. > self assert: j readAny equals: true. > self assert: j readAny equals: #(). > self assert: j readAny equals: Dictionary new. "<<<<<<< > FAILURE HERE " > I'm not sure if it's a good idea to test if this equals a new dictionary here. Changing the line like this makes the test pass: self assert: j readAny isDictionary. `j readAny` returns a JsonObject which directly inherits from Dictionary. Best, Fabio > self assert: j readAny equals: 1.234. > self assert: j readAny equals: 5.678. > self assert: j readAny equals: 'A'. > self assert: j readAny equals: 'B'. > self assert: j readAny equals: nil. > self assert: j readAny equals: nil. > > --Hannes > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/33dc941c/attachment-0001.htm From lists at fniephaus.com Wed Aug 17 17:21:51 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Aug 17 17:22:05 2016 Subject: [squeak-dev] Testing JSON in Squeak 5.1beta : 1 failure In-Reply-To: References: Message-ID: On Wed, Aug 17, 2016 at 7:14 PM Fabio Niephaus wrote: > > -- > > On Wed, Aug 17, 2016 at 6:54 PM H. Hirzel wrote: > >> testing JSON (Squeak 5.1beta-16510) >> >> MCHttpRepository >> location: 'http://www.squeaksource.com/JSON' >> user: '' >> password: '' >> >> Version: >> >> Name: JSON-tonyg.37 >> Author: tonyg >> Time: 29 April 2016, 11:47:17.129 am >> UUID: 63e50a8f-d436-4128-952c-3c0c8c12e120 >> >> >> 16 out of 17 tests pass, 1 failure in >> >> testStreaming >> | j | >> j := Json new stream: 'truefalsetrue[]{}1.234 >> 5.678"A""B"nullnull' readStream. >> self assert: j readAny equals: true. >> self assert: j readAny equals: false. >> self assert: j readAny equals: true. >> self assert: j readAny equals: #(). >> self assert: j readAny equals: Dictionary new. "<<<<<<< >> FAILURE HERE " >> > > I'm not sure if it's a good idea to test if this equals a new dictionary > here. > Changing the line like this makes the test pass: > > self assert: j readAny isDictionary. > > `j readAny` returns a JsonObject which directly inherits from Dictionary. > > Best, > Fabio > Turns out Dictionary>>= has changed and compares "species" now. > > > >> self assert: j readAny equals: 1.234. >> self assert: j readAny equals: 5.678. >> self assert: j readAny equals: 'A'. >> self assert: j readAny equals: 'B'. >> self assert: j readAny equals: nil. >> self assert: j readAny equals: nil. >> >> --Hannes >> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/c1add84d/attachment.htm From hannes.hirzel at gmail.com Wed Aug 17 17:23:03 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 17 17:23:06 2016 Subject: [squeak-dev] Testing JSON in Squeak 5.1beta : 1 failure In-Reply-To: References: Message-ID: Your suggestion, Fabio, to change the test makes sense to me. May I ask you to create a new version on http://www.squeaksource.com/JSON and to create a SqueakMap entry for 5.1 which loads that new version? --Hannes On 8/17/16, Fabio Niephaus wrote: > -- > > On Wed, Aug 17, 2016 at 6:54 PM H. Hirzel wrote: > >> testing JSON (Squeak 5.1beta-16510) >> >> MCHttpRepository >> location: 'http://www.squeaksource.com/JSON' >> user: '' >> password: '' >> >> Version: >> >> Name: JSON-tonyg.37 >> Author: tonyg >> Time: 29 April 2016, 11:47:17.129 am >> UUID: 63e50a8f-d436-4128-952c-3c0c8c12e120 >> >> >> 16 out of 17 tests pass, 1 failure in >> >> testStreaming >> | j | >> j := Json new stream: 'truefalsetrue[]{}1.234 >> 5.678"A""B"nullnull' >> readStream. >> self assert: j readAny equals: true. >> self assert: j readAny equals: false. >> self assert: j readAny equals: true. >> self assert: j readAny equals: #(). >> self assert: j readAny equals: Dictionary new. "<<<<<<< >> FAILURE HERE " >> > > I'm not sure if it's a good idea to test if this equals a new dictionary > here. > Changing the line like this makes the test pass: > > self assert: j readAny isDictionary. > > `j readAny` returns a JsonObject which directly inherits from Dictionary. > > Best, > Fabio > > > >> self assert: j readAny equals: 1.234. >> self assert: j readAny equals: 5.678. >> self assert: j readAny equals: 'A'. >> self assert: j readAny equals: 'B'. >> self assert: j readAny equals: nil. >> self assert: j readAny equals: nil. >> >> --Hannes >> >> > From lists at fniephaus.com Wed Aug 17 17:37:10 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Aug 17 17:37:24 2016 Subject: [squeak-dev] Testing JSON in Squeak 5.1beta : 1 failure In-Reply-To: References: Message-ID: On Wed, Aug 17, 2016 at 7:23 PM H. Hirzel wrote: > Your suggestion, Fabio, to change the test makes sense to me. > > May I ask you to create a new version on http://www.squeaksource.com/JSON > and to create a SqueakMap entry for 5.1 which loads that new version? > > --Hannes > I've pushed a new version: Name: JSON-FabN.38 Author: FabN Time: 17 August 2016, 7:32:28.37 pm UUID: 9b27fd7e-4754-436d-b6f5-2348b49f5b63 Ancestors: JSON-tonyg.37 Unfortunately, I don't have permissions to update the SqueakMap entry. Maybe Tony can take care of this? Best, Fabio > > On 8/17/16, Fabio Niephaus wrote: > > -- > > > > On Wed, Aug 17, 2016 at 6:54 PM H. Hirzel > wrote: > > > >> testing JSON (Squeak 5.1beta-16510) > >> > >> MCHttpRepository > >> location: 'http://www.squeaksource.com/JSON' > >> user: '' > >> password: '' > >> > >> Version: > >> > >> Name: JSON-tonyg.37 > >> Author: tonyg > >> Time: 29 April 2016, 11:47:17.129 am > >> UUID: 63e50a8f-d436-4128-952c-3c0c8c12e120 > >> > >> > >> 16 out of 17 tests pass, 1 failure in > >> > >> testStreaming > >> | j | > >> j := Json new stream: 'truefalsetrue[]{}1.234 > >> 5.678"A""B"nullnull' > >> readStream. > >> self assert: j readAny equals: true. > >> self assert: j readAny equals: false. > >> self assert: j readAny equals: true. > >> self assert: j readAny equals: #(). > >> self assert: j readAny equals: Dictionary new. "<<<<<<< > >> FAILURE HERE " > >> > > > > I'm not sure if it's a good idea to test if this equals a new dictionary > > here. > > Changing the line like this makes the test pass: > > > > self assert: j readAny isDictionary. > > > > `j readAny` returns a JsonObject which directly inherits from Dictionary. > > > > Best, > > Fabio > > > > > > > >> self assert: j readAny equals: 1.234. > >> self assert: j readAny equals: 5.678. > >> self assert: j readAny equals: 'A'. > >> self assert: j readAny equals: 'B'. > >> self assert: j readAny equals: nil. > >> self assert: j readAny equals: nil. > >> > >> --Hannes > >> > >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/41337a46/attachment.htm From tonyg at ccs.neu.edu Wed Aug 17 18:22:41 2016 From: tonyg at ccs.neu.edu (Tony Garnock-Jones) Date: Wed Aug 17 18:22:46 2016 Subject: [squeak-dev] Testing JSON in Squeak 5.1beta : 1 failure In-Reply-To: References: Message-ID: Hi Fabio, Hannes, On 08/17/2016 01:37 PM, Fabio Niephaus wrote: > > I'm not sure if it's a good idea to test if this equals a new > dictionary > > here. And yet, just checking that it is a dictionary isn't quite right either. I've changed it now to compare against JsonObject new. (It feels weird to me that Dictionary>>equals: should compare species :-/ ) I'll update SqueakMap per the instructions Hannes sent me. Thanks! Tony From lists at fniephaus.com Wed Aug 17 18:28:01 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Aug 17 18:28:14 2016 Subject: [squeak-dev] Testing JSON in Squeak 5.1beta : 1 failure In-Reply-To: References: Message-ID: Thank you, Tony! On Wed, 17 Aug 2016 at 20:22, Tony Garnock-Jones wrote: > Hi Fabio, Hannes, > > On 08/17/2016 01:37 PM, Fabio Niephaus wrote: > > > I'm not sure if it's a good idea to test if this equals a new > > dictionary > > > here. > > And yet, just checking that it is a dictionary isn't quite right either. > I've changed it now to compare against JsonObject new. > > (It feels weird to me that Dictionary>>equals: should compare species :-/ ) > > I'll update SqueakMap per the instructions Hannes sent me. > > Thanks! > > Tony > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/3200f9aa/attachment.htm From leves at caesar.elte.hu Wed Aug 17 18:36:25 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 17 18:36:27 2016 Subject: [squeak-dev] Testing JSON in Squeak 5.1beta : 1 failure In-Reply-To: References: Message-ID: You guys may find the improvments we have done over the years useful: http://leves.web.elte.hu/squeak/JSON-ul.45.mcz Levente On Wed, 17 Aug 2016, Tony Garnock-Jones wrote: > Hi Fabio, Hannes, > > On 08/17/2016 01:37 PM, Fabio Niephaus wrote: >> > I'm not sure if it's a good idea to test if this equals a new >> dictionary >> > here. > > And yet, just checking that it is a dictionary isn't quite right either. > I've changed it now to compare against JsonObject new. > > (It feels weird to me that Dictionary>>equals: should compare species :-/ ) > > I'll update SqueakMap per the instructions Hannes sent me. > > Thanks! > > Tony > > From lists at fniephaus.com Wed Aug 17 19:50:19 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Aug 17 19:50:33 2016 Subject: [squeak-dev] Re: [Vm-dev] VM Maker: VMMaker.oscog-cb.1919.mcz In-Reply-To: References: <57b470e1.2637ed0a.99c78.a5dbSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: On Wed, Aug 17, 2016 at 4:41 PM Eliot Miranda wrote: > I will generate and commit sources today. If possible we should use the > resulting VMs in the 5.1 release. We have until early next week to test > then harshly and see if they stand up to abuse ;-) > So, shall we give this one a try then? https://bintray.com/opensmalltalk/vm/cog/201608171728#files Fabio > > _,,,^..^,,,_ (phone) > > On Aug 17, 2016, at 7:27 AM, Cl?ment Bera wrote: > > With that commit the VM is stable again. > > On Wed, Aug 17, 2016 at 4:11 PM, wrote: > >> >> ClementBera uploaded a new version of VMMaker to project VM Maker: >> http://source.squeak.org/VMMaker/VMMaker.oscog-cb.1919.mcz >> >> ==================== Summary ==================== >> >> Name: VMMaker.oscog-cb.1919 >> Author: cb >> Time: 17 August 2016, 4:10:53.445475 pm >> UUID: 00a8dd2a-bc8d-4552-b400-be781c8aabec >> Ancestors: VMMaker.oscog-cb.1918 >> >> fixed bug in scanner related to twoPath methods >> >> =============== Diff against VMMaker.oscog-cb.1918 =============== >> >> Item was changed: >> ----- Method: StackToRegisterMappingCogit>>compileFrameBuild (in >> category 'compile abstract instructions') ----- >> compileFrameBuild >> "Build a frame for a CogMethod activation. See CoInterpreter >> class>>initializeFrameIndices. >> Override to push the register receiver and register arguments, >> if any." >> self cppIf: IMMUTABILITY ifTrue: >> [useTwoPaths ifTrue: >> [self compileTwoPathFrameBuild. >> ^self]]. >> needsFrame ifFalse: >> [useTwoPaths ifTrue: >> [self compileTwoPathFramelessInit]. >> self initSimStackForFramelessMethod: initialPC. >> ^self]. >> + self deny: useTwoPaths. >> self genPushRegisterArgs. >> super compileFrameBuild. >> self initSimStackForFramefulMethod: initialPC! >> >> Item was changed: >> ----- Method: StackToRegisterMappingCogit>>scanMethod (in category >> 'compile abstract instructions') ----- >> scanMethod >> "Scan the method (and all embedded blocks) to determine >> - what the last bytecode is; extra bytes at the end of a >> method are used to encode things like source pointers or temp names >> - if the method needs a frame or not >> - what are the targets of any backward branches. >> - how many blocks it creates >> Answer the block count or on error a negative error code" >> | latestContinuation nExts descriptor pc numBlocks distance >> targetPC framelessStackDelta seenInstVarStore | >> >> needsFrame := useTwoPaths := seenInstVarStore := false. >> self maybeInitNumFixups. >> self maybeInitNumCounters. >> prevBCDescriptor := nil. >> NewspeakVM ifTrue: >> [numIRCs := 0]. >> (primitiveIndex > 0 >> and: [coInterpreter isQuickPrimitiveIndex: primitiveIndex]) >> ifTrue: >> [^0]. >> pc := latestContinuation := initialPC. >> numBlocks := framelessStackDelta := nExts := extA := extB := 0. >> [pc <= endPC] whileTrue: >> [byte0 := (objectMemory fetchByte: pc ofObject: >> methodObj) + bytecodeSetOffset. >> descriptor := self generatorAt: byte0. >> descriptor isExtension ifTrue: >> [descriptor opcode = Nop ifTrue: "unknown >> bytecode tag; see Cogit class>>#generatorTableFrom:" >> [^EncounteredUnknownBytecode]. >> self loadSubsequentBytesForDescriptor: >> descriptor at: pc. >> self perform: descriptor generator]. >> (descriptor isReturn >> and: [pc >= latestContinuation]) ifTrue: >> [endPC := pc]. >> >> needsFrame ifFalse: >> [(descriptor needsFrameFunction isNil >> or: [self perform: descriptor >> needsFrameFunction with: framelessStackDelta]) >> ifTrue: >> ["With immutability we >> win simply by avoiding a frame build if the receiver is young and not >> immutable." >> self cppIf: IMMUTABILITY >> ifTrue: >> [descriptor is1ByteInstVarStore >> >> ifTrue: [useTwoPaths := true] >> >> ifFalse: [needsFrame := true. useTwoPaths := false]] >> + ifFalse: >> [needsFrame := true. useTwoPaths := false]] >> - ifFalse: >> [needsFrame := true]] >> ifFalse: >> [framelessStackDelta := >> framelessStackDelta + descriptor stackDelta. >> "Without immutability we >> win if there are two or more stores and the receiver is new." >> self cppIf: IMMUTABILITY >> ifTrue: [] >> ifFalse: >> >> [descriptor is1ByteInstVarStore ifTrue: >> >> [seenInstVarStore >> >> ifTrue: [useTwoPaths := true] >> >> ifFalse: [seenInstVarStore := true]]]]]. >> >> descriptor isBranch ifTrue: >> [distance := self spanFor: descriptor at: pc >> exts: nExts in: methodObj. >> targetPC := pc + descriptor numBytes + distance. >> (self isBackwardBranch: descriptor at: pc exts: >> nExts in: methodObj) >> ifTrue: [self initializeFixupAt: targetPC >> - initialPC] >> ifFalse: >> [latestContinuation := >> latestContinuation max: targetPC. >> self maybeCountFixup. >> self maybeCountCounter]]. >> descriptor isBlockCreation ifTrue: >> [numBlocks := numBlocks + 1. >> distance := self spanFor: descriptor at: pc >> exts: nExts in: methodObj. >> targetPC := pc + descriptor numBytes + distance. >> latestContinuation := latestContinuation max: >> targetPC. >> self maybeCountFixup]. >> >> NewspeakVM ifTrue: >> [descriptor hasIRC ifTrue: >> [numIRCs := numIRCs + 1]]. >> pc := pc + descriptor numBytes. >> descriptor isExtension >> ifTrue: [nExts := nExts + 1] >> ifFalse: [nExts := extA := extB := 0]. >> prevBCDescriptor := descriptor]. >> ^numBlocks! >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/135f32a4/attachment.htm From commits at source.squeak.org Wed Aug 17 20:04:15 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 20:04:17 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.76.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.76.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.76 Author: mt Time: 17 August 2016, 10:04:08.954 pm UUID: c5d085c7-a020-c54e-afea-2fcc968ec216 Ancestors: PreferenceBrowser-mt.75 Also detect low-performance for SqueakJS in Preference Wizard. Fixes some layout issues there. =============== Diff against PreferenceBrowser-mt.75 =============== Item was changed: ----- Method: PreferenceWizardMorph>>adjustSettingsForLowPerformance (in category 'actions') ----- adjustSettingsForLowPerformance + self updateLowPerformanceLabel: 'Please wait, optimizing performance...' translated. + self refreshWorld. + self stateGradients "flat look" ifFalse: [self toggleGradients]. self stateBlinkingCursor ifTrue: [self toggleBlinkingCursor]. self stateFastDrag ifFalse: [self toggleFastDrag]. self stateSoftShadows ifTrue: [self toggleSoftShadows]. self stateHardShadows ifTrue: [self toggleHardShadows]. self stateRoundedWindowLook ifTrue: [self toggleRoundedWindowLook]. self stateRoundedButtonLook ifTrue: [self toggleRoundedButtonLook]. self stateAttachToolsToMouse ifTrue: [self toggleAttachToolsToMouse]. self stateToolAndMenuIcons ifTrue: [self toggleToolAndMenuIcons]. + self stateSmartHorizontalSplitters ifTrue: [self toggleSmartHorizontalSplitters]. + self stateSmartVerticalSplitters ifTrue: [self toggleSmartVerticalSplitters]. + + PluggableListMorph highlightHoveredRow: false; filterableLists: false. + TheWorldMainDockingBar showSecondsInClock: false. + Preferences disable: #balloonHelpInMessageLists. + + "Set simple background." ActiveWorld setAsBackground: MorphicProject defaultFill. previewWorld fillStyle: ActiveWorld fillStyle. + + "Done." + self updateLowPerformanceLabel: 'Settings were adjusted for optimal performance.' translated. ! Item was changed: ----- Method: PreferenceWizardMorph>>hasLowPerformance (in category 'testing') ----- hasLowPerformance "If the wizard is started on a machine with low performance, the wizard will change some settings automatically on startup." + ^ (Smalltalk platformSubtype beginsWith: 'arm') "Raspberry PI" + or: [Smalltalk platformName = 'Web'] "SqueakJS"! - ^ Smalltalk platformSubtype beginsWith: 'arm'! Item was changed: ----- Method: PreferenceWizardMorph>>initializeForLowPerformance (in category 'initialization') ----- initializeForLowPerformance + lowPerformanceMorph := TextMorph new lock.! - lowPerformanceMorph := ('Settings were adjusted for low performance.' translated asText - addAttribute: (TextColor color: (Color gray: 0.7)); - addAttribute: (TextFontReference toFont: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9)); - yourself) asMorph lock. - - lowPerformanceMorph layoutFrame: (LayoutFrame fractions: (1 @ 1 corner: 1 @ 1) offsets: (lowPerformanceMorph fullBounds width negated @ lowPerformanceMorph fullBounds height negated corner: 20 @ 20 "Into margins")). - - self hasLowPerformance ifTrue: [self adjustSettingsForLowPerformance].! Item was removed: - ----- Method: PreferenceWizardMorph>>intoWorld: (in category 'initialization') ----- - intoWorld: world - - super intoWorld: world. - - self bounds: world bounds. - - self fullBounds. - self updateWindowBounds. - - world activeHand - newKeyboardFocus: self; - newMouseFocus: self. - - self showWelcome.! Item was added: + ----- Method: PreferenceWizardMorph>>openInWorld (in category 'initialization') ----- + openInWorld + + super openInWorld. + + self step. + + self world activeHand + newKeyboardFocus: self; + newMouseFocus: self. + + self showWelcome.! Item was added: + ----- Method: PreferenceWizardMorph>>refreshWorld (in category 'initialization') ----- + refreshWorld + + self world layoutChanged. "To be really sure to update docking bars..." + self world fullBounds. "Avoid flickering..." + self world doOneCycle.! Item was changed: ----- Method: PreferenceWizardMorph>>showWelcome (in category 'actions') ----- showWelcome titleMorph layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0.65) offsets: (0 @0 corner: 0@0)). isFullScreen := false. self height: titleMorph fullBounds height * 4. + - self step. - self fullBounds. - self step. - controlMorph hide. previewWorld hide. buttonRowMorph hide. titleMorph show. startButton show. skipButton show. self hasLowPerformance ifFalse: [lowPerformanceMorph hide] ifTrue: [lowPerformanceMorph show]. + self hasLowPerformance + ifTrue: [Cursor wait showWhile: [self adjustSettingsForLowPerformance]]. + - self world fullBounds. self refreshWorld. ! Item was added: + ----- Method: PreferenceWizardMorph>>updateLowPerformanceLabel: (in category 'layout') ----- + updateLowPerformanceLabel: string + + lowPerformanceMorph contentsAsIs: (string asText + addAttribute: (TextColor color: (Color gray: 0.7)); + addAttribute: (TextFontReference toFont: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9))). + + lowPerformanceMorph layoutFrame: (LayoutFrame fractions: (1 @ 1 corner: 1 @ 1) offsets: (lowPerformanceMorph fullBounds width negated @ lowPerformanceMorph fullBounds height negated corner: 20 @ 20 "Into margins")). + + self layoutChanged.! From commits at source.squeak.org Wed Aug 17 20:05:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 20:05:10 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.647.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.647.mcz ==================== Summary ==================== Name: Monticello-mt.647 Author: mt Time: 17 August 2016, 10:04:54.221 pm UUID: 09777244-fd6a-5f4b-8490-39b980d14dc8 Ancestors: Monticello-mt.646 Fixes regression typo. =============== Diff against Monticello-mt.646 =============== Item was changed: ----- Method: MCSaveVersionDialog>>list (in category 'accessing') ----- list ^ self items collect: [:each | (self reverts includes: each) ifFalse: [(self ignore includes: each) ifFalse: [each summary] ifTrue: [Text string: '( ', each summary, ' )' attributes: (self userInterfaceTheme ignoredOperationAttributes ifNil: [{TextColor color: Color gray}])]] ifTrue: [Text string: '( ', each summary, ' )' + attributes: (self userInterfaceTheme revertedOperationAttributes ifNil: [ {TextEmphasis struckOut} ]) ]]! - attribute: (self userInterfaceTheme revertedOperationAttributes ifNil: [ {TextEmphasis struckOut} ]) ]]! From commits at source.squeak.org Wed Aug 17 20:13:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 20:13:25 2016 Subject: [squeak-dev] The Trunk: System-mt.902.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.902.mcz ==================== Summary ==================== Name: System-mt.902 Author: mt Time: 17 August 2016, 10:12:57.526 pm UUID: 7a82cf34-9366-a549-83f9-1401bf9adee4 Ancestors: System-mt.901 Small fix in system version description because being in code-freeze includes being in feature-freeze. =============== Diff against System-mt.901 =============== Item was changed: ----- Method: SystemVersion>>description (in category 'printing') ----- description self isAlpha ifTrue: [^ 'ALPHA. New features which are not stable yet may come in\with each update. Also, existing features might not work reliably\due to updates and related changes.' translated withCRs]. + (self isFeatureFreeze and: [self isCodeFreeze not]) ifTrue: [^ 'FEATURE FREEZE. A new release is being prepared.\There will be only bugfixes, but no new features.' translated withCRs]. - self isFeatureFreeze ifTrue: [^ 'FEATURE FREEZE. A new release is being prepared.\There will be only bugfixes, but no new features.' translated withCRs]. self isCodeFreeze ifTrue: [^ 'RELEASE CANDIDATE. The new release is almost ready.\There will be only bugfixes, if any.' translated withCRs]. self isRelease ifTrue: [^ ''].! From eliot.miranda at gmail.com Wed Aug 17 20:14:23 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Aug 17 20:14:26 2016 Subject: [squeak-dev] Re: [Vm-dev] VM Maker: VMMaker.oscog-cb.1919.mcz In-Reply-To: References: <57b470e1.2637ed0a.99c78.a5dbSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: On Wed, Aug 17, 2016 at 12:50 PM, Fabio Niephaus wrote: > On Wed, Aug 17, 2016 at 4:41 PM Eliot Miranda > wrote: > >> I will generate and commit sources today. If possible we should use the >> resulting VMs in the 5.1 release. We have until early next week to test >> then harshly and see if they stand up to abuse ;-) >> > > So, shall we give this one a try then? > https://bintray.com/opensmalltalk/vm/cog/201608171728#files > That would be the one! > > > Fabio > > >> >> _,,,^..^,,,_ (phone) >> >> On Aug 17, 2016, at 7:27 AM, Cl?ment Bera wrote: >> >> With that commit the VM is stable again. >> >> On Wed, Aug 17, 2016 at 4:11 PM, wrote: >> >>> >>> ClementBera uploaded a new version of VMMaker to project VM Maker: >>> http://source.squeak.org/VMMaker/VMMaker.oscog-cb.1919.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: VMMaker.oscog-cb.1919 >>> Author: cb >>> Time: 17 August 2016, 4:10:53.445475 pm >>> UUID: 00a8dd2a-bc8d-4552-b400-be781c8aabec >>> Ancestors: VMMaker.oscog-cb.1918 >>> >>> fixed bug in scanner related to twoPath methods >>> >>> =============== Diff against VMMaker.oscog-cb.1918 =============== >>> >>> Item was changed: >>> ----- Method: StackToRegisterMappingCogit>>compileFrameBuild (in >>> category 'compile abstract instructions') ----- >>> compileFrameBuild >>> "Build a frame for a CogMethod activation. See CoInterpreter >>> class>>initializeFrameIndices. >>> Override to push the register receiver and register arguments, >>> if any." >>> self cppIf: IMMUTABILITY ifTrue: >>> [useTwoPaths ifTrue: >>> [self compileTwoPathFrameBuild. >>> ^self]]. >>> needsFrame ifFalse: >>> [useTwoPaths ifTrue: >>> [self compileTwoPathFramelessInit]. >>> self initSimStackForFramelessMethod: initialPC. >>> ^self]. >>> + self deny: useTwoPaths. >>> self genPushRegisterArgs. >>> super compileFrameBuild. >>> self initSimStackForFramefulMethod: initialPC! >>> >>> Item was changed: >>> ----- Method: StackToRegisterMappingCogit>>scanMethod (in category >>> 'compile abstract instructions') ----- >>> scanMethod >>> "Scan the method (and all embedded blocks) to determine >>> - what the last bytecode is; extra bytes at the end of a >>> method are used to encode things like source pointers or temp names >>> - if the method needs a frame or not >>> - what are the targets of any backward branches. >>> - how many blocks it creates >>> Answer the block count or on error a negative error code" >>> | latestContinuation nExts descriptor pc numBlocks distance >>> targetPC framelessStackDelta seenInstVarStore | >>> >>> needsFrame := useTwoPaths := seenInstVarStore := false. >>> self maybeInitNumFixups. >>> self maybeInitNumCounters. >>> prevBCDescriptor := nil. >>> NewspeakVM ifTrue: >>> [numIRCs := 0]. >>> (primitiveIndex > 0 >>> and: [coInterpreter isQuickPrimitiveIndex: primitiveIndex]) >>> ifTrue: >>> [^0]. >>> pc := latestContinuation := initialPC. >>> numBlocks := framelessStackDelta := nExts := extA := extB := 0. >>> [pc <= endPC] whileTrue: >>> [byte0 := (objectMemory fetchByte: pc ofObject: >>> methodObj) + bytecodeSetOffset. >>> descriptor := self generatorAt: byte0. >>> descriptor isExtension ifTrue: >>> [descriptor opcode = Nop ifTrue: "unknown >>> bytecode tag; see Cogit class>>#generatorTableFrom:" >>> [^EncounteredUnknownBytecode]. >>> self loadSubsequentBytesForDescriptor: >>> descriptor at: pc. >>> self perform: descriptor generator]. >>> (descriptor isReturn >>> and: [pc >= latestContinuation]) ifTrue: >>> [endPC := pc]. >>> >>> needsFrame ifFalse: >>> [(descriptor needsFrameFunction isNil >>> or: [self perform: descriptor >>> needsFrameFunction with: framelessStackDelta]) >>> ifTrue: >>> ["With immutability we >>> win simply by avoiding a frame build if the receiver is young and not >>> immutable." >>> self cppIf: IMMUTABILITY >>> ifTrue: >>> [descriptor is1ByteInstVarStore >>> >>> ifTrue: [useTwoPaths := true] >>> >>> ifFalse: [needsFrame := true. useTwoPaths := false]] >>> + ifFalse: >>> [needsFrame := true. useTwoPaths := false]] >>> - ifFalse: >>> [needsFrame := true]] >>> ifFalse: >>> [framelessStackDelta := >>> framelessStackDelta + descriptor stackDelta. >>> "Without immutability >>> we win if there are two or more stores and the receiver is new." >>> self cppIf: IMMUTABILITY >>> ifTrue: [] >>> ifFalse: >>> >>> [descriptor is1ByteInstVarStore ifTrue: >>> >>> [seenInstVarStore >>> >>> ifTrue: [useTwoPaths := true] >>> >>> ifFalse: [seenInstVarStore := true]]]]]. >>> >>> descriptor isBranch ifTrue: >>> [distance := self spanFor: descriptor at: pc >>> exts: nExts in: methodObj. >>> targetPC := pc + descriptor numBytes + distance. >>> (self isBackwardBranch: descriptor at: pc exts: >>> nExts in: methodObj) >>> ifTrue: [self initializeFixupAt: >>> targetPC - initialPC] >>> ifFalse: >>> [latestContinuation := >>> latestContinuation max: targetPC. >>> self maybeCountFixup. >>> self maybeCountCounter]]. >>> descriptor isBlockCreation ifTrue: >>> [numBlocks := numBlocks + 1. >>> distance := self spanFor: descriptor at: pc >>> exts: nExts in: methodObj. >>> targetPC := pc + descriptor numBytes + distance. >>> latestContinuation := latestContinuation max: >>> targetPC. >>> self maybeCountFixup]. >>> >>> NewspeakVM ifTrue: >>> [descriptor hasIRC ifTrue: >>> [numIRCs := numIRCs + 1]]. >>> pc := pc + descriptor numBytes. >>> descriptor isExtension >>> ifTrue: [nExts := nExts + 1] >>> ifFalse: [nExts := extA := extB := 0]. >>> prevBCDescriptor := descriptor]. >>> ^numBlocks! >>> >>> >> -- _,,,^..^,,,_ best, Eliot -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160817/7faa7a54/attachment.htm From commits at source.squeak.org Wed Aug 17 20:15:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 20:15:12 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.162.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.162.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.162 Author: mt Time: 17 August 2016, 10:14:59.92 pm UUID: 2e5e2125-63e3-9f46-adc6-597fa269e068 Ancestors: ReleaseBuilder-mt.161 Preserve balloon even if open welcome workspace on first image start. =============== Diff against ReleaseBuilder-mt.161 =============== Item was added: + ----- Method: ReleaseBuilder class>>getBalloonForm (in category 'scripts - support') ----- + getBalloonForm + + ^ (FileDirectory default fileExists: 'balloon.png') + ifFalse: [nil] + ifTrue: [Form fromFileNamed: 'balloon.png']! Item was changed: ----- Method: ReleaseBuilder class>>openWelcomeWorkspaces (in category 'scripts - support') ----- openWelcomeWorkspaces + self openWelcomeWorkspacesWith: nil.! - | t browser balloon | - t := HelpTopic title: 'Welcome to Squeak' readOnlyContents: 'Please choose a topic from the left sidebare.'. - - t subtopics - add: (SqueakHelp asHelpTopic subtopics detect: [:ea | ea key = #introduction]); - add: SqueakLicenseHelp asHelpTopic; - add: (SqueakProjectHelp asHelpTopic subtopics detect: [:ea | ea key = #squeakUserInterface]); - add: (SqueakProjectHelp asHelpTopic subtopics detect: [:ea | ea key = #workingWithSqueak]); - add: SqueakReleaseNotes asHelpTopic. - - browser := HelpBrowser openOn: t. - browser extent: browser world extent * 0.6. - browser center: browser world center. - browser model showFirstTopic. - - (FileDirectory default fileExists: 'balloon.png') ifFalse: [^ self]. - - balloon := (Form fromFileNamed: 'balloon.png') asMorph. - browser addMorphFront: balloon. - balloon layoutFrame: (LayoutFrame - fractions: (0@1 corner: 0@1) - offsets: (balloon width // 1.7 negated @ (balloon height * 0.9) negated corner: 0@0)).! Item was added: + ----- Method: ReleaseBuilder class>>openWelcomeWorkspacesWith: (in category 'scripts - support') ----- + openWelcomeWorkspacesWith: balloonForm + + | t browser balloon | + t := HelpTopic title: 'Welcome to Squeak' readOnlyContents: 'Please choose a topic from the left sidebare.'. + + t subtopics + add: (SqueakHelp asHelpTopic subtopics detect: [:ea | ea key = #introduction]); + add: SqueakLicenseHelp asHelpTopic; + add: (SqueakProjectHelp asHelpTopic subtopics detect: [:ea | ea key = #squeakUserInterface]); + add: (SqueakProjectHelp asHelpTopic subtopics detect: [:ea | ea key = #workingWithSqueak]); + add: SqueakReleaseNotes asHelpTopic. + + browser := HelpBrowser openOn: t. + browser extent: browser world extent * 0.6. + browser center: browser world center. + browser model showFirstTopic. + + balloonForm ifNil: [^ self]. + balloon := balloonForm asMorph. + browser addMorphFront: balloon. + balloon layoutFrame: (LayoutFrame + fractions: (0@1 corner: 0@1) + offsets: (balloon width // 1.7 negated @ (balloon height * 0.9) negated corner: 0@0)).! Item was changed: ----- Method: ReleaseBuilder class>>prepareEnvironment (in category 'preparing') ----- prepareEnvironment "Prepare everything that should be done for a new image build. Clear caches, passwords, etc." "ReleaseBuilder prepareNewBuild" + | balloon | + self checkCurrentProjects; clearCaches; configureTools; setPreferences; configureDesktop. + + balloon := self getBalloonForm. "Get now because later the file might be missing." - DeferredTask := [ + self openWelcomeWorkspacesWith: balloon. + PreferenceWizardMorph open]. - self openWelcomeWorkspaces. - PreferenceWizardMorph new openInWorld]. "If you save-and-quit the image after calling #prepareEnvironment, ensure that the next image startup will be fast." Project current world doOneCycle.! Item was changed: ----- Method: ReleaseBuilder class>>saveAsNewRelease (in category 'saving') ----- saveAsNewRelease "Use this to create a new release image to be used in the automated release artifact building process on http://www.github.com/squeak-smalltalk/squeak-app." | fileName | self setNewSystemVersion: self versionString. + self assert: self versionString = SystemVersion current version. fileName := ('squeak-{1}.{2}{3}' format: { SystemVersion current majorVersionNumber. SystemVersion current minorVersionNumber. self releaseLocally ifTrue: ['-offline'] ifFalse: ['']}). Smalltalk saveAs: fileName. "Update the image state." self prepareSourceCode; prepareEnvironment; switchToNewRepository: self releaseRepository; addAdditionalRepositories. Smalltalk condenseChanges. Smalltalk snapshot: true "Important!!" andQuit: true.! Item was changed: ----- Method: ReleaseBuilder class>>setNewSystemVersion: (in category 'manual') ----- setNewSystemVersion: version self class compile: (self initializeTemplate format: {version}) classified: 'class initialization'. self initialize. + self assert: (SystemVersion current version beginsWith: self versionString). - self assert: self versionString = SystemVersion current version. SystemVersion current isRelease ifFalse: [ self inform: ('You just changed the system version to {1}.\Please upload the changed ''ReleaseBuilder'' package to\\ {2}\\so that this version change will be official.' translated withCRs format: {SystemVersion current version. self buildRepository description})].! From commits at source.squeak.org Wed Aug 17 20:26:32 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 20:26:34 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.51.mcz Message-ID: Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The Trunk: http://source.squeak.org/trunk/Help-Squeak-Project-mt.51.mcz ==================== Summary ==================== Name: Help-Squeak-Project-mt.51 Author: mt Time: 17 August 2016, 10:26:23.585 pm UUID: 0132d656-322c-a64b-b805-156f1cb523ea Ancestors: Help-Squeak-Project-mt.50 Some links added to some tool help texts. (Thanks Hannes!) =============== Diff against Help-Squeak-Project-mt.50 =============== Item was changed: ----- Method: SqueakToolsHelp class>>basicDevelopmentTools (in category 'pages') ----- basicDevelopmentTools + "This method was automatically generated. Edit it using:" + "SqueakToolsHelp edit: #basicDevelopmentTools" + ^(HelpTopic - ^HelpTopic title: 'Basic Development Tools' + contents: + 'Smalltalk environments have some of the best user interfaces for programmers ever devised. Those who have programmed in Lisp under Emacs have some idea, but Smalltalk is even better. - contents: 'Smalltalk environments have some of the best user interfaces for programmers ever devised. Those who have programmed in Lisp under Emacs have some idea, but Smalltalk is even better. You should learn these basic tools thoroughly: - Workspace + - Transcript (do it: Transcript showln: ''Hello Squeak!!!!'') - - Transcript - Browser - Inspector - File List + - Change Sorter (and also the Dual Change Sorter) - - Change Sorter - Debugger + - Method Finder + !! + ]style[(235 9 3 10 9 34 4 7 3 9 3 9 3 13 15 18 4 8 3 14 1),Rcode://Workspace open;,,Rcode://Transcript open;,,Rcode://Transcript showln: ''Hello Squeak!!!!'';,,Rcode://Browser open;,,Rcode://#(S Q U E A K) inspect;,,Rcode://FileList open;,,Rcode://ChangeSorter new open;,,Rcode://DualChangeSorter new open;,,Rcode://7/0;,,Rcode://SelectorBrowser new open;,!!' readStream nextChunkText) + key: #basicDevelopmentTools! - - Method Finder - '! Item was changed: ----- Method: SqueakToolsTranscriptHelp class>>transcript (in category 'pages') ----- transcript + "This method was automatically generated. Edit it using:" + "SqueakToolsTranscriptHelp edit: #transcript" + ^(HelpTopic - ^HelpTopic title: 'The Transcript window' + contents: + 'The Transcript window is often used for logging or printing results from text only code. - contents: 'The Transcript window is often used for logging or printing results from text only code. To open the Transcript use TheWorldMenu and choose ''open...''. Then choose ''Transcript''. You can also type Transcript open in a Workspace and doIt. + !! + ]style[(222 9 11),Rcode://Workspace open;,!!' readStream nextChunkText) + key: #transcript! - '! Item was changed: ----- Method: SqueakToolsWorkspaceHelp class>>openWorkspace (in category 'pages') ----- openWorkspace + "This method was automatically generated. Edit it using:" + "SqueakToolsWorkspaceHelp edit: #openWorkspace" + ^(HelpTopic - ^HelpTopic title: 'Open a Workspace' + contents: + 'You can open a Workspace window in any of the following ways: - contents: 'You can open a Workspace window in any of the following ways: + - Keyboard Shortcut: while pointing at an empty part of the Squeak window, press alt-k (in Windows) or cmd-k (on a Mac) or ctrl-k (in Linux) - - Keyboard Shortcut: while pointing at an empty part of the Squeak window, press alt-k (in Windows) or cmd-k (on a Mac) - World Menu: select "Workspace" - Tools Flap: click on the Tools Flap. When it comes out, drag the Workspace icon out. + - Doit: select inside the following quote and doit: "Workspace open"!! + ]style[(15 9 184 10 176),Rcode://Workspace open;,,Rcode://ActiveWorld openWorldMenu;,!!' readStream nextChunkText) + key: #openWorkspace! - - Doit: select inside the following quote and doit: "Workspace open"'! From commits at source.squeak.org Wed Aug 17 20:30:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 20:30:51 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.163.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.163.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.163 Author: mt Time: 17 August 2016, 10:30:43.347 pm UUID: 0c7a8192-d167-bb4f-b88b-13cfb53f3aed Ancestors: ReleaseBuilder-mt.162 We have reached a level to entitle the first release candidate for Squeak 5.1. =============== Diff against ReleaseBuilder-mt.162 =============== Item was changed: ----- Method: ReleaseBuilder class>>initialize (in category 'class initialization') ----- initialize "We have to be after AutoStart so that Morphic is up and running." Smalltalk addToStartUpList: ReleaseBuilder after: AutoStart. + SystemVersion newVersion: 'Squeak5.1rc1'.! - SystemVersion newVersion: 'Squeak5.1beta'.! From commits at source.squeak.org Wed Aug 17 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 17 21:55:06 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160817215503.15281.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068659.html Name: Tests-pre.354 Ancestors: Tests-pre.353 Further work on the LocaleTest to make it even more isolated. It now tries to also restore any keyboard or clipboard interpreters. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068660.html Name: Chronology-Tests-pre.4 Ancestors: Chronology-Tests-bf.3 Updates makeUTC test for Dates to cater for the timezone independent behavior of Date objects. (together with Marcel) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068661.html Name: SqueakSSL-Tests-pre.22 Ancestors: SqueakSSL-Tests-pre.21 Gives the SqueakSSL tests even more timeout tolerance to cater for all kinds of connections ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068662.html Name: HelpSystem-Core-mt.97 Ancestors: HelpSystem-Core-mt.96 Small fix to ensure legal selectors when updating class/method-based help books/topics. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068663.html Name: Tests-mt.355 Ancestors: Tests-pre.354 Restore formatting and comments in #decompilerFailures. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068664.html Name: ReleaseBuilder-mt.159 Ancestors: ReleaseBuilder-mt.158 Clean-up in the release builder in preparation for the code freeze. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068665.html Name: Morphic-mt.1287 Ancestors: Morphic-mt.1286 Makes triangular adornments not so prominent (especially when gradients are off) and flush the adornment cache in the release clean-up process. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068666.html Name: ReleaseBuilder-mt.160 Ancestors: ReleaseBuilder-mt.159 Minor adjustment in welcome workspaces. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068667.html Name: Morphic-mt.1288 Ancestors: Morphic-mt.1287 There is a toolbuilder test that fails if all buttons in the system have gradients. Make it possible to turn off gradients for certain (test) buttons. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068668.html Name: MorphicTests-mt.39 Ancestors: MorphicTests-mt.38 Fixes a Morphic button test wrt. global gradients preference. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068669.html Name: Collections-mt.712 Ancestors: Collections-mt.711 Quickfix: Due to some hick-ups with clickable text actions and mouse (up) events, process do-it actions as deferred message. For example, if you open windows in a do-it, those windows will now be at the top again. (Note that we should think about fixing TextEditor >> #mouseDown: and NewParagraph >> #clickAt:for:controller: later.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068670.html Name: 51Deprecated-mt.45 Ancestors: 51Deprecated-mt.44 Due to some simplification in the inheritance chain of docking bars and menus, restore some rounded-corner methods as deprecated to improve backwards compatibility (e.g. NuScratch). In the future, we can descide whether to add it to Morph in general or not. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068671.html Name: Collections-mt.713 Ancestors: Collections-mt.712 Revert previous change because Collections have no dependency on System. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068672.html Name: Morphic-mt.1289 Ancestors: Morphic-mt.1288 Fixes a regression regarding the global ActiveWorld. Sorry for that. (Images might have to switch projects back and forth to get into a consistent state again.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068673.html Name: Help-Squeak-Project-mt.50 Ancestors: Help-Squeak-Project-mt.49 Replace two TextDoIt instances with a TextURL (and 'code://' prefix) until we figure out a better way to invoke clickable text actions without disturbing the Morphic event dispatcher. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068674.html Name: ReleaseBuilder-mt.161 Ancestors: ReleaseBuilder-mt.160 Only open the welcome workspaces on the first start to avoid interference with the file system on Travis. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068675.html Name: PreferenceBrowser-mt.76 Ancestors: PreferenceBrowser-mt.75 Also detect low-performance for SqueakJS in Preference Wizard. Fixes some layout issues there. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068676.html Name: Monticello-mt.647 Ancestors: Monticello-mt.646 Fixes regression typo. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068677.html Name: System-mt.902 Ancestors: System-mt.901 Small fix in system version description because being in code-freeze includes being in feature-freeze. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068678.html Name: ReleaseBuilder-mt.162 Ancestors: ReleaseBuilder-mt.161 Preserve balloon even if open welcome workspace on first image start. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068679.html Name: Help-Squeak-Project-mt.51 Ancestors: Help-Squeak-Project-mt.50 Some links added to some tool help texts. (Thanks Hannes!) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068680.html Name: ReleaseBuilder-mt.163 Ancestors: ReleaseBuilder-mt.162 We have reached a level to entitle the first release candidate for Squeak 5.1. ============================================= From Marcel.Taeumel at hpi.de Thu Aug 18 07:02:31 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 18 07:03:19 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available Message-ID: <1471503751072-4911665.post@n4.nabble.com> Hi, there. It's time for another "code freeze". :-) Let's hope that all serious bugs got fixed by now and that we have a usable Squeak 5.1 environment to get creative with. ;-) Find the first release candidate here: http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-32bit/ http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-64bit/ (regarded as "experimental") You can still tell us about every little "buglette" you can find. We will, however, address only "show stoppers" in this phase. Other things will be scribbled down in the release notes under "Known Issues" and (maybe) fixed after the release: https://github.com/squeak-smalltalk/squeak-app/tree/master/release-notes Please stress-test this RC1 until August 21, 23:59 AOE. Plus/minus a several hours as usual. :-D Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Code-Freeze-Trunk-still-closed-first-release-candidate-s-available-tp4911665.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bert at freudenbergs.de Thu Aug 18 12:41:58 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Aug 18 12:42:01 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: <1471503751072-4911665.post@n4.nabble.com> References: <1471503751072-4911665.post@n4.nabble.com> Message-ID: On Thu, Aug 18, 2016 at 9:02 AM, marcel.taeumel wrote: > Hi, there. > > It's time for another "code freeze". :-) Let's hope that all serious bugs > got fixed by now and that we have a usable Squeak 5.1 environment to get > creative with. ;-) > > Find the first release candidate here: > http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-32bit/ > http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-64bit/ (regarded as > "experimental") > You can also try it in SqueakJS simply by clicking here: http://try.squeak.org/#zip=[http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-32bit/Squeak5.1rc1-16520-32bit.zip,http://files.squeak.org/5.0/SqueakV50.sources.zip] - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160818/cf6f03d8/attachment.htm From lewis at mail.msen.com Thu Aug 18 15:20:10 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Thu Aug 18 15:20:12 2016 Subject: [squeak-dev] Squeak 5.1 - I am impressed Message-ID: <20160818152010.GA72954@shell.msen.com> I have been unexpectedly away from Squeak for most of the last month, so I am catching up now with all of the progress leading to the new release. There is an amazing amount of good new stuff happening, including themes and configuration support and lots of UI improvements. I a really impressed with all of this progress. It reminds me of the early days of Squeak Central, when amazing new things were appearing seemingly every day. What a nice thing to see for the 20th year of Squeak! Dave From asqueaker at gmail.com Thu Aug 18 15:33:44 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Aug 18 15:34:28 2016 Subject: [squeak-dev] The Trunk: Chronology-Tests-pre.4.mcz In-Reply-To: <57b42311.0686370a.3aa0a.d8b2SMTPIN_ADDED_MISSING@mx.google.com> References: <57b42311.0686370a.3aa0a.d8b2SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: makeUTC should be deprecated (next release). I added it years ago as an external "solution" to the equivalence check, but mutating a value object is a hack, and now we need it anymore. On Wed, Aug 17, 2016 at 3:40 AM, wrote: > Patrick Rein uploaded a new version of Chronology-Tests to project The Trunk: > http://source.squeak.org/trunk/Chronology-Tests-pre.4.mcz > > ==================== Summary ==================== > > Name: Chronology-Tests-pre.4 > Author: pre > Time: 17 August 2016, 10:40:34.494232 am > UUID: bb438ab5-6837-d74f-9036-cfb85ef62bf7 > Ancestors: Chronology-Tests-bf.3 > > Updates makeUTC test for Dates to cater for the timezone independent behavior of Date objects. (together with Marcel) > > =============== Diff against Chronology-Tests-bf.3 =============== > > Item was changed: > ----- Method: DateTest>>testMakeUTC (in category 'testing') ----- > testMakeUTC > + "Equal dates should compare equal regardless of which TimeZone they are created in." > + > + | priorTz march31stLocal march31stOcean | > - "Equal dates should compare equal regardless of which TimeZone > - they are created in." > - | priorTz march31stLocal march31stOcean | > - "This test won't work in GMT-9, but nobody lives there." > - self deny: DateAndTime localTimeZone offset hours = -9. > priorTz := DateAndTime localTimeZone. > + > + [DateAndTime > + localTimeZone: (TimeZone > + offset: 9 hours > + name: 'Early Test Countries' > + abbreviation: 'Test Ocean Early'). > + > + march31stLocal := Date year: 2016 month: 3 day: 31. > + march31stLocal start: (march31stLocal start offset: DateAndTime localTimeZone offset). > + > - march31stLocal := Date today. > DateAndTime > localTimeZone: (TimeZone > + offset: -9 hours > + name: 'Late Test Countries' > + abbreviation: 'Test Ocean Late'). > + > + march31stOcean := Date year: 2016 month: 3 day: 31. > + march31stOcean start: (march31stOcean start offset: DateAndTime localTimeZone offset).] > + ensure: [DateAndTime localTimeZone: priorTz]. > + > + self > + deny: march31stLocal = march31stOcean; > + assert: march31stOcean > march31stLocal. > + > + self > + assert: march31stLocal makeUTC = march31stOcean makeUTC; > + deny: march31stOcean makeUTC > march31stLocal makeUTC; > + deny: march31stOcean makeUTC < march31stLocal makeUTC.! > - offset: -9 hours > - name: 'No Countries' > - abbreviation: 'Ocean'). > - march31stOcean := Date today. > - DateAndTime localTimeZone: priorTz. > - self assert: march31stLocal makeUTC = march31stOcean makeUTC ; > - deny: march31stOcean makeUTC > march31stLocal makeUTC ; > - deny: march31stOcean makeUTC < march31stLocal makeUTC! > > From hannes.hirzel at gmail.com Thu Aug 18 16:05:50 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Thu Aug 18 16:05:54 2016 Subject: [squeak-dev] Pipes Game in 5.1rc1 Message-ID: Note: The Pipes Game from http://squeak.preeminent.org/ (on SqueakMap) works fine in 5.1rc1 _if_ in method PipeGameBoard>>setButtonAttributes: btn btn useRoundedCorners; is commented out btn "useRoundedCorners;" It is started with menu "new morph" -> "From alphabetical list" -> "PipeGameBoard" --Hannes From bruce.oneel at pckswarms.ch Thu Aug 18 18:26:45 2016 From: bruce.oneel at pckswarms.ch (Bruce O'Neel-2) Date: Thu Aug 18 18:27:37 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available Message-ID: <1471544813-63dccd09964e6e438e90f325700e9882@pckswarms.ch> Hi, Thanks for all the work on this.? Sadly neither the 32bit or 64bit ones open on MacOS Sierra betas.? They start but no Mac windows are displayed. cheers bruce Hi, there. It's time for another "code freeze". :-) Let's hope that all serious bugs got fixed by now and that we have a usable Squeak 5.1 environment to get creative with. ;-) Find the first release candidate here: http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-32bit/ http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-64bit/?(regarded as "experimental") You can still tell us about every little "buglette" you can find. We will, however, address only "show stoppers" in this phase. Other things will be scribbled down in the release notes under "Known Issues" and (maybe) fixed after the release: https://github.com/squeak-smalltalk/squeak-app/tree/master/release-notes Please stress-test this RC1 until August 21, 23:59 AOE. Plus/minus a several hours as usual. :-D Best, Marcel If you reply to this email, your message will be added to the discussion below:http://forum.world.st/ANN-Squeak-5-1-Code-Freeze-Trunk-still-closed-first-release-candidate-s-available-tp4911665.html To start a new topic under Squeak - Dev, email ml-node+s1294792n45488h21@n4.nabble.com To unsubscribe from Squeak - Dev, click here. NAML -- View this message in context: http://forum.world.st/Re-ANN-Squeak-5-1-Code-Freeze-Trunk-still-closed-first-release-candidate-s-available-tp4911781.html Sent from the Squeak - Dev mailing list archive at Nabble.com. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160818/f959d996/attachment.htm From Marcel.Taeumel at hpi.de Thu Aug 18 19:57:29 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 18 19:58:23 2016 Subject: [squeak-dev] Re: The Trunk: Chronology-Tests-pre.4.mcz In-Reply-To: References: Message-ID: <1471550249769-4911795.post@n4.nabble.com> Chris Muller-3 wrote > makeUTC should be deprecated (next release). I added it years ago as > an external "solution" to the equivalence check, but mutating a value > object is a hack, and now we need it anymore. > > > On Wed, Aug 17, 2016 at 3:40 AM, < > commits@.squeak > > wrote: >> Patrick Rein uploaded a new version of Chronology-Tests to project The >> Trunk: >> http://source.squeak.org/trunk/Chronology-Tests-pre.4.mcz >> >> ==================== Summary ==================== >> >> Name: Chronology-Tests-pre.4 >> Author: pre >> Time: 17 August 2016, 10:40:34.494232 am >> UUID: bb438ab5-6837-d74f-9036-cfb85ef62bf7 >> Ancestors: Chronology-Tests-bf.3 >> >> Updates makeUTC test for Dates to cater for the timezone independent >> behavior of Date objects. (together with Marcel) >> >> =============== Diff against Chronology-Tests-bf.3 =============== >> >> Item was changed: >> ----- Method: DateTest>>testMakeUTC (in category 'testing') ----- >> testMakeUTC >> + "Equal dates should compare equal regardless of which TimeZone >> they are created in." >> + >> + | priorTz march31stLocal march31stOcean | >> - "Equal dates should compare equal regardless of which TimeZone >> - they are created in." >> - | priorTz march31stLocal march31stOcean | >> - "This test won't work in GMT-9, but nobody lives there." >> - self deny: DateAndTime localTimeZone offset hours = -9. >> priorTz := DateAndTime localTimeZone. >> + >> + [DateAndTime >> + localTimeZone: (TimeZone >> + offset: 9 hours >> + name: 'Early Test Countries' >> + abbreviation: 'Test Ocean Early'). >> + >> + march31stLocal := Date year: 2016 month: 3 day: 31. >> + march31stLocal start: (march31stLocal start offset: DateAndTime >> localTimeZone offset). >> + >> - march31stLocal := Date today. >> DateAndTime >> localTimeZone: (TimeZone >> + offset: -9 hours >> + name: 'Late Test Countries' >> + abbreviation: 'Test Ocean Late'). >> + >> + march31stOcean := Date year: 2016 month: 3 day: 31. >> + march31stOcean start: (march31stOcean start offset: DateAndTime >> localTimeZone offset).] >> + ensure: [DateAndTime localTimeZone: priorTz]. >> + >> + self >> + deny: march31stLocal = march31stOcean; >> + assert: march31stOcean > march31stLocal. >> + >> + self >> + assert: march31stLocal makeUTC = march31stOcean makeUTC; >> + deny: march31stOcean makeUTC > march31stLocal makeUTC; >> + deny: march31stOcean makeUTC < march31stLocal makeUTC.! >> - offset: -9 hours >> - name: 'No Countries' >> - abbreviation: 'Ocean'). >> - march31stOcean := Date today. >> - DateAndTime localTimeZone: priorTz. >> - self assert: march31stLocal makeUTC = march31stOcean makeUTC ; >> - deny: march31stOcean makeUTC > march31stLocal makeUTC ; >> - deny: march31stOcean makeUTC < march31stLocal makeUTC! >> >> Hmm... instead of deprecating #makeUTC, we should make adding a time zone offset to a date instance much easier than: march31stLocal := Date year: 2016 month: 3 day: 31. march31stLocal start: (march31stLocal start offset: DateAndTime localTimeZone offset). Then, #makeUTC could be the inverse operation for that. Then, if you ever need to work with "time-zoned dates", you can do it easily. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Chronology-Tests-pre-4-mcz-tp4911472p4911795.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lists at fniephaus.com Thu Aug 18 20:04:15 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Thu Aug 18 20:04:31 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: <1471544813-63dccd09964e6e438e90f325700e9882@pckswarms.ch> References: <1471544813-63dccd09964e6e438e90f325700e9882@pckswarms.ch> Message-ID: On Thu, Aug 18, 2016 at 8:27 PM Bruce O'Neel-2 wrote: > Hi, > > Thanks for all the work on this. Sadly neither the 32bit or 64bit ones > open on MacOS Sierra betas. They start but no Mac windows are displayed. > Thanks for the info. We don't have macOS Sierra running anywhere at the moment and I'm afraid there might not be enough time to look into this problem before the release. But we should certainly add support for Sierra as soon as possible. I have opened [1], so we don't forget about this. Best, Fabio [1] https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/39 > > cheers > > bruce > > *18 ao?t 2016 09:02 "marcel.taeumel [via Smalltalk]" <[hidden email] > > a ?crit:* > > Hi, there. > > It's time for another "code freeze". :-) Let's hope that all serious bugs > got fixed by now and that we have a usable Squeak 5.1 environment to get > creative with. ;-) > > Find the first release candidate here: > http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-32bit/ > http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-64bit/ (regarded as > "experimental") > > You can still tell us about every little "buglette" you can find. We will, > however, address only "show stoppers" in this phase. Other things will be > scribbled down in the release notes under "Known Issues" and (maybe) fixed > after the release: > https://github.com/squeak-smalltalk/squeak-app/tree/master/release-notes > > Please stress-test this RC1 until August 21, 23:59 AOE. Plus/minus a > several hours as usual. :-D > > Best, > Marcel > > If you reply to this email, your message will be added to the discussion > below: > > http://forum.world.st/ANN-Squeak-5-1-Code-Freeze-Trunk-still-closed-first-release-candidate-s-available-tp4911665.html > To start a new topic under Squeak - Dev, email [hidden email] > > To unsubscribe from Squeak - Dev, click here. > NAML > > > > > > ------------------------------ > View this message in context: Re: [ANN] Squeak 5.1 Code Freeze -- Trunk > still closed; first release candidate(s) available > > Sent from the Squeak - Dev mailing list archive > at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160818/36f707e4/attachment.htm From Marcel.Taeumel at hpi.de Thu Aug 18 20:08:33 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 18 20:09:27 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: <1471544813-63dccd09964e6e438e90f325700e9882@pckswarms.ch> References: <1471544813-63dccd09964e6e438e90f325700e9882@pckswarms.ch> Message-ID: <1471550913501-4911798.post@n4.nabble.com> Bruce O'Neel-2 wrote > Hi, > > Thanks for all the work on this.? Sadly neither the 32bit or 64bit ones > open on MacOS Sierra betas.? They start but no Mac windows are displayed. > > cheers > > bruce > > Hi, there. > > It's time for another "code freeze". :-) Let's hope that all serious bugs > got fixed by now and that we have a usable Squeak 5.1 environment to get > creative with. ;-) > > Find the first release candidate here: > http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-32bit/ > http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-64bit/?(regarded as > "experimental") > > You can still tell us about every little "buglette" you can find. We will, > however, address only "show stoppers" in this phase. Other things will be > scribbled down in the release notes under "Known Issues" and (maybe) fixed > after the release: > https://github.com/squeak-smalltalk/squeak-app/tree/master/release-notes > > Please stress-test this RC1 until August 21, 23:59 AOE. Plus/minus a > several hours as usual. :-D > > Best, > Marcel > > If you reply to this email, your message will be added to the discussion > below:http://forum.world.st/ANN-Squeak-5-1-Code-Freeze-Trunk-still-closed-first-release-candidate-s-available-tp4911665.html > To start a new topic under Squeak - Dev, email > ml-node+s1294792n45488h21@.nabble > > To unsubscribe from Squeak - Dev, click here. > NAML Sounds like we should really work on fixing the recently changed graphics/event backend in the macOS VM. :) It was changed from Carbon to Cocoa a few months ago.. It added flashing effects when switching to/from full-screen, forced activation of any dedicated graphics chip (which got fixed by now), and broke user input event processing in terms of key presses (not key strokes, they work fine). However, we can easily update the bundles with improved VMs anytime. :) Best, Marcel -- View this message in context: http://forum.world.st/Re-ANN-Squeak-5-1-Code-Freeze-Trunk-still-closed-first-release-candidate-s-available-tp4911781p4911798.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From tim at rowledge.org Fri Aug 19 00:13:17 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 19 00:13:21 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: <1471503751072-4911665.post@n4.nabble.com> References: <1471503751072-4911665.post@n4.nabble.com> Message-ID: <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> > On 18-08-2016, at 12:02 AM, marcel.taeumel wrote: > > Hi, there. > > It's time for another "code freeze". :-) Let's hope that all serious bugs > got fixed by now and that we have a usable Squeak 5.1 environment to get > creative with. ;-) > > Find the first release candidate here: > http://files.squeak.org/5.1rc1/Squeak5.1rc1-16520-32bit/ In the ARM version the shell script has problems that stop it working. Basically the regexp phrase isn?t doing quite what we need. See for example the log of what it did - ++ uname -r + local kernel_release=4.4.9-v7+ + local 're=[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)' ++ echo 4.4.9-v7+ ++ sed -e 's#[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)#\1#' + local major=4+ ++ echo 4.4.9-v7+ ++ sed -e 's#[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)#\2#' + local minor=4+ ++ echo 4.4.9-v7+ ++ sed -e 's#[^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]\([0-9]*\)\([0-9A-Za-z-]*\)#\3#' + local patch=9+ + local min_major=2 + local min_minor=6 + local min_patch=12 + [[ 4+ -lt 2 ]] Squeak5.1rc1-16520-32bit-201608171728-ARMv6/squeak.sh: line 38: [[: 4+: syntax error: operand expected (error token is "+") + [[ 4+ -le 2 ]] Squeak5.1rc1-16520-32bit-201608171728-ARMv6/squeak.sh: line 39: [[: 4+: syntax error: operand expected (error token is "+") + [[ 4+ -le 2 ]] Note how the various major/minor variables are 4+ and not 4 etc. I guess this is what is causing the comparisons to fail? That ?re? needs some massaging. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim For every action, there is an equal and opposite criticism. From tim at rowledge.org Fri Aug 19 00:34:06 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 19 00:34:10 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: > On 18-08-2016, at 5:13 PM, tim Rowledge wrote: > {snip} > > Note how the various major/minor variables are 4+ and not 4 etc. I guess this is what is causing the comparisons to fail? That ?re? needs some massaging. To get past that quickly I commented out the broken bits. It then proceeded to try to create the security/limits file even though it isn?t required. The ensure_conf_file needs to depend upon the kernel level. I had a secondary problem due to having unzipped the package on my Mac which left .AppleDouble files around; ideally that ought not cause a problem if the `find` call is a bit cleverer. Why does it descend into .AppleDouble before checking the local dir? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Oxymorons: Good grief From Marcel.Taeumel at hpi.de Fri Aug 19 06:23:58 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 19 06:24:54 2016 Subject: [squeak-dev] Re: Pipes Game in 5.1rc1 In-Reply-To: References: Message-ID: <1471587838598-4911853.post@n4.nabble.com> Hannes Hirzel wrote > Note: > > The Pipes Game from > > http://squeak.preeminent.org/ (on SqueakMap) > > works fine in 5.1rc1 _if_ > > > in method PipeGameBoard>>setButtonAttributes: btn > > btn useRoundedCorners; > > is commented out > > btn "useRoundedCorners;" > > > It is started with menu "new morph" -> "From alphabetical list" -> > "PipeGameBoard" > > --Hannes Thanks. There will be an RC2 and I will fix it then. Best, Marcel -- View this message in context: http://forum.world.st/Pipes-Game-in-5-1rc1-tp4911768p4911853.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From hannes.hirzel at gmail.com Fri Aug 19 07:38:01 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Aug 19 07:38:05 2016 Subject: [squeak-dev] Re: [ANN] The Squeak Shell In-Reply-To: <6B70E001-A793-4BF6-9D0E-77349931C4F7@rowledge.org> References: <1467987446046-4905613.post@n4.nabble.com> <57843682.5000207@gemtalksystems.com> <1468329669590-4906232.post@n4.nabble.com> <3F8342A7-129F-4645-8583-1E4DF50B7052@rowledge.org> <6679.136.1.1.169.1468343587.squirrel@webmail.msen.com> <1468351175990-4906336.post@n4.nabble.com> <6B70E001-A793-4BF6-9D0E-77349931C4F7@rowledge.org> Message-ID: Hello Marcel Installer swa project: 'SqueakShell'; install: 'SqueakShell'. loads fine in Squeak 5.1rc1 Is it possible a) to have a class comment in SqueakShellProject (aim, current status) b) An entry in SqueakMap for 5.1 ? Best Hannes On 7/12/16, tim Rowledge wrote: > >> On 12-07-2016, at 12:19 PM, marcel.taeumel wrote: >> >> Oh, it's a classic one. I made the initial post way too long. And there >> was >> no TL;DR. My bad. ;-D > > OK, OK, I see (after reading several times) the part where you peripherally > mention it. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > All programmers are playwrights and all computers are lousy actors. > > > > From Marcel.Taeumel at hpi.de Fri Aug 19 08:44:18 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 19 08:45:15 2016 Subject: [squeak-dev] Could a Point behave like a Magnitude? :) Message-ID: <1471596258220-4911882.post@n4.nabble.com> Hi, there. Right now, this is can happen when comparing two points: (100@50) < (100@60). "false" (100@50) > (100@60). "false" (100@50) = (100@60). "false" This is because one component is the same and implementation in Point is like this: < anotherPoint ^x < aPoint x and: [y < aPoint y] Hence, points do not have like magnitudes. For the aformentioned examples, a "fix" could be: < anotherPoint ^(self >= anotherPoint) not Now, the interesting thing is that event handling (mouse clicks etc.) becomes awkward after that. :-D Best, Marcel -- View this message in context: http://forum.world.st/Could-a-Point-behave-like-a-Magnitude-tp4911882.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From nicolas.cellier.aka.nice at gmail.com Fri Aug 19 10:25:12 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Fri Aug 19 10:25:14 2016 Subject: [squeak-dev] Could a Point behave like a Magnitude? :) In-Reply-To: <1471596258220-4911882.post@n4.nabble.com> References: <1471596258220-4911882.post@n4.nabble.com> Message-ID: Magnitude presume that < is a total order relationship https://en.wikipedia.org/wiki/Total_order For point, <= is not a total order. It might be that neither a <= b nor b <= a So Point is not a good candidate for Magnitude (side note: we had enough problems with Float nan which is unordered!) In short, why changing < is not a good idea? 1) there's no natural definition of <= 2) it breaks expectations In longer form: We could define some total order (Matlab did it for complex), there are infinitely many possible definitions, like sort x first, then y, or radius first, then angle, etc... But it's not a good idea because there is no natural relation order, an order that mix well with arithmetic like: (a <= b and: [c <= d]) ==> ((a+c) <= (b+d)) Current definition of = has this property, but it's not total Currently, I presume the usage in graphics are kind of testing if inside a bounding box with p >= topLeft and: [p <= bottomRight] So I'm not amazed that we can easily break things by modifying such basic method. In Matlab, defining < on complex has practically no interest (except when there's small imaginary residuals), but prevents programs to fail, delaying detection of errors. For me, the most suspicious decision is to authorize Point < Number or Number < Point, just because we can (or just because it's a side effect of authorizing Point+Number). It should rarely be usefull, and is going to wicken detection of errors 2016-08-19 10:44 GMT+02:00 marcel.taeumel : > Hi, there. > > Right now, this is can happen when comparing two points: > > (100@50) < (100@60). "false" > (100@50) > (100@60). "false" > (100@50) = (100@60). "false" > > This is because one component is the same and implementation in Point is > like this: > > < anotherPoint > ^x < aPoint x and: [y < aPoint y] > > Hence, points do not have like magnitudes. For the aformentioned examples, > a > "fix" could be: > > < anotherPoint > ^(self >= anotherPoint) not > > Now, the interesting thing is that event handling (mouse clicks etc.) > becomes awkward after that. :-D > > Best, > Marcel > > > > > > > -- > View this message in context: http://forum.world.st/Could-a- > Point-behave-like-a-Magnitude-tp4911882.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160819/ab68c975/attachment.htm From nicolas.cellier.aka.nice at gmail.com Fri Aug 19 10:29:42 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Fri Aug 19 10:29:44 2016 Subject: [squeak-dev] Could a Point behave like a Magnitude? :) In-Reply-To: References: <1471596258220-4911882.post@n4.nabble.com> Message-ID: 2016-08-19 12:25 GMT+02:00 Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com>: > Magnitude presume that < is a total order relationship > https://en.wikipedia.org/wiki/Total_order > > For point, <= is not a total order. > It might be that neither a <= b nor b <= a > So Point is not a good candidate for Magnitude > (side note: we had enough problems with Float nan which is unordered!) > > In short, why changing < is not a good idea? > 1) there's no natural definition of <= > 2) it breaks expectations > > In longer form: > > We could define some total order (Matlab did it for complex), there are > infinitely many possible definitions, like sort x first, then y, or radius > first, then angle, etc... > But it's not a good idea because there is no natural relation order, an > order that mix well with arithmetic like: > > (a <= b and: [c <= d]) ==> ((a+c) <= (b+d)) > Current definition of = has this property, but it's not total > > From a more formal POV, it's https://en.wikipedia.org/wiki/Ordered_field > Currently, I presume the usage in graphics are kind of testing if inside a > bounding box with > p >= topLeft and: [p <= bottomRight] > So I'm not amazed that we can easily break things by modifying such basic > method. > > In Matlab, defining < on complex has practically no interest (except when > there's small imaginary residuals), but prevents programs to fail, delaying > detection of errors. > For me, the most suspicious decision is to authorize Point < Number or > Number < Point, just because we can (or just because it's a side effect of > authorizing Point+Number). > It should rarely be usefull, and is going to wicken detection of errors > > 2016-08-19 10:44 GMT+02:00 marcel.taeumel : > >> Hi, there. >> >> Right now, this is can happen when comparing two points: >> >> (100@50) < (100@60). "false" >> (100@50) > (100@60). "false" >> (100@50) = (100@60). "false" >> >> This is because one component is the same and implementation in Point is >> like this: >> >> < anotherPoint >> ^x < aPoint x and: [y < aPoint y] >> >> Hence, points do not have like magnitudes. For the aformentioned >> examples, a >> "fix" could be: >> >> < anotherPoint >> ^(self >= anotherPoint) not >> >> Now, the interesting thing is that event handling (mouse clicks etc.) >> becomes awkward after that. :-D >> >> Best, >> Marcel >> >> >> >> >> >> >> -- >> View this message in context: http://forum.world.st/Could-a- >> Point-behave-like-a-Magnitude-tp4911882.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160819/b9659a08/attachment.htm From hannes.hirzel at gmail.com Fri Aug 19 11:20:34 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Aug 19 11:20:37 2016 Subject: [squeak-dev] Setting the default font for code browsers / inspectors? Message-ID: Hello How do I set the default font for inspectors to a TextStyle (in dictionary TextConstants) I have loaded with the FontImporter tool? Best Hannes From Marcel.Taeumel at hpi.de Fri Aug 19 13:14:14 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 19 13:15:11 2016 Subject: [squeak-dev] Re: Setting the default font for code browsers / inspectors? In-Reply-To: References: Message-ID: <1471612454111-4911913.post@n4.nabble.com> Hannes Hirzel wrote > Hello > > How do I set the default font for inspectors to a TextStyle (in > dictionary TextConstants) I have loaded with the FontImporter tool? > > Best > Hannes Hi Hannes, you just found another bug. :) I'm on it. Best, Marcel -- View this message in context: http://forum.world.st/Setting-the-default-font-for-code-browsers-inspectors-tp4911894p4911913.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From juanlists at jvuletich.org Fri Aug 19 15:28:16 2016 From: juanlists at jvuletich.org (juanlists@jvuletich.org) Date: Fri Aug 19 15:28:24 2016 Subject: [squeak-dev] [Ann] Cuis now runs on Spur! Message-ID: <20160819102816.Horde.mZoLJ7CA5J0ymKVdyjNy3tT@www.jvuletich.org> Hi Folks, I've successfully finished the Spur conversion of Cuis. I was able to merge all required changes to Cuis compiler and make it work in both ObjectMemories. Cuis is now offered in Spur and pre-Spur formats. And the best part is that they share 100% of the source code. There is no forking! This means that there is no extra work in maintaining both flavors. So, we are not leaving anyone behind. It also means that, at deployment, you might chose between better performance and larger memory (with Spur) or smaller footprint and SqueakJS compatibility (with pre-Spur). I've just updated our GitHub repo https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev . Included are Cuis4.2-2906-spur.image and Cuis4.2-2906.image, and, as usual, the whole update stream. I wrote a brief description of the Spur conversion at Documentation/SpurConversion.md, in case you want to reproduce it, or apply it to your own Cuis images. The images seem very stable. Please test them, load your code, and report any issues. This work was enabled by Eliot Miranda and the OpenSmalltalk team who develop Spur, VMMaker and the Spur bootstrap. Thank you folks! I also used Squeak 5 as a reference implementation of Compiler and related stuff. I also want to thank the greater Squeak community for it. Some cleanup is in order. The scaffolding I did for the conversion, including dual Compilers is still in the image. I'll be cleaning it soon. I'll also be able to pay a bit more attention to unrelated suggestions and ongoing discussion at cuis-dev@cuis-smalltalk.org Enjoy! Cheers, Juan Vuletich www.cuis-smalltalk.org https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev @JuanVuletich From lewis at mail.msen.com Fri Aug 19 15:43:22 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Fri Aug 19 15:44:32 2016 Subject: [squeak-dev] Re: [Cuis-dev] [Ann] Cuis is now Spur enabled! In-Reply-To: <57B72487.7070405@zoho.com> References: <57B72487.7070405@zoho.com> Message-ID: <20160819154322.GA48724@shell.msen.com> On Fri, Aug 19, 2016 at 12:23:51PM -0300, Juan Vuletich via Cuis-dev wrote: > Hi Folks, > > I've successfully finished the Spur conversion of Cuis. I was able to > merge all required changes to Cuis compiler and make it work in both > ObjectMemories. Cuis is now offered in Spur and pre-Spur formats. And > the best part is that they share 100% of the source code. There is no > forking! > Congratulations Juan and Eliot, this is very impressive! Dave From commits at source.squeak.org Fri Aug 19 16:16:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:16:03 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.46.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.46.mcz ==================== Summary ==================== Name: 51Deprecated-mt.46 Author: mt Time: 19 August 2016, 6:15:54.977803 pm UUID: f28de3d5-b412-5241-9975-7a7a6172a4bf Ancestors: 51Deprecated-mt.45 Same fix as in menu morphs. Due to some simplification in the inheritance chain of pluggable buttons, restore some rounded-corner methods as deprecated to improve backwards compatibility. =============== Diff against 51Deprecated-mt.45 =============== Item was added: + ----- Method: PluggableButtonMorph>>useRoundedCorners (in category '*51Deprecated') ----- + useRoundedCorners + self cornerStyle: #rounded! Item was added: + ----- Method: PluggableButtonMorph>>useSquareCorners (in category '*51Deprecated') ----- + useSquareCorners + self cornerStyle: #square! From commits at source.squeak.org Fri Aug 19 16:17:42 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:17:43 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.361.mcz Message-ID: Marcel Taeumel uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-mt.361.mcz ==================== Summary ==================== Name: Graphics-mt.361 Author: mt Time: 19 August 2016, 6:17:07.079803 pm UUID: 52823a41-bcec-cb4e-8375-c800e2d26392 Ancestors: Graphics-mt.360 Fixes workaround for misbehaving HostWindowPlugins. =============== Diff against Graphics-mt.360 =============== Item was changed: ----- Method: DisplayScreen class>>setNewScreenSize: (in category 'display box access') ----- setNewScreenSize: aPoint "Ensure that the Display is set to the given extent." self hostWindowExtent: aPoint. self checkForNewScreenSize. "In the Windows version of the host window plugin, the extent currently includes window decorations. Therefore, we need two attempts to ensure that the Display extent is aPoint. Note that this is a bug in the plugin." + (Display extent x < aPoint x or: [Display extent y < aPoint y]) ifTrue: [ - Display extent < aPoint ifTrue: [ self hostWindowExtent: 2*aPoint - Display extent. self checkForNewScreenSize].! From commits at source.squeak.org Fri Aug 19 16:19:32 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:19:35 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.362.mcz Message-ID: Marcel Taeumel uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-mt.362.mcz ==================== Summary ==================== Name: Graphics-mt.362 Author: mt Time: 19 August 2016, 6:19:00.721803 pm UUID: 7cb38816-2e1c-bb4b-b953-2f257ac0aea5 Ancestors: Graphics-mt.361 For fixing the demo mode, there should be a similar entry to a fixed font like there is for the standard system font. =============== Diff against Graphics-mt.361 =============== Item was added: + ----- Method: TextStyle class>>defaultFixed (in category 'constants') ----- + defaultFixed + + ^DefaultFixedTextStyle! Item was added: + ----- Method: TextStyle class>>defaultFixedFont (in category 'constants') ----- + defaultFixedFont + + ^ DefaultFixedTextStyle defaultFont! Item was added: + ----- Method: TextStyle class>>setDefaultFixed: (in category 'constants') ----- + setDefaultFixed: aTextStyle + + DefaultFixedTextStyle := aTextStyle.! From commits at source.squeak.org Fri Aug 19 16:22:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:22:53 2016 Subject: [squeak-dev] The Trunk: System-mt.903.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.903.mcz ==================== Summary ==================== Name: System-mt.903 Author: mt Time: 19 August 2016, 6:22:24.593803 pm UUID: e2088c5d-74c3-0b48-ad04-ee30a6f5c1ce Ancestors: System-mt.902 Fixes the demo/hi-dpi mode. Copies the current UI theme and installs large fonts there. Restoring fonts means looking for the UI that was copied from, by name for now. =============== Diff against System-mt.902 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkFonts: (in category 'instance creation') ----- addDarkFonts: aUserInterfaceTheme "Set-up fonts." aUserInterfaceTheme set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis italic emphasisCode); set: #standardButtonFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7); set: #standardCodeFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); - set: #standardDefaultTextFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardFlapFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardListFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardMenuFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardSystemFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #windowTitleFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9 emphasized: TextEmphasis bold emphasisCode)! Item was changed: ----- Method: MonokaiTheme class>>addDarkFonts: (in category 'instance creation') ----- addDarkFonts: theme "Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7); set: #standardButtonFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7); set: #standardCodeFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); - set: #standardDefaultTextFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardFlapFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardListFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardMenuFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardSystemFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #windowTitleFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9).! Item was added: + ----- Method: Preferences class>>chooseFixedFont (in category 'prefs - fonts') ----- + chooseFixedFont + self + chooseFontWithPrompt: 'Default fixed font...' translated + andSendTo: self + withSelector: #setFixedFontTo: + highlightSelector: #standardFixedFont! Item was changed: ----- Method: Preferences class>>fontConfigurationMenu: (in category 'prefs - fonts') ----- fontConfigurationMenu: aMenu aMenu removeAllMorphs. aMenu addTitle: 'Standard System Fonts' translated. aMenu addStayUpIcons. aMenu add: 'default text font...' translated action: #chooseSystemFont. + aMenu lastItem font: Preferences standardSystemFont. - aMenu lastItem font: Preferences standardDefaultTextFont. aMenu balloonTextForLastItem: 'Choose the default font to be used for code and in workspaces, transcripts, etc.' translated. + aMenu add: 'default fixed font...' translated action: #chooseFixedFont. + aMenu lastItem font: Preferences standardFixedFont. + aMenu balloonTextForLastItem: 'Choose the default font to be used for text that needs fixed width characters for layouting etc.' translated. aMenu add: 'list font...' translated action: #chooseListFont. aMenu lastItem font: Preferences standardListFont. aMenu balloonTextForLastItem: 'Choose the font to be used in list panes' translated. aMenu add: 'flaps font...' translated action: #chooseFlapsFont. aMenu lastItem font: Preferences standardFlapFont. aMenu balloonTextForLastItem: 'Choose the font to be used on textual flap tabs' translated. aMenu add: 'eToys font...' translated action: #chooseEToysFont. aMenu lastItem font: Preferences standardEToysFont. aMenu balloonTextForLastItem: 'Choose the font to be used on eToys environment' translated. aMenu add: 'eToys title font...' translated action: #chooseEToysTitleFont. aMenu lastItem font: Preferences standardEToysTitleFont. aMenu balloonTextForLastItem: 'Choose the font to be used in titles on eToys environment' translated. aMenu add: 'halo label font...' translated action: #chooseHaloLabelFont. aMenu lastItem font: Preferences standardHaloLabelFont. aMenu balloonTextForLastItem: 'Choose the font to be used on labels ih halo' translated. aMenu add: 'menu font...' translated action: #chooseMenuFont. aMenu lastItem font: Preferences standardMenuFont. aMenu balloonTextForLastItem: 'Choose the font to be used in menus' translated. aMenu add: 'window-title font...' translated action: #chooseWindowTitleFont. aMenu lastItem font: Preferences windowTitleFont. aMenu balloonTextForLastItem: 'Choose the font to be used in window titles.' translated. aMenu add: 'balloon-help font...' translated action: #chooseBalloonHelpFont. aMenu lastItem font: Preferences standardBalloonHelpFont. aMenu balloonTextForLastItem: 'choose the font to be used when presenting balloon help.' translated. aMenu add: 'code font...' translated action: #chooseCodeFont. aMenu lastItem font: Preferences standardCodeFont. aMenu balloonTextForLastItem: 'Choose the font to be used in code panes.' translated. aMenu add: 'button font...' translated action: #chooseStandardButtonFont. aMenu lastItem font: Preferences standardButtonFont. aMenu balloonTextForLastItem: 'Choose the font to be used in buttons.' translated. aMenu addLine. + aMenu add: 'demo/hi-dpi mode' translated action: #setDemoFonts. - aMenu add: 'demo mode' translated action: #setDemoFonts. aMenu balloonTextForLastItem: 'Set Fonts usable for giving a presentation' translated. aMenu addLine. aMenu add: 'restore default font choices' translated action: #restoreDefaultFonts. aMenu balloonTextForLastItem: 'Use the standard system font defaults' translated. + aMenu add: 'print current font choices' translated action: #printStandardSystemFonts. - aMenu add: 'print default font choices' translated action: #printStandardSystemFonts. aMenu balloonTextForLastItem: 'Print the standard system font defaults to the Transcript' translated. aMenu addLine. aMenu add: 'refresh this menu' translated target: self selector: #fontConfigurationMenu: argument: aMenu. aMenu balloonTextForLastItem: 'Update this menu to reflect the current fonts' translated. MenuIcons decorateMenu: aMenu. ^ aMenu! Item was changed: ----- Method: Preferences class>>restoreDefaultFonts (in category 'prefs - fonts') ----- restoreDefaultFonts "Since this is called from menus, we can take the opportunity to prompt for missing font styles." " Preferences restoreDefaultFonts " + + UserInterfaceTheme allThemes + detect: [:ea | UserInterfaceTheme current name ~= ea name + and: [UserInterfaceTheme current name includesSubstring: ea name]] + ifFound: [:ea | + (Project current uiManager + confirm: ('Do you want to apply\"{1}"?' translated withCRs format: {ea name}) + title: 'Apply UI Theme' translated) ifTrue: [ea apply]] + ifNone: [self inform: 'Sorry, could not revert font choices.\Please apply a UI theme with smaller fonts.' translated withCRs].! - - self setDefaultFonts: #( - (setSystemFontTo: 'Bitmap DejaVu Sans' 9) - (setListFontTo: 'Bitmap DejaVu Sans' 9) - (setFlapsFontTo: Accushi 12) - (setEToysFontTo: BitstreamVeraSansBold 9) - (setPaintBoxButtonFontTo: BitstreamVeraSansBold 9) - (setMenuFontTo: 'Bitmap DejaVu Sans' 9) - (setWindowTitleFontTo: 'Bitmap DejaVu Sans Bold' 9) - (setBalloonHelpFontTo: 'Bitmap DejaVu Sans' 7) - (setCodeFontTo: 'Bitmap DejaVu Sans' 9) - (setButtonFontTo: 'Bitmap DejaVu Sans' 7) - )! Item was changed: ----- Method: Preferences class>>setDemoFonts (in category 'prefs - fonts') ----- setDemoFonts "Preferences setDemoFonts" + | theme base | + self inform: 'The current UI theme will be copied\and larger fonts be installed.' translated withCRs. + + (UserInterfaceTheme current name beginsWith: 'Demo') + ifFalse: [ + "Create DEMO version of current theme." + theme := UserInterfaceTheme named: 'Demo'. + theme merge: UserInterfaceTheme current overwrite: true. + theme apply]. + + base := (TextStyle defaultFont name beginsWith: 'Darkmap') + ifTrue: ['Darkmap DejaVu Sans'] ifFalse: ['Bitmap DejaVu Sans']. + + self setDefaultFonts: { + {#setSystemFontTo:. base. 14}. + {#setFixedFontTo:. 'BitstreamVeraSansMono'. 16}. + {#setListFontTo:. base. 14}. + {#setFlapsFontTo:. base. 12}. + {#setEToysFontTo:. base. 14}. + {#setPaintBoxButtonFontTo:. base. 14}. + {#setMenuFontTo:. base . 14}. + {#setWindowTitleFontTo:. base, ' B'. 14}. + {#setBalloonHelpFontTo:. base. 12}. + {#setCodeFontTo:. base. 14}. + {#setButtonFontTo:. base. 12}. + } - self setDefaultFonts: #( - (setSystemFontTo: BitstreamVeraSans 12) - (setListFontTo: BitstreamVeraSans 14) - (setFlapsFontTo: Accushi 12) - (setEToysFontTo: BitstreamVeraSansBold 9) - (setPaintBoxButtonFontTo: BitstreamVeraSansBold 9) - (setMenuFontTo: BitstreamVeraSans 14) - (setWindowTitleFontTo: BitstreamVeraSansBold 12) - (setBalloonHelpFontTo: Accujen 18) - (setCodeFontTo: BitstreamVeraSans 18) - (setButtonFontTo: BitstreamVeraSansMono 14) - ) ! Item was added: + ----- Method: Preferences class>>setFixedFontTo: (in category 'prefs - fonts') ----- + setFixedFontTo: aFont + "Establish the default fixed text font and style" + + | aStyle newDefaultStyle | + aFont ifNil: [^ self]. + aStyle := aFont textStyle ifNil: [^ self]. + + newDefaultStyle := aStyle copy. + newDefaultStyle defaultFontIndex: (aStyle fontIndexOf: aFont). + + UserInterfaceTheme current + set: #standardFixedFont to: aFont; + apply. + + TextStyle setDefaultFixed: newDefaultStyle.! Item was changed: ----- Method: Preferences class>>setSystemFontTo: (in category 'prefs - fonts') ----- setSystemFontTo: aFont "Establish the default text font and style" | aStyle newDefaultStyle | aFont ifNil: [^ self]. aStyle := aFont textStyle ifNil: [^ self]. newDefaultStyle := aStyle copy. newDefaultStyle defaultFontIndex: (aStyle fontIndexOf: aFont). + + UserInterfaceTheme current + set: #standardSystemFont to: aFont; + apply. + + TextStyle setDefault: newDefaultStyle. - TextConstants at: #DefaultTextStyle put: newDefaultStyle. Flaps replaceToolsFlap. + ScriptingSystem resetStandardPartsBin. + + ! - ScriptingSystem resetStandardPartsBin! Item was changed: ----- Method: Preferences class>>standardDefaultTextFont (in category 'prefs - fonts') ----- standardDefaultTextFont + ^TextStyle defaultFont! - - ^ (UserInterfaceTheme current get: #standardDefaultTextFont) - ifNil: [TextStyle defaultFont]! Item was added: + ----- Method: Preferences class>>standardFixedFont (in category 'prefs - fonts') ----- + standardFixedFont + "Answer the standard fixed font " + + ^ (UserInterfaceTheme current get: #standardFixedFont) + ifNil: [TextStyle defaultFixedFont]! Item was changed: ----- Method: RealEstateAgent class>>initialFrameFor:initialExtent:world: (in category 'framing') ----- initialFrameFor: aView initialExtent: initialExtent world: aWorld | scaledExtent | + scaledExtent := (initialExtent * self scaleFactor) rounded. - scaledExtent := Preferences bigDisplay - ifTrue: [(initialExtent * 1.75) rounded] - ifFalse: [initialExtent]. ^ Preferences reverseWindowStagger ifTrue: [self strictlyStaggeredInitialFrameFor: aView initialExtent: scaledExtent world: aWorld] ifFalse: [self normalInitialFrameFor: aView initialExtent: scaledExtent world: aWorld]! Item was added: + ----- Method: RealEstateAgent class>>scaleFactor (in category 'framing') ----- + scaleFactor + "Use the default font height to calculate some factor. Better than nothing..." + + ^ (TextStyle defaultFont height / 14 "reference value") * (Preferences bigDisplay ifTrue: [1.75] ifFalse: [1.0])! Item was changed: ----- Method: SolarizedTheme class>>addDarkFonts: (in category 'instance creation') ----- addDarkFonts: theme "Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7); set: #standardButtonFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7); set: #standardCodeFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); - set: #standardDefaultTextFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardFlapFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardListFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardMenuFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #standardSystemFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9); set: #windowTitleFont to: (StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9).! Item was changed: ----- Method: SolarizedTheme class>>addLightFonts: (in category 'instance creation') ----- addLightFonts: theme "Set-up fonts." theme set: #balloonHelpFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7); set: #standardButtonFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7); set: #standardCodeFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); - set: #standardDefaultTextFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardFlapFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardListFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardMenuFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardSystemFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #windowTitleFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9 emphasized: TextEmphasis bold emphasisCode).! Item was changed: ----- Method: SqueakTheme class>>addFonts: (in category 'instance creation') ----- addFonts: theme theme set: #balloonHelpFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7); set: #standardButtonFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7); set: #standardCodeFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); - set: #standardDefaultTextFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardFlapFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 7 emphasized: TextEmphasis bold emphasisCode); set: #haloLabelFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardListFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardMenuFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); set: #standardSystemFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9); + set: #standardFixedFont to: (TTCFont familyName: 'BitstreamVeraSansMono' pointSize: 12 emphasis: 0); set: #windowTitleFont to: (StrikeFont familyName: 'Bitmap DejaVu Sans' pointSize: 9 emphasized: TextEmphasis bold emphasisCode). ! Item was changed: ----- Method: SqueakTheme class>>addScrollables: (in category 'instance creation') ----- addScrollables: theme "self create apply" "Sliders" theme set: #borderColor for: #Slider to: Color gray; set: #borderWidth for: #Slider to: 1; set: #color for: #Slider to: Color lightGray; set: #thumbBorderColor for: #Slider to: [Color gray: 0.6]; set: #thumbBorderWidth for: #Slider to: 0; set: #thumbColor for: #Slider to: Color veryVeryLightGray; set: #thumbShadowModifier for: #Slider to: [ [:c | c alpha: 0.7] ]. "Scroll bars" theme set: #thumbBorderWidth for: #ScrollBar to: 1; set: #thumbColorModifier for: #ScrollBar to: [ [:c | c] ]; set: #pagingAreaColorModifier for: #ScrollBar to: [ [:c | c darker alpha: 0.35] ]; set: #borderColorModifier for: #ScrollBar to: [ [:c | c adjustBrightness: -0.3] ]. "Scroll panes (includes generic stuff for list widgets, tree widgets, and text widgets." theme set: #borderColor for: #ScrollPane to: (Color gray: 0.6); set: #borderWidth for: #ScrollPane to: 1; set: #borderStyle for: #ScrollPane to: BorderStyle default; set: #color for: #ScrollPane to: Color white. "List widgets" theme set: #font for: #PluggableListMorph to: [Preferences standardListFont]; set: #textColor for: #PluggableListMorph to: Color black; set: #selectionColor for: #PluggableListMorph to: (Color r: 0.72 g: 0.72 b: 0.9); derive: #multiSelectionColor for: #PluggableListMorph from: #PluggableListMorph at: #selectionColor do: [:c | c lighter]; set: #selectionTextColor for: #PluggableListMorph to: Color black; set: #filterColor for: #PluggableListMorph to: Color yellow paler; set: #filterTextColor for: #PluggableListMorph to: Color black; set: #preSelectionModifier for: #PluggableListMorph to: [ [:c | Color gray: 0.9] ]; set: #hoverSelectionModifier for: #PluggableListMorph to: [ [:c | c darker alpha: 0.3] ]. "Tree widgets" theme derive: #font for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #textColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #selectionColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #selectionTextColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #filterColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #filterTextColor for: #SimpleHierarchicalListMorph from: #PluggableListMorph; derive: #hoverSelectionModifier for: #SimpleHierarchicalListMorph from: #PluggableListMorph; set: #higlightTextColor for: #SimpleHierarchicalListMorph to: Color red; set: #lineColor for: #SimpleHierarchicalListMorph to: Color veryLightGray. "Text widgets" theme + set: #font for: #PluggableTextMorph to: [Preferences standardSystemFont]; - set: #font for: #PluggableTextMorph to: [Preferences standardDefaultTextFont]; set: #textColor for: #PluggableTextMorph to: Color black; set: #caretColor for: #PluggableTextMorph to: Color red; set: #selectionColor for: #PluggableTextMorph to: (TranslucentColor r: 0.0 g: 0.0 b: 0.8 alpha: 0.2); set: #unfocusedSelectionModifier for: #PluggableTextMorph to: [ [:c | Color gray: 0.9] ]; set: #adornmentReadOnly for: #PluggableTextMorph to: Color black; set: #adornmentRefuse for: #PluggableTextMorph to: Color tan; set: #adornmentConflict for: #PluggableTextMorph to: Color red; set: #adornmentDiff for: #PluggableTextMorph to: Color green; set: #adornmentNormalEdit for: #PluggableTextMorph to: Color orange; set: #adornmentDiffEdit for: #PluggableTextMorph to: Color yellow; set: #frameAdornmentWidth for: #PluggableTextMorph to: 1. theme set: #balloonTextColor for: #PluggableTextMorphPlus to: (Color gray: 0.7); derive: #balloonTextFont for: #PluggableTextMorphPlus from: #PluggableTextMorph at: #font.! Item was changed: Object subclass: #UserInterfaceTheme + instanceVariableNames: 'scope properties name next ignoreApply lastScaleFactor' - instanceVariableNames: 'scope properties name next ignoreApply' classVariableNames: 'All Current Default' poolDictionaries: '' category: 'System-Support'! !UserInterfaceTheme commentStamp: '' prior: 0! A UserInterfaceTheme is a dictionary of preferred visual-properties; colors, borderStyles, borderWidths, fonts, forms, etc. used to color and style the IDE. Accessing The Theme To access the proper UserInterfaceTheme instance for an object, send it #userInterfaceTheme. The default implementation on Object provides the one instance of that is in-use by the IDE at the current time. Customizing The Theme We can ask the userInterfaceTheme for the value of any visual-property, by name: mySystemWindow userInterfaceTheme closeBoxImage Initially, the above answers nil, which causes the legacy code to use whatever default it's always used. To override various visual-properties of any kind of object, the #set: onAny: to: message can be used. For example, myUserInterfaceTheme set: #closeBoxImage for: SystemWindow to: MenuIcons smallCancelIcon Alternatively, values may be derived based on other values in the theme, as in: myUserInterfaceTheme set: #color for: FillInTheBlankMorph to: { MenuMorph->#color. #twiceDarker } Now, the accessing expression, above, will answer will answer MenuIcons' smallCancelIcon instead of nil. SystemWindow's code can be changed to use the expression above to access elements of the theme. Upgrading Legacy Code Following the introduction of this class, various client code all around the system must be modified to access it. This variety of legacy code uses a variety of methods to specify their visual properties: 1) a hard-coded values. 2) a values derived from some other value. 3) providing local storage for a settable value which can be nil. 4) providing local storage for a settable value which is expected to always have a particular valid value (never nil). The requirement, for each case, is to let the value be overridden. The solution for each of the above should be handled respectively to the above list, as follows: 1) Check the userInterfaceTheme, if that property returns nil, use the legacy hard-coded value. (see example: SystemWindow>>#createCloseBox). 2) Nothing to do -- simply perform the same derivation on the result of (1). 3) Check the local storage, if present, use it. If nil, then check the userInterfaceTheme, if it has this property present, use it, else return nil. 4) Check the userInterfaceTheme, if the property is not nil, use it, otherwise use the local value. Tool Support If a new access to #userInterfaceTheme is added to the code, be sure to add the property and its description to the #themeSettings for that class. See implementors of #themeSettings for examples.! Item was changed: ----- Method: UserInterfaceTheme>>apply (in category 'actions') ----- apply "Apply this theme to all affected objects. Let classes decide on how to iterate and call their instances." ignoreApply == true ifTrue: [^ self]. + - UserInterfaceTheme current: self. + self fixFontsAndScaleAround: [ - self class clientClassesToReapply in: [:cc | - cc do: [:eachClass | eachClass applyUserInterfaceTheme]. - Cursor wait showWhile: [ - SystemNavigation default allObjectsDo: [:o | - ((cc includes: o class) - and: [o canApplyUserInterfaceTheme]) - ifTrue: [o applyUserInterfaceTheme]]]]. + self class clientClassesToReapply in: [:cc | + cc do: [:eachClass | eachClass applyUserInterfaceTheme]. + Cursor wait showWhile: [ + SystemNavigation default allObjectsDo: [:o | + ((cc includes: o class) + and: [o canApplyUserInterfaceTheme]) + ifTrue: [o applyUserInterfaceTheme]]]]. + ]. "fix fonts" + Project current restoreDisplay.! Item was changed: ----- Method: UserInterfaceTheme>>applyAfter: (in category 'actions') ----- applyAfter: block ignoreApply := true. + lastScaleFactor := RealEstateAgent scaleFactor. ^ block ensure: [ignoreApply := false. self apply]! Item was added: + ----- Method: UserInterfaceTheme>>fixFontsAndScaleAround: (in category 'private') ----- + fixFontsAndScaleAround: block + "Due to the current situation with fonts and the real-estate manager, this is a small workaround to support theme switching with largely different font sizes." + + lastScaleFactor ifNil: [lastScaleFactor := RealEstateAgent scaleFactor]. + + "Due to the current font situation, update TextConstants." + [ ignoreApply := true. + (self get: #standardSystemFont) ifNotNil: [:font | Preferences setSystemFontTo: font]. + (self get: #standardFixedFont) ifNotNil: [:font | Preferences setFixedFontTo: font]. + ] ensure: [ignoreApply := false]. + + "Apply theme etc." + block value. + + "Due to the current real-estate manager situation, resize all windows. Works only for Morphic projects." + (RealEstateAgent scaleFactor - lastScaleFactor) abs > 0.5 ifTrue: [ + Project current isMorphic ifTrue: [ + | scale | + scale := RealEstateAgent scaleFactor / lastScaleFactor. + Project current world submorphs + select: [:ea | ea isSystemWindow] + thenDo: [:ea | ea extent: (ea extent * scale)]]]. + + lastScaleFactor := nil.! From commits at source.squeak.org Fri Aug 19 16:28:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:28:24 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1290.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1290.mcz ==================== Summary ==================== Name: Morphic-mt.1290 Author: mt Time: 19 August 2016, 6:27:47.365803 pm UUID: 3ac6e74f-c6c7-cf46-98e3-f54b7e5ae340 Ancestors: Morphic-mt.1289 Fixes minor layout issues when switching to/from demo/hi-dpi mode. Considering open sytsem windows, this is still far from perfect but okay. =============== Diff against Morphic-mt.1289 =============== Item was changed: ----- Method: SimpleHierarchicalListMorph>>applyUserInterfaceTheme (in category 'updating') ----- applyUserInterfaceTheme + super applyUserInterfaceTheme. + self adjustSubmorphPositions.! - super applyUserInterfaceTheme.! Item was changed: ----- Method: SystemWindow>>extent: (in category 'geometry') ----- extent: aPoint "Set the receiver's extent to value provided. Respect my minimumExtent." | newExtent | newExtent := self isCollapsed ifTrue: [aPoint] ifFalse: [aPoint max: self minimumExtent]. newExtent = self extent ifTrue: [^ self]. isCollapsed + ifTrue: [super extent: newExtent x @ (self labelHeight + (self layoutInset * 2))] - ifTrue: [super extent: newExtent x @ (self labelHeight + 2)] ifFalse: [super extent: newExtent]. isCollapsed ifTrue: [collapsedFrame := self bounds] ifFalse: [fullFrame := self bounds]! Item was changed: ----- Method: SystemWindow>>labelHeight (in category 'label') ----- labelHeight "Answer the height for the window label. The standard behavior is at bottom; a hook is provided so that models can stipulate other heights, in support of various less-window-looking demos." | aHeight | (model notNil and: [model respondsTo: #desiredWindowLabelHeightIn:]) ifTrue: [(aHeight := model desiredWindowLabelHeightIn: self) ifNotNil: [^ aHeight]]. ^ label ifNil: [0] ifNotNil: + [(label height + self cellInset + self layoutInset) max: - [(label height + (self class borderWidth * 2)) max: (collapseBox ifNotNil: [collapseBox height] ifNil: [10])]! Item was changed: ----- Method: TheWorldMainDockingBar>>toggleFullScreenOn: (in category 'right side') ----- toggleFullScreenOn: aDockingBar | toggleMorph onIcon offIcon box bgColor | offIcon := MenuIcons fullscreenWireframeIconColorized: (self userInterfaceTheme logoColor ifNil: [Color black]). onIcon := MenuIcons fullscreenWireframeIconColorized: (self userInterfaceTheme selectionLogoColor ifNil: [Color white]). bgColor := (UserInterfaceTheme current get: #selectionColor for: #DockingBarItemMorph) ifNil: [Color blue]. toggleMorph := offIcon asMorph. box := Morph new color: Color transparent; hResizing: #shrinkWrap; vResizing: #spaceFill; + listCentering: #center; width: toggleMorph width; changeTableLayout; borderWidth: 1; borderColor: Color transparent; balloonText: 'toggle full screen mode' translated; addMorph: toggleMorph. toggleMorph setToAdhereToEdge: #rightCenter. box on: #mouseUp send: #value to: [ DisplayScreen toggleFullScreen. "toggleMorph image: MenuIcons smallFullscreenOffIcon" ] ; on: #mouseEnter send: #value to: [ toggleMorph image: onIcon. box color: bgColor; borderColor: bgColor]; on: #mouseLeave send: #value to: [ toggleMorph image: offIcon. box color: Color transparent; borderColor: Color transparent]. aDockingBar addMorphBack: box! From commits at source.squeak.org Fri Aug 19 16:29:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:29:49 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.164.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.164.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.164 Author: mt Time: 19 August 2016, 6:29:40.048803 pm UUID: 4e97c3c5-9734-b64e-b37f-a9551aebdeeb Ancestors: ReleaseBuilder-mt.163 Clear existing drawing error flags for the current Morphic world to not be surprised if you want to make a screenshot from the World. =============== Diff against ReleaseBuilder-mt.163 =============== Item was changed: ----- Method: ReleaseBuilder class>>checkCurrentProjects (in category 'scripts - support') ----- checkCurrentProjects Project current isMorphic ifFalse: [ Warning signal: 'The current project is not Morphic. Please create a new Morphic project, enter it, and restart the release building process.']. Project allProjects size = 1 ifFalse: [ + Warning signal: 'There should only be one project.']. + + "Avoid strange drawing issues." + Project current world allMorphsDo: [:m | m removeProperty: #errorOnDraw].! - Warning signal: 'There should only be one project.'].! Item was removed: - ----- Method: ReleaseBuilder class>>setTopProject (in category 'scripts - support') ----- - setTopProject - - Project current isMorphic ifFalse: [ - Warning signal: 'The current project is not Morphic. A new Morphic project will be created and entered. Please restart the release building process after that.'. - MorphicProject new enter "current process terminates after this"]. - - Project current removeAllOtherProjects.! From commits at source.squeak.org Fri Aug 19 16:32:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:32:57 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Morphic-mt.187.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-Morphic to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Morphic-mt.187.mcz ==================== Summary ==================== Name: ToolBuilder-Morphic-mt.187 Author: mt Time: 19 August 2016, 6:32:48.042803 pm UUID: 58914070-3c40-2a4b-acd7-8b973c185576 Ancestors: ToolBuilder-Morphic-mt.186 For demo/hi-dpi mode compatibility, adjust height of line edit in list chooser. =============== Diff against ToolBuilder-Morphic-mt.186 =============== Item was changed: ----- Method: ListChooser>>buildWith: (in category 'building') ----- buildWith: builder | dialogSpec searchBarHeight listSpec fieldSpec | + searchBarHeight := Preferences standardDefaultTextFont height * 1.75. - searchBarHeight := Preferences standardDefaultTextFont height * 2. dialogSpec := builder pluggableDialogSpec new model: self; title: #title; closeAction: #closed; extent: self initialExtent; autoCancel: true; "behave like a pop-up menu" children: OrderedCollection new; buttons: OrderedCollection new; yourself. listSpec := builder pluggableListSpec new. listSpec model: self; list: #items; getIndex: #selectedIndex; setIndex: #selectedIndex:; doubleClick: #accept; "keystrokePreview: #keyStrokeFromList:;" autoDeselect: false; filterableList: true; clearFilterAutomatically: false; name: #list; frame: (LayoutFrame fractions: (0@0 corner: 1@1) offsets: (0@searchBarHeight corner: 0@0)). dialogSpec children add: listSpec. fieldSpec := builder pluggableInputFieldSpec new. fieldSpec model: self; getText: #searchText; editText: #searchText:; setText: #acceptText:; selection: #textSelection; menu: nil; indicateUnacceptedChanges: false; askBeforeDiscardingEdits: false; help: (self addAllowed ifTrue: ['Type new or filter existing...' translated] ifFalse: ['Type to filter existing...' translated]); frame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (0@0 corner: 0@searchBarHeight)). dialogSpec children add: fieldSpec. "Buttons" dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: #acceptLabel; action: #accept; enabled: #canAcceptOrAdd; color: #acceptColor). dialogSpec buttons add: ( builder pluggableButtonSpec new model: self; label: 'Cancel'; action: #cancel; color: #cancelColor). dialogMorph := builder build: dialogSpec. dialogMorph addKeyboardCaptureFilter: self. listMorph := builder widgetAt: #list. listMorph allowEmptyFilterResult: true. ^ dialogMorph! From commits at source.squeak.org Fri Aug 19 16:34:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:34:29 2016 Subject: [squeak-dev] The Trunk: SystemReporter-mt.30.mcz Message-ID: Marcel Taeumel uploaded a new version of SystemReporter to project The Trunk: http://source.squeak.org/trunk/SystemReporter-mt.30.mcz ==================== Summary ==================== Name: SystemReporter-mt.30 Author: mt Time: 19 August 2016, 6:34:20.894803 pm UUID: 8d824742-73a5-c64c-8a62-8506bb454ee4 Ancestors: SystemReporter-mt.29 For demo/hi-dpi mode compatibility, use the system-wide fixed font and not some hard-coded value. =============== Diff against SystemReporter-mt.29 =============== Item was changed: ----- Method: SystemReporter>>updateReport (in category 'updating') ----- updateReport report := Text streamContents: [:stream | stream + withAttribute: (TextFontReference toFont: Preferences standardFixedFont) - withAttribute: (TextFontReference toFont: ((TextStyle named: 'BitstreamVeraSansMono') fontOfSize: 16)) do: [ self categoryList do: [:each | (categoriesSelected includes: each) ifTrue: [ self perform: ((categories at: each), ':') asSymbol with: stream. stream cr]]]]. self changed: #reportText! From commits at source.squeak.org Fri Aug 19 16:36:05 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:36:06 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1291.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1291.mcz ==================== Summary ==================== Name: Morphic-mt.1291 Author: mt Time: 19 August 2016, 6:35:22.021803 pm UUID: 8443628c-5f86-ee46-a68e-cd1c3a6f7b8f Ancestors: Morphic-mt.1290 Fix some edge cases when printing keyboard events. =============== Diff against Morphic-mt.1290 =============== Item was changed: ----- Method: KeyboardEvent>>printKeyStringOn: (in category 'printing') ----- printKeyStringOn: aStream "Print a readable string representing the receiver on a given stream" | kc inBrackets firstBracket keyString | kc := self keyCharacter. inBrackets := false. firstBracket := [ inBrackets ifFalse: [ aStream nextPut: $<. inBrackets := true ]]. self controlKeyPressed ifTrue: [ firstBracket value. aStream nextPutAll: 'Ctrl-' ]. self commandKeyPressed ifTrue: [ firstBracket value. aStream nextPutAll: 'Cmd-' ]. (buttons anyMask: 32) ifTrue: [ firstBracket value. aStream nextPutAll: 'Opt-' ]. + (self shiftPressed and: [ (keyValue between: 1 and: 31) or: [self keyCharacter = Character delete ]]) - (self shiftPressed and: [ keyValue between: 1 and: 31 ]) ifTrue: [ firstBracket value. aStream nextPutAll: 'Shift-' ]. + keyString := (kc caseOf: { + [ Character space ] -> [ 'space' ]. + [ Character tab ] -> [ 'tab' ]. + [ Character cr ] -> [ 'cr' ]. + [ Character lf ] -> [ 'lf' ]. + [ Character enter ] -> [ 'enter' ]. - (self controlKeyPressed and: [ keyValue <= 26 ]) - ifTrue: - [aStream nextPut: (keyValue + $a asciiValue - 1) asCharacter] - ifFalse: - [keyString := (kc caseOf: { - [ Character space ] -> [ ' ' ]. - [ Character tab ] -> [ 'tab' ]. - [ Character cr ] -> [ 'cr' ]. - [ Character lf ] -> [ 'lf' ]. - [ Character enter ] -> [ 'enter' ]. + [ Character backspace ] -> [ 'backspace' ]. + [ Character delete ] -> [ 'delete' ]. - [ Character backspace ] -> [ 'backspace' ]. - [ Character delete ] -> [ 'delete' ]. + [ Character escape ] -> [ 'escape' ]. - [ Character escape ] -> [ 'escape' ]. + [ Character arrowDown ] -> [ 'down' ]. + [ Character arrowUp ] -> [ 'up' ]. + [ Character arrowLeft ] -> [ 'left' ]. + [ Character arrowRight ] -> [ 'right' ]. - [ Character arrowDown ] -> [ 'down' ]. - [ Character arrowUp ] -> [ 'up' ]. - [ Character arrowLeft ] -> [ 'left' ]. - [ Character arrowRight ] -> [ 'right' ]. + [ Character end ] -> [ 'end' ]. + [ Character home ] -> [ 'home' ]. + [ Character pageDown ] -> [ 'pageDown' ]. + [ Character pageUp ] -> [ 'pageUp' ]. - [ Character end ] -> [ 'end' ]. - [ Character home ] -> [ 'home' ]. - [ Character pageDown ] -> [ 'pageDown' ]. - [ Character pageUp ] -> [ 'pageUp' ]. + [ Character euro ] -> [ 'euro' ]. + [ Character insert ] -> [ 'insert' ]. - [ Character euro ] -> [ 'euro' ]. - [ Character insert ] -> [ 'insert' ]. + } otherwise: [ String with: kc ]). + + keyString size > 1 ifTrue: [ firstBracket value ]. + aStream nextPutAll: keyString. - } otherwise: [ String with: kc ]). - keyString size > 1 ifTrue: [ firstBracket value ]. - aStream nextPutAll: keyString]. inBrackets ifTrue: [aStream nextPut: $> ]! Item was changed: ----- Method: KeyboardEvent>>printOn: (in category 'printing') ----- printOn: aStream "Print the receiver on a stream" aStream nextPut: $[. aStream nextPutAll: self cursorPoint printString; space. aStream nextPutAll: type; nextPutAll: ' '''. self printKeyStringOn: aStream. aStream nextPut: $'; space. + aStream nextPut: $(. + aStream nextPutAll: keyValue printString. + aStream nextPut: $); space. aStream nextPutAll: timeStamp printString. aStream nextPut: $]! From commits at source.squeak.org Fri Aug 19 16:37:39 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:37:40 2016 Subject: [squeak-dev] The Trunk: System-mt.904.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.904.mcz ==================== Summary ==================== Name: System-mt.904 Author: mt Time: 19 August 2016, 6:37:13.841803 pm UUID: 19e7a30a-d90c-9843-ada7-c3a6533cb333 Ancestors: System-mt.903 Adds some guards when setting a new system version since that description is used for the automated building process. =============== Diff against System-mt.903 =============== Item was changed: ----- Method: SystemVersion class>>newVersion: (in category 'instance creation') ----- newVersion: versionName | newVersion | + + self assert: (versionName beginsWith: 'Squeak'). + newVersion := self new version: versionName. + + self assert: newVersion majorVersionNumber notNil. + self assert: newVersion minorVersionNumber notNil. + self assert: newVersion isSqueak. + + self assert: (#(isRelease isAlpha isFeatureFreeze isCodeFreeze isReleaseCandidate) + anySatisfy: [:sel | newVersion perform: sel]). + + newVersion highestUpdate: self current highestUpdate. - newVersion - highestUpdate: self current highestUpdate. Current := newVersion ! Item was changed: ----- Method: SystemVersion>>majorVersionNumber (in category 'accessing') ----- majorVersionNumber + (version indexOf: $.) = 0 ifTrue: [^ nil]. ^ (version copyFrom: 'Squeak' size to: (version indexOf: $.)) asInteger! Item was changed: ----- Method: SystemVersion>>minorVersionNumber (in category 'accessing') ----- minorVersionNumber | pointIndex | pointIndex := version indexOf: $.. + pointIndex = 0 ifTrue: [^ nil]. ^ (version copyFrom: pointIndex to: (self isRelease "e.g. Squeak5.1" ifTrue: [version size] "e.g. Squeak5.1rc5" ifFalse: [(pointIndex+1 to: version size) detect: [:ea | (version at: ea) isDigit not]])) asInteger! From commits at source.squeak.org Fri Aug 19 16:39:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:39:40 2016 Subject: [squeak-dev] The Trunk: System-mt.905.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.905.mcz ==================== Summary ==================== Name: System-mt.905 Author: mt Time: 19 August 2016, 6:38:58.361803 pm UUID: 78d165d8-f1ff-2e4c-aa1c-5c8ce2c57538 Ancestors: System-mt.904 Fabio told me that he now commits under FabN. =============== Diff against System-mt.904 =============== Item was changed: ----- Method: SystemNavigation class>>privateAuthorsRaw (in category 'class initialization') ----- (excessive size, no diff calculated) From cunningham.cb at gmail.com Fri Aug 19 16:49:38 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Fri Aug 19 16:49:40 2016 Subject: [squeak-dev] oooooh nice - modal dialog wiggler Message-ID: I don't know when this feature was added, but I just ran across it. When a modal dialog is open and you try to do something else (instead of dealing with the dialog), the system wiggles the dialog. Bringing my attention to it to deal with the issue. Not having modal dialogs might be nicer - but this does a nice job bringing your attention back to what needs to be completed. thanks! -cbc -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160819/8bc80453/attachment.htm From commits at source.squeak.org Fri Aug 19 16:53:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 16:53:15 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.165.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.165.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.165 Author: mt Time: 19 August 2016, 6:52:58.233602 pm UUID: eea6942a-42bc-804f-b43b-3c8d2aab4202 Ancestors: ReleaseBuilder-mt.164 Small fix for "doing the next step" and bump system version to be the second release candidate. =============== Diff against ReleaseBuilder-mt.164 =============== Item was changed: ----- Method: ReleaseBuilder class>>doNextStep (in category 'manual - steps') ----- doNextStep "Use this call to perform the manual steps in the release process." | versionString | SystemVersion current isRelease ifTrue: [ ^ self inform: 'This is a release image. Please use a trunk image to prepare the next release']. versionString := SystemVersion current version. SystemVersion current isAlpha ifTrue: [^ self step1FeatureFreeze]. + (SystemVersion current isFeatureFreeze and: [SystemVersion current isCodeFreeze not]) ifTrue: [^ self step2CodeFreeze]. - SystemVersion current isFeatureFreeze ifTrue: [^ self step2CodeFreeze]. SystemVersion current isReleaseCandidate ifTrue: [ "Still code freeze and another RC? Or do the release?" (UIManager default chooseFrom: #('Create next release candidate' 'Create next release' 'Do nothing') lines: #(2) title: versionString) in: [:answer | answer = 1 ifTrue: [^ self step3NextReleaseCandidate]. answer = 2 ifTrue: [^ self step4Release]]. ^ self].! Item was changed: ----- Method: ReleaseBuilder class>>initialize (in category 'class initialization') ----- initialize "We have to be after AutoStart so that Morphic is up and running." Smalltalk addToStartUpList: ReleaseBuilder after: AutoStart. + SystemVersion newVersion: 'Squeak5.1rc2'.! - SystemVersion newVersion: 'Squeak5.1rc1'.! From Marcel.Taeumel at hpi.de Fri Aug 19 16:56:49 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Fri Aug 19 16:57:47 2016 Subject: [squeak-dev] Re: oooooh nice - modal dialog wiggler In-Reply-To: References: Message-ID: <1471625809389-4911973.post@n4.nabble.com> cbc wrote > I don't know when this feature was added, but I just ran across it. > > When a modal dialog is open and you try to do something else (instead of > dealing with the dialog), the system wiggles the dialog. Bringing my > attention to it to deal with the issue. > > Not having modal dialogs might be nicer - but this does a nice job > bringing > your attention back to what needs to be completed. > > thanks! > > -cbc Hi Chris, modal dialogs are still rare in Squeak. Especially the list chooser, which now looks like a dialog, can be dismissed/cancelled by clicking anywhere. Any dialog grabs the keyboard when being opened and can be dismissed with the [ESC] key. Best, Marcel -- View this message in context: http://forum.world.st/oooooh-nice-modal-dialog-wiggler-tp4911971p4911973.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From cunningham.cb at gmail.com Fri Aug 19 17:06:22 2016 From: cunningham.cb at gmail.com (Chris Cunningham) Date: Fri Aug 19 17:06:26 2016 Subject: [squeak-dev] Re: oooooh nice - modal dialog wiggler In-Reply-To: <1471625809389-4911973.post@n4.nabble.com> References: <1471625809389-4911973.post@n4.nabble.com> Message-ID: The particular one that caught my attention was closing a debug window where I had written code in the source pane (to finish a process) that I didn't want to save. So, closed the Debug, and went to close other windows that I had used and didn't need - but I got the wiggle instead - asking if I really wanted to discard the changes made in the debugger. In other words, found one of the rare dialogs. And, yes, esc or return would work - but its nice to be reminded what will be impacted before doing one of those. -cbc On Fri, Aug 19, 2016 at 9:56 AM, marcel.taeumel wrote: > cbc wrote > > I don't know when this feature was added, but I just ran across it. > > > > When a modal dialog is open and you try to do something else (instead of > > dealing with the dialog), the system wiggles the dialog. Bringing my > > attention to it to deal with the issue. > > > > Not having modal dialogs might be nicer - but this does a nice job > > bringing > > your attention back to what needs to be completed. > > > > thanks! > > > > -cbc > > Hi Chris, > > modal dialogs are still rare in Squeak. Especially the list chooser, which > now looks like a dialog, can be dismissed/cancelled by clicking anywhere. > > Any dialog grabs the keyboard when being opened and can be dismissed with > the [ESC] key. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/oooooh- > nice-modal-dialog-wiggler-tp4911971p4911973.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160819/5f4844b4/attachment.htm From lists at fniephaus.com Fri Aug 19 19:41:31 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Fri Aug 19 19:41:45 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: On Fri, Aug 19, 2016 at 2:34 AM tim Rowledge wrote: > > > On 18-08-2016, at 5:13 PM, tim Rowledge wrote: > > {snip} > > > > Note how the various major/minor variables are 4+ and not 4 etc. I guess > this is what is causing the comparisons to fail? That ?re? needs some > massaging. > > To get past that quickly I commented out the broken bits. It then > proceeded to try to create the security/limits file even though it isn?t > required. The ensure_conf_file needs to depend upon the kernel level. > I had a secondary problem due to having unzipped the package on my Mac > which left .AppleDouble files around; ideally that ought not cause a > problem if the `find` call is a bit cleverer. Why does it descend into > .AppleDouble before checking the local dir? > Thanks for the bug reports. I've fixed the regex bug and found a way to ensure "find" ignores dot files. But why do you think ensure_conf_file needs to depend upon the kernel level? Would it be better to skip ensure_conf_file if we are on ARM? And why don't we need such a file on a Pi with kernel version 4+? Fabio > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Oxymorons: Good grief > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160819/617896b0/attachment.htm From tim at rowledge.org Fri Aug 19 21:31:28 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 19 21:31:29 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: > On 19-08-2016, at 12:41 PM, Fabio Niephaus wrote: > > Thanks for the bug reports. I've fixed the regex bug and found a way to ensure "find" ignores dot files. Excellent. > But why do you think ensure_conf_file needs to depend upon the kernel level? Because the issue was fixed in the kernel some time ago. Unfortunately I couldn?t tell you exactly when, but the Pi stopped needing the file addition around 18 months ago. That?s around the time the kernel was bumped up to v 4 I think. Whether it is any sort of problem to have such a file when it isn?t required? I don?t know. It?s certainly less alarming for any user if the script doesn?t demand their superuser password! tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Oxymorons: Good grief From commits at source.squeak.org Fri Aug 19 21:55:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Fri Aug 19 21:55:07 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160819215504.29797.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068681.html Name: 51Deprecated-mt.46 Ancestors: 51Deprecated-mt.45 Same fix as in menu morphs. Due to some simplification in the inheritance chain of pluggable buttons, restore some rounded-corner methods as deprecated to improve backwards compatibility. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068682.html Name: Graphics-mt.361 Ancestors: Graphics-mt.360 Fixes workaround for misbehaving HostWindowPlugins. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068683.html Name: Graphics-mt.362 Ancestors: Graphics-mt.361 For fixing the demo mode, there should be a similar entry to a fixed font like there is for the standard system font. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068684.html Name: System-mt.903 Ancestors: System-mt.902 Fixes the demo/hi-dpi mode. Copies the current UI theme and installs large fonts there. Restoring fonts means looking for the UI that was copied from, by name for now. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068685.html Name: Morphic-mt.1290 Ancestors: Morphic-mt.1289 Fixes minor layout issues when switching to/from demo/hi-dpi mode. Considering open sytsem windows, this is still far from perfect but okay. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068686.html Name: ReleaseBuilder-mt.164 Ancestors: ReleaseBuilder-mt.163 Clear existing drawing error flags for the current Morphic world to not be surprised if you want to make a screenshot from the World. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068687.html Name: ToolBuilder-Morphic-mt.187 Ancestors: ToolBuilder-Morphic-mt.186 For demo/hi-dpi mode compatibility, adjust height of line edit in list chooser. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068688.html Name: SystemReporter-mt.30 Ancestors: SystemReporter-mt.29 For demo/hi-dpi mode compatibility, use the system-wide fixed font and not some hard-coded value. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068689.html Name: Morphic-mt.1291 Ancestors: Morphic-mt.1290 Fix some edge cases when printing keyboard events. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068690.html Name: System-mt.904 Ancestors: System-mt.903 Adds some guards when setting a new system version since that description is used for the automated building process. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068691.html Name: System-mt.905 Ancestors: System-mt.904 Fabio told me that he now commits under FabN. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068692.html Name: ReleaseBuilder-mt.165 Ancestors: ReleaseBuilder-mt.164 Small fix for "doing the next step" and bump system version to be the second release candidate. ============================================= From tim at rowledge.org Fri Aug 19 22:02:19 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 19 22:02:24 2016 Subject: [squeak-dev] 5.1 logo change Message-ID: <703BB72D-6A2D-49A5-A4CA-FFDE235AF1AD@rowledge.org> I?m not a huge fan of the change in the logo that seems to be attached to the latest 5.1rc1 Mac package I grabbed earlier. I mean, sure, balloon, fabulous and all that but Squeak has used the mousey logo for a looong time and I?m kinda attached to it. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: WK: Write to Keyboard From lists at fniephaus.com Fri Aug 19 22:11:51 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Fri Aug 19 22:12:05 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: On Fri, Aug 19, 2016 at 11:31 PM tim Rowledge wrote: > > > On 19-08-2016, at 12:41 PM, Fabio Niephaus wrote: > > > > Thanks for the bug reports. I've fixed the regex bug and found a way to > ensure "find" ignores dot files. > > Excellent. > > > But why do you think ensure_conf_file needs to depend upon the kernel > level? > > Because the issue was fixed in the kernel some time ago. Unfortunately I > couldn?t tell you exactly when, but the Pi stopped needing the file > addition around 18 months ago. That?s around the time the kernel was bumped > up to v 4 I think. Whether it is any sort of problem to have such a file > when it isn?t required? I don?t know. It?s certainly less alarming for any > user if the script doesn?t demand their superuser password! > Can someone shed some light on this or do some more digging? When exactly do we need a squeak.conf? Any other ideas how to deal with this? Fabio > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Oxymorons: Good grief > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160819/eced694c/attachment.htm From leves at caesar.elte.hu Fri Aug 19 23:32:43 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Fri Aug 19 23:32:47 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: On Fri, 19 Aug 2016, Fabio Niephaus wrote: > On Fri, Aug 19, 2016 at 11:31 PM tim Rowledge wrote: > > > On 19-08-2016, at 12:41 PM, Fabio Niephaus wrote: > > > > Thanks for the bug reports. I've fixed the regex bug and found a way to ensure "find" ignores dot files. > > Excellent. > > > But why do you think ensure_conf_file needs to depend upon the kernel level? > > Because the issue was fixed in the kernel some time ago. Unfortunately I couldn?t tell you exactly when, but the Pi stopped needing the file addition around 18 months ago. That?s around the time > the kernel was bumped up to v 4 I think. Whether it is any sort of problem to have such a file when it isn?t required? I don?t know. It?s certainly less alarming for any user if the script doesn?t > demand their superuser password! > > > Can someone shed some light on this or do some more digging? When exactly do we need a squeak.conf? Any other ideas how to deal with this? You always need it when you use an ht VM. Without the file the VM will not start (unless you run it as root, but that's something you wouldn't do, would you?). All VMs built by the CI are ht VMs, so the file is a must. The file has no effect on kernels before 2.6.X (basically 10+ years old), so checking the version is unnecessary (the VM would probably not start anyway due to C library differences). Levente > > Fabio > ? > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Oxymorons: Good grief > > > > > From asqueaker at gmail.com Fri Aug 19 23:38:56 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Aug 19 23:39:39 2016 Subject: [squeak-dev] [Ann] Cuis now runs on Spur! In-Reply-To: <20160819102816.Horde.mZoLJ7CA5J0ymKVdyjNy3tT@www.jvuletich.org> References: <20160819102816.Horde.mZoLJ7CA5J0ymKVdyjNy3tT@www.jvuletich.org> Message-ID: Cuis on Spur? Its like a powerful engine in a lightweight car. I can't imagine how blazing fast the UI must be. Easy Juan, you'll break the speed limits! :) On Fri, Aug 19, 2016 at 10:28 AM, wrote: > Hi Folks, > > I've successfully finished the Spur conversion of Cuis. I was able to merge > all required changes to Cuis compiler and make it work in both > ObjectMemories. Cuis is now offered in Spur and pre-Spur formats. And the > best part is that they share 100% of the source code. There is no forking! > > This means that there is no extra work in maintaining both flavors. So, we > are not leaving anyone behind. It also means that, at deployment, you might > chose between better performance and larger memory (with Spur) or smaller > footprint and SqueakJS compatibility (with pre-Spur). > > I've just updated our GitHub repo > https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev . Included are > Cuis4.2-2906-spur.image and Cuis4.2-2906.image, and, as usual, the whole > update stream. I wrote a brief description of the Spur conversion at > Documentation/SpurConversion.md, in case you want to reproduce it, or apply > it to your own Cuis images. > > The images seem very stable. Please test them, load your code, and report > any issues. This work was enabled by Eliot Miranda and the OpenSmalltalk > team who develop Spur, VMMaker and the Spur bootstrap. Thank you folks! I > also used Squeak 5 as a reference implementation of Compiler and related > stuff. I also want to thank the greater Squeak community for it. > > Some cleanup is in order. The scaffolding I did for the conversion, > including dual Compilers is still in the image. I'll be cleaning it soon. > I'll also be able to pay a bit more attention to unrelated suggestions and > ongoing discussion at cuis-dev@cuis-smalltalk.org > > Enjoy! > > Cheers, > > Juan Vuletich > www.cuis-smalltalk.org > https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev > @JuanVuletich > > From asqueaker at gmail.com Fri Aug 19 23:41:32 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Aug 19 23:42:15 2016 Subject: [squeak-dev] The Trunk: System-mt.903.mcz In-Reply-To: <57b7325f.3425c80a.bddf.5b87SMTPIN_ADDED_MISSING@mx.google.com> References: <57b7325f.3425c80a.bddf.5b87SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Awesome "fix"!! ;-) We've needed this for a long time. From tim at rowledge.org Fri Aug 19 23:46:20 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 19 23:46:25 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: > On 19-08-2016, at 4:32 PM, Levente Uzonyi wrote: > > On Fri, 19 Aug 2016, Fabio Niephaus wrote: > >> On Fri, Aug 19, 2016 at 11:31 PM tim Rowledge wrote: >> >> > On 19-08-2016, at 12:41 PM, Fabio Niephaus wrote: >> > >> > Thanks for the bug reports. I've fixed the regex bug and found a way to ensure "find" ignores dot files. >> >> Excellent. >> >> > But why do you think ensure_conf_file needs to depend upon the kernel level? >> >> Because the issue was fixed in the kernel some time ago. Unfortunately I couldn?t tell you exactly when, but the Pi stopped needing the file addition around 18 months ago. That?s around the time >> the kernel was bumped up to v 4 I think. Whether it is any sort of problem to have such a file when it isn?t required? I don?t know. It?s certainly less alarming for any user if the script doesn?t >> demand their superuser password! >> Can someone shed some light on this or do some more digging? When exactly do we need a squeak.conf? Any other ideas how to deal with this? > > You always need it when you use an ht VM. Without the file the VM will not start (unless you run it as root, but that's something you wouldn't do, would you?). > All VMs built by the CI are ht VMs, so the file is a must. This is not strictly true; recent kernels simply don?t cause the problem. My Pi just doesn?t need the file and hasn?t for 18+ months. I?ve checked for it pre-existing and it doesn?t. I?ve been delivering the PI system with an ht based vm for a long time now and millions of people use it daily. > The file has no effect on kernels before 2.6.X (basically 10+ years old), so checking the version is unnecessary (the VM would probably not start anyway due to C library differences). > > Levente > >> Fabio >> >> >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> Oxymorons: Good grief > tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim To define recursion, we must first define recursion. From tim at rowledge.org Sat Aug 20 01:43:46 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Aug 20 01:43:51 2016 Subject: [squeak-dev] ActiveEvent/Object>>currentEvent broken by Morphic-mt.1283? Message-ID: After loading my development scratch code into the rc1 image I got a really weird dNU where an instvar of PaintCanvas is nil a few bytecodes after it is set to definitely-not-nil. The code is pretty simple - !PaintCanvas methodsFor: 'event handling' stamp: 'tpr 8/19/2016 18:30'! selectRectangleStartingAt: aPoint "Set selectionRect to a rectangular area starting at the given canvas point." | p | selectionRect := aPoint extent: 0@0. showSelection := true. World activeHand showTemporaryCursor: nil. Cursor crossHair showWhile: [ [self currentEvent anyButtonPressed] whileTrue: [ p := self cursorPoint. self autoScroll: p. self canvasChanged: selectionRect. selectionRect := aPoint rect: (self screenToCanvas: p). selectionRect := selectionRect intersect: canvasForm boundingBox. self canvasChanged: selectionRect. World doOneCycle]]. showSelection := false. self changed. World displayWorld. selectionRect area = 0 ifTrue: [selectionRect := nil]. ^ selectionRect In PaintCanvas>>selectRectangleStartingAt: we set selectionRect to a rectangle in the first line. On line 8 `self canvasChanged: selectionRect.` it appears selectionRect is nil. In the debugger it is indeed nil. I can?t see any path that should make it nil on an initial go-round, so something is wrong in the loop that follows, which spins on `self currentEvent anyButtonPressed` After sticking some counting code in the loop to see if the problem was happening during the first pass I was startled to see it was more usually occurring after 160-180 loops! And to make life even more interesting with some checking code added before each use of the ?selectionRect? ivar it appeared to be getting nilled between the bottom of the loop and the immediately following top. This got me worrying about the vm doing something bad as you might imagine. However, trying this out in an update #15314 image caused no problems, which at least seems to clear the vm of guilt. After much diffing of recent updates to Morphic I *think* there must be some interaction between Object>>currentEvent (which uses the ActiveEvent global) and Morphic-mt.1283 changes in HandMorph - purely since they alter the usage of Active Event. The symptom seems to centre around the event not being updated properly. If I revert the HandMorph>>sendFocusEvent:to:clear: & sendEvent:focus:clear: methods to the versions prior to Morphic-mt.1283 then the PaintCanvas code works as before. The bit that really confuses me is that it seems that more event processing must be going on that invokes PaintCanvas>>mouseDown: *within* the loop above - that?s the only current path I can find to nil the selectionRect ivar. Weird. There is also some possible confusion in the system between Morph>>cursorPoint, which simply gets the currentHand?s lastEvent cursorPoint, and Object>>currentEvent which gives one either the ActiveEvent global or the currentHand?s lastEvent. Seems to me one or the other is giving wrong info. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim CChheecckk yyoouurr dduupplleexx sswwiittcchh.. From commits at source.squeak.org Sat Aug 20 06:30:39 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 20 06:30:41 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.363.mcz Message-ID: Marcel Taeumel uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-mt.363.mcz ==================== Summary ==================== Name: Graphics-mt.363 Author: mt Time: 20 August 2016, 8:29:57.57726 am UUID: 9d83d026-8ef5-8248-b8d3-4e88bc6ab344 Ancestors: Graphics-mt.362 Fix font resetting in the face of UI themes. =============== Diff against Graphics-mt.362 =============== Item was changed: ----- Method: StrikeFont class>>installDejaVu (in category 'font creation') ----- installDejaVu + "You have to re-create UI themes after doing this. - " StrikeFont installDejaVu " TextConstants at: 'Bitmap DejaVu Sans' put: (TextStyle fontArray: (#(7 9 12 14 17 20) collect: [:size | self createDejaVu: size])). - Preferences restoreDefaultFonts. ! Item was changed: ----- Method: StrikeFont class>>installDejaVuDark (in category 'font creation') ----- installDejaVuDark + " This is a Version of dejaVu renderd for light text on dark background. You have to re-create UI themes after doing this. - " This is a Version of dejaVu renderd for light text on dark background. StrikeFont installDejaVuDark " TextConstants at: 'Darkmap DejaVu Sans' put: (TextStyle fontArray: (#(7 9 12 14 17 20) collect: [:size | self createDejaVuDark: size])). ! From commits at source.squeak.org Sat Aug 20 06:33:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 20 06:33:11 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1292.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1292.mcz ==================== Summary ==================== Name: Morphic-mt.1292 Author: mt Time: 20 August 2016, 8:32:07.37026 am UUID: 89151bae-9541-c240-847e-6737df1934f5 Ancestors: Morphic-mt.1291 At the moment, the search bar border with will frequently be overwritten by UI themes. We will account for that in the future, not now. =============== Diff against Morphic-mt.1291 =============== Item was changed: ----- Method: SearchBar>>buildWith: (in category 'toolbuilder') ----- buildWith: builder ^ (builder build: (builder pluggableInputFieldSpec new model: self; getText: #searchTerm; setText: #smartSearch:in:; editText: #searchTermSilently:; menu: #menu:shifted:; selection: #selection; indicateUnacceptedChanges: false; help: 'Search or evaluate...' translated)) name: #searchBar; wantsFrameAdornments: false; - borderWidth: 0; yourself! From commits at source.squeak.org Sat Aug 20 06:35:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 20 06:35:08 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.166.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.166.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.166 Author: mt Time: 20 August 2016, 8:34:57.03526 am UUID: ffce23dc-e7e1-194d-aebf-8f83a5a5c85d Ancestors: ReleaseBuilder-mt.165 Fixes preparation of environment so that the automated build on TravisCI can finish. =============== Diff against ReleaseBuilder-mt.165 =============== Item was changed: ----- Method: ReleaseBuilder class>>clearCaches (in category 'scripts') ----- clearCaches "Clear caches, discard unused references, free space." + TTCFont registerAll. + StrikeFont initialize. + Smalltalk cleanUp: true. self discardUserObjects. MCFileBasedRepository flushAllCaches. Environment allInstancesDo: [ : env | env purgeUndeclared ]. Undeclared removeUnreferencedKeys. Smalltalk garbageCollect.! Item was changed: ----- Method: ReleaseBuilder class>>configureTools (in category 'scripts') ----- configureTools "Initialize well-known tools and other resources." - TTCFont registerAll. - StrikeFont initialize. FileList initialize. "register file reader services" RealEstateAgent standardSize: 600 @ 400. SMLoaderPlus setDefaultFilters: #(filterSafelyAvailable). ! Item was changed: ----- Method: ReleaseBuilder class>>prepareEnvironment (in category 'preparing') ----- prepareEnvironment "Prepare everything that should be done for a new image build. Clear caches, passwords, etc." "ReleaseBuilder prepareNewBuild" | balloon | self - checkCurrentProjects; clearCaches; + checkCurrentProjects; configureTools; setPreferences; configureDesktop. balloon := self getBalloonForm. "Get now because later the file might be missing." DeferredTask := [ self openWelcomeWorkspacesWith: balloon. PreferenceWizardMorph open]. "If you save-and-quit the image after calling #prepareEnvironment, ensure that the next image startup will be fast." Project current world doOneCycle.! Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. Project uiManager openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; encloseSelection: false ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. Model windowActiveOnFirstClick: false. "Not good for little screen real estate." Model useColorfulWindows: false. Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false; passiveColor: (Color gray: 0.85); activeColor: (Color r: 1 g: 0.599 b: 0.0). ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; enable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 8. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" + TheWorldMainDockingBar + showWorldMainDockingBar: true; + showSecondsInClock: true; + twentyFourHourClock: true. + SearchBar useSmartSearch: true. Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; disable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; + disable: #alternateHandlesLook; + disable: #showDirectionHandles. - disable: #alternateHandlesLook. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. "that's all, folks"! From Marcel.Taeumel at hpi.de Sat Aug 20 07:17:15 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 20 07:18:21 2016 Subject: [squeak-dev] Re: ActiveEvent/Object>>currentEvent broken by Morphic-mt.1283? In-Reply-To: References: Message-ID: <1471677435424-4912031.post@n4.nabble.com> tim Rowledge wrote > After loading my development scratch code into the rc1 image I got a > really weird dNU where an instvar of PaintCanvas is nil a few bytecodes > after it is set to definitely-not-nil. The code is pretty simple - > !PaintCanvas methodsFor: 'event handling' stamp: 'tpr 8/19/2016 18:30'! > selectRectangleStartingAt: aPoint > "Set selectionRect to a rectangular area starting at the given canvas > point." > > | p | > selectionRect := aPoint extent: 0@0. > showSelection := true. > World activeHand showTemporaryCursor: nil. > Cursor crossHair showWhile: [ > [self currentEvent anyButtonPressed] whileTrue: [ > p := self cursorPoint. > self autoScroll: p. > self canvasChanged: selectionRect. > selectionRect := aPoint rect: (self screenToCanvas: p). > selectionRect := selectionRect intersect: canvasForm boundingBox. > self canvasChanged: selectionRect. > World doOneCycle]]. > showSelection := false. > self changed. > World displayWorld. > > selectionRect area = 0 ifTrue: [selectionRect := nil]. > ^ selectionRect > > > In PaintCanvas>>selectRectangleStartingAt: we set selectionRect to a > rectangle in the first line. On line 8 > `self canvasChanged: selectionRect.` > it appears selectionRect is nil. In the debugger it is indeed nil. I can?t > see any path that should make it nil on an initial go-round, so something > is wrong in the loop that follows, which spins on `self currentEvent > anyButtonPressed` > After sticking some counting code in the loop to see if the problem was > happening during the first pass I was startled to see it was more usually > occurring after 160-180 loops! And to make life even more interesting with > some checking code added before each use of the ?selectionRect? ivar it > appeared to be getting nilled between the bottom of the loop and the > immediately following top. This got me worrying about the vm doing > something bad as you might imagine. > > However, trying this out in an update #15314 image caused no problems, > which at least seems to clear the vm of guilt. After much diffing of > recent updates to Morphic I *think* there must be some interaction between > Object>>currentEvent (which uses the ActiveEvent global) and > Morphic-mt.1283 changes in HandMorph - purely since they alter the usage > of Active Event. The symptom seems to centre around the event not being > updated properly. > > If I revert the HandMorph>>sendFocusEvent:to:clear: & > sendEvent:focus:clear: methods to the versions prior to Morphic-mt.1283 > then the PaintCanvas code works as before. The bit that really confuses me > is that it seems that more event processing must be going on that invokes > PaintCanvas>>mouseDown: *within* the loop above - that?s the only current > path I can find to nil the selectionRect ivar. Weird. > > There is also some possible confusion in the system between > Morph>>cursorPoint, which simply gets the currentHand?s lastEvent > cursorPoint, and Object>>currentEvent which gives one either the > ActiveEvent global or the currentHand?s lastEvent. Seems to me one or the > other is giving wrong info. > > tim > -- > tim Rowledge; > tim@ > ; http://www.rowledge.org/tim > CChheecckk yyoouurr dduupplleexx sswwiittcchh.. Hi Tim, that code is tricky in the sense that it is exactly like MVC's "[Sensor anyButtonPressed]" loops but you should favor Morphic's event dispatching style. Yes, it should still work this way. In the course of fixing strange behavior in Morphic tests, we make set and clear of ActiveWorld, ActiveHand, and ActiveEvent more robust. Nothing what would interfere with this here. Here is a simpler version: [self currentEvent hand anyButtonPressed] whileFalse: [ Transcript showln: self currentEvent hand position. World doOneCycle]. This works in the following cases: - Do-it with keyboard shortcut, e.g., in Workspace - Do-it with mouse/pop-up menu, e.g., in Workspace - Invoking it in response to any event dispatching, e.g., a button click This, however, will not work, if you invoke it outside of any event dispatching such as "Project addDeferredUIMessage: [...]". I would at least add this "hand" call to the event. You cannot be sure to always get a mouse event here. --------------- So, what could be the issue then? :-/ I noticed that the selection tool in the Paint Editor does not work at all. And the nil-debugger appears *only* if I try to draw a rectangle after trying to select something, which did not work. So, does the selection tool work for you? I would fix that first. My tip would be to do something in the paint editor and then hit CMD+. and see whether the stack looks as expected. It seems not and hence selectionRect gets nil'ed by code in PaintCanvas. My guess is that Scratch can be fixed to work again. It seems to do very strange strings. Especially when having a system window *above* the paint editor, the mouse cursor keeps changing to a cross. :-D Best, Marcel -- View this message in context: http://forum.world.st/ActiveEvent-Object-currentEvent-broken-by-Morphic-mt-1283-tp4912022p4912031.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Aug 20 07:20:14 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 20 07:21:19 2016 Subject: [squeak-dev] Re: The Trunk: System-mt.903.mcz In-Reply-To: References: Message-ID: <1471677614295-4912032.post@n4.nabble.com> Chris Muller-3 wrote > Awesome "fix"!! ;-) > > We've needed this for a long time. :) Hannes noticed incorrect updates when changing the system font. I introduced that regression. Looking at the demo mode, there were other strange interferences with the UI themes. So I regard that as a fix...of a regression. Kind of. :-D This is fun and challenging at the same time. Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-System-mt-903-mcz-tp4911959p4912032.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Aug 20 07:29:27 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 20 07:30:30 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: <1471678167626-4912033.post@n4.nabble.com> tim Rowledge wrote >> On 19-08-2016, at 4:32 PM, Levente Uzonyi < > leves@.elte > > wrote: >> >> On Fri, 19 Aug 2016, Fabio Niephaus wrote: >> >>> On Fri, Aug 19, 2016 at 11:31 PM tim Rowledge < > tim@ > > wrote: >>> >>> > On 19-08-2016, at 12:41 PM, Fabio Niephaus < > lists@ > > wrote: >>> > >>> > Thanks for the bug reports. I've fixed the regex bug and found a >>> way to ensure "find" ignores dot files. >>> >>> Excellent. >>> >>> > But why do you think ensure_conf_file needs to depend upon the >>> kernel level? >>> >>> Because the issue was fixed in the kernel some time ago. >>> Unfortunately I couldn?t tell you exactly when, but the Pi stopped >>> needing the file addition around 18 months ago. That?s around the time >>> the kernel was bumped up to v 4 I think. Whether it is any sort of >>> problem to have such a file when it isn?t required? I don?t know. It?s >>> certainly less alarming for any user if the script doesn?t >>> demand their superuser password! >>> Can someone shed some light on this or do some more digging? When >>> exactly do we need a squeak.conf? Any other ideas how to deal with this? >> >> You always need it when you use an ht VM. Without the file the VM will >> not start (unless you run it as root, but that's something you wouldn't >> do, would you?). >> All VMs built by the CI are ht VMs, so the file is a must. > > > This is not strictly true; recent kernels simply don?t cause the problem. > My Pi just doesn?t need the file and hasn?t for 18+ months. I?ve checked > for it pre-existing and it doesn?t. I?ve been delivering the PI system > with an ht based vm for a long time now and millions of people use it > daily. > > >> The file has no effect on kernels before 2.6.X (basically 10+ years old), >> so checking the version is unnecessary (the VM would probably not start >> anyway due to C library differences). >> >> Levente >> >>> Fabio >>> >>> >>> tim >>> -- >>> tim Rowledge; > tim@ > ; http://www.rowledge.org/tim >>> Oxymorons: Good grief >> > > > tim > -- > tim Rowledge; > tim@ > ; http://www.rowledge.org/tim > To define recursion, we must first define recursion. Here is another release candidate: http://files.squeak.org/5.1rc2/Squeak5.1rc2-16535-32bit/ The 64-bit VM for macOS we use on TravisCI has some hick-ups at the moment. Best, Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-Code-Freeze-Trunk-still-closed-first-release-candidate-s-available-tp4911665p4912033.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Sat Aug 20 10:28:26 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 20 10:29:30 2016 Subject: [squeak-dev] Re: ActiveEvent/Object>>currentEvent broken by Morphic-mt.1283? In-Reply-To: <1471677435424-4912031.post@n4.nabble.com> References: <1471677435424-4912031.post@n4.nabble.com> Message-ID: <1471688906845-4912039.post@n4.nabble.com> marcel.taeumel wrote > > tim Rowledge wrote >> After loading my development scratch code into the rc1 image I got a >> really weird dNU where an instvar of PaintCanvas is nil a few bytecodes >> after it is set to definitely-not-nil. The code is pretty simple - >> !PaintCanvas methodsFor: 'event handling' stamp: 'tpr 8/19/2016 18:30'! >> selectRectangleStartingAt: aPoint >> "Set selectionRect to a rectangular area starting at the given canvas >> point." >> >> | p | >> selectionRect := aPoint extent: 0@0. >> showSelection := true. >> World activeHand showTemporaryCursor: nil. >> Cursor crossHair showWhile: [ >> [self currentEvent anyButtonPressed] whileTrue: [ >> p := self cursorPoint. >> self autoScroll: p. >> self canvasChanged: selectionRect. >> selectionRect := aPoint rect: (self screenToCanvas: p). >> selectionRect := selectionRect intersect: canvasForm boundingBox. >> self canvasChanged: selectionRect. >> World doOneCycle]]. >> showSelection := false. >> self changed. >> World displayWorld. >> >> selectionRect area = 0 ifTrue: [selectionRect := nil]. >> ^ selectionRect >> >> >> In PaintCanvas>>selectRectangleStartingAt: we set selectionRect to a >> rectangle in the first line. On line 8 >> `self canvasChanged: selectionRect.` >> it appears selectionRect is nil. In the debugger it is indeed nil. I >> can?t see any path that should make it nil on an initial go-round, so >> something is wrong in the loop that follows, which spins on `self >> currentEvent anyButtonPressed` >> After sticking some counting code in the loop to see if the problem was >> happening during the first pass I was startled to see it was more usually >> occurring after 160-180 loops! And to make life even more interesting >> with some checking code added before each use of the ?selectionRect? ivar >> it appeared to be getting nilled between the bottom of the loop and the >> immediately following top. This got me worrying about the vm doing >> something bad as you might imagine. >> >> However, trying this out in an update #15314 image caused no problems, >> which at least seems to clear the vm of guilt. After much diffing of >> recent updates to Morphic I *think* there must be some interaction >> between Object>>currentEvent (which uses the ActiveEvent global) and >> Morphic-mt.1283 changes in HandMorph - purely since they alter the usage >> of Active Event. The symptom seems to centre around the event not being >> updated properly. >> >> If I revert the HandMorph>>sendFocusEvent:to:clear: & >> sendEvent:focus:clear: methods to the versions prior to Morphic-mt.1283 >> then the PaintCanvas code works as before. The bit that really confuses >> me is that it seems that more event processing must be going on that >> invokes PaintCanvas>>mouseDown: *within* the loop above - that?s the only >> current path I can find to nil the selectionRect ivar. Weird. >> >> There is also some possible confusion in the system between >> Morph>>cursorPoint, which simply gets the currentHand?s lastEvent >> cursorPoint, and Object>>currentEvent which gives one either the >> ActiveEvent global or the currentHand?s lastEvent. Seems to me one or the >> other is giving wrong info. >> >> tim >> -- >> tim Rowledge; >> tim@ >> ; http://www.rowledge.org/tim >> CChheecckk yyoouurr dduupplleexx sswwiittcchh.. > Hi Tim, > > that code is tricky in the sense that it is exactly like MVC's "[Sensor > anyButtonPressed]" loops but you should favor Morphic's event dispatching > style. > > Yes, it should still work this way. In the course of fixing strange > behavior in Morphic tests, we make set and clear of ActiveWorld, > ActiveHand, and ActiveEvent more robust. Nothing what would interfere with > this here. > > Here is a simpler version: > > [self currentEvent hand anyButtonPressed] > whileFalse: [ > Transcript showln: self currentEvent hand position. > World doOneCycle]. > > This works in the following cases: > - Do-it with keyboard shortcut, e.g., in Workspace > - Do-it with mouse/pop-up menu, e.g., in Workspace > - Invoking it in response to any event dispatching, e.g., a button click > > This, however, will not work, if you invoke it outside of any event > dispatching such as "Project addDeferredUIMessage: [...]". > > I would at least add this "hand" call to the event. You cannot be sure to > always get a mouse event here. > > --------------- > > So, what could be the issue then? :-/ > > I noticed that the selection tool in the Paint Editor does not work at > all. And the nil-debugger appears *only* if I try to draw a rectangle > after trying to select something, which did not work. > > So, does the selection tool work for you? I would fix that first. > > My tip would be to do something in the paint editor and then hit CMD+. and > see whether the stack looks as expected. It seems not and hence > selectionRect gets nil'ed by code in PaintCanvas. > > My guess is that Scratch can be fixed to work again. It seems to do very > strange strings. Especially when having a system window *above* the paint > editor, the mouse cursor keeps changing to a cross. :-D > > Best, > Marcel Hey Tim, using "currentHand" instead of "currentEvent" in both places fixes it. Somewhat. Dragging the selection does not work then. At this point in the code, "self currentEvent" would always be the same event object in the middle of event dispatching. So will "currentHand". Hence, this whileTrue will never end if you ask the same (immutable) event object over and over again. You nil-bug occures if you ivoke another event inside this loop, which will then call some code in PaintCanvas that makes selectionRect nil. I know that this observable behavior of "currentEvent" changed recently in the course of fixing Morphic some tests. But taking local state for global state is not, in my opinion, the intention in Morphic. If you want to do function-based spinning, use Sensor like MVC does. If you want to do it state-based, use Morph >> #mouseMove: etc. like Morphic does and manage your state. SystemWindow's corner grip morphs do this, for example, when fast-dragging is disabled. Any mixture of these styles, as here in this piece of scratch code, is really tricky to maintain in the long term. ...aaand we do want to make "worlds in worlds" work again, right? ^___^ Best, Marcel -- View this message in context: http://forum.world.st/ActiveEvent-Object-currentEvent-broken-by-Morphic-mt-1283-tp4912022p4912039.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From lists at fniephaus.com Sat Aug 20 10:46:26 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Sat Aug 20 10:46:39 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: On Sat, Aug 20, 2016 at 1:46 AM tim Rowledge wrote: > > > On 19-08-2016, at 4:32 PM, Levente Uzonyi wrote: > > > > On Fri, 19 Aug 2016, Fabio Niephaus wrote: > > > >> On Fri, Aug 19, 2016 at 11:31 PM tim Rowledge wrote: > >> > >> > On 19-08-2016, at 12:41 PM, Fabio Niephaus > wrote: > >> > > >> > Thanks for the bug reports. I've fixed the regex bug and found a > way to ensure "find" ignores dot files. > >> > >> Excellent. > >> > >> > But why do you think ensure_conf_file needs to depend upon the > kernel level? > >> > >> Because the issue was fixed in the kernel some time ago. > Unfortunately I couldn?t tell you exactly when, but the Pi stopped needing > the file addition around 18 months ago. That?s around the time > >> the kernel was bumped up to v 4 I think. Whether it is any sort of > problem to have such a file when it isn?t required? I don?t know. It?s > certainly less alarming for any user if the script doesn?t > >> demand their superuser password! > >> Can someone shed some light on this or do some more digging? When > exactly do we need a squeak.conf? Any other ideas how to deal with this? > > > > You always need it when you use an ht VM. Without the file the VM will > not start (unless you run it as root, but that's something you wouldn't do, > would you?). > > All VMs built by the CI are ht VMs, so the file is a must. > > > This is not strictly true; recent kernels simply don?t cause the problem. > My Pi just doesn?t need the file and hasn?t for 18+ months. I?ve checked > for it pre-existing and it doesn?t. I?ve been delivering the PI system with > an ht based vm for a long time now and millions of people use it daily. > May I suggest we simply skip the ensure_conf_file step, if the launch script detects to run on a Pi for this release? Shall we print instructions for the common-session setup if necessary instead? We can adjust this behavior in the future, of course. But I'm not sure we can work out a proper solution in the next couple of days. Fabio > > > > The file has no effect on kernels before 2.6.X (basically 10+ years > old), so checking the version is unnecessary (the VM would probably not > start anyway due to C library differences). > > > > Levente > > > >> Fabio > >> > >> > >> tim > >> -- > >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > >> Oxymorons: Good grief > > > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > To define recursion, we must first define recursion. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160820/b487d58a/attachment.htm From hannes.hirzel at gmail.com Sat Aug 20 11:46:13 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Sat Aug 20 11:46:16 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: On 8/20/16, Fabio Niephaus wrote: > On Sat, Aug 20, 2016 at 1:46 AM tim Rowledge wrote: > >> >> > On 19-08-2016, at 4:32 PM, Levente Uzonyi wrote: >> > >> > On Fri, 19 Aug 2016, Fabio Niephaus wrote: >> > >> >> On Fri, Aug 19, 2016 at 11:31 PM tim Rowledge >> >> wrote: >> >> >> >> > On 19-08-2016, at 12:41 PM, Fabio Niephaus >> >> >> wrote: >> >> > >> >> > Thanks for the bug reports. I've fixed the regex bug and found >> >> a >> way to ensure "find" ignores dot files. >> >> >> >> Excellent. >> >> >> >> > But why do you think ensure_conf_file needs to depend upon the >> kernel level? >> >> >> >> Because the issue was fixed in the kernel some time ago. >> Unfortunately I couldn?t tell you exactly when, but the Pi stopped >> needing >> the file addition around 18 months ago. That?s around the time >> >> the kernel was bumped up to v 4 I think. Whether it is any sort >> >> of >> problem to have such a file when it isn?t required? I don?t know. It?s >> certainly less alarming for any user if the script doesn?t >> >> demand their superuser password! >> >> Can someone shed some light on this or do some more digging? When >> exactly do we need a squeak.conf? Any other ideas how to deal with this? >> > >> > You always need it when you use an ht VM. Without the file the VM will >> not start (unless you run it as root, but that's something you wouldn't >> do, >> would you?). >> > All VMs built by the CI are ht VMs, so the file is a must. >> >> >> This is not strictly true; recent kernels simply don?t cause the problem. >> My Pi just doesn?t need the file and hasn?t for 18+ months. I?ve checked >> for it pre-existing and it doesn?t. I?ve been delivering the PI system >> with >> an ht based vm for a long time now and millions of people use it daily. >> > > May I suggest we simply skip the ensure_conf_file step, if the launch > script detects to run on a Pi for this release? +1 Shall we print instructions > for the common-session setup if necessary instead? We can adjust this > behavior in the future, of course. But I'm not sure we can work out a > proper solution in the next couple of days. > > Fabio > > >> >> >> > The file has no effect on kernels before 2.6.X (basically 10+ years >> old), so checking the version is unnecessary (the VM would probably not >> start anyway due to C library differences). >> > >> > Levente >> > >> >> Fabio >> >> >> >> >> >> tim >> >> -- >> >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> >> Oxymorons: Good grief >> > >> >> >> tim >> -- >> tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim >> To define recursion, we must first define recursion. >> >> >> >> > From asqueaker at gmail.com Sat Aug 20 16:53:16 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sat Aug 20 16:53:59 2016 Subject: [squeak-dev] The Trunk: Graphics-mt.363.mcz In-Reply-To: <57b7f915.868d370a.655f5.1465SMTPIN_ADDED_MISSING@mx.google.com> References: <57b7f915.868d370a.655f5.1465SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Hi Marcel, I don't know if this is related, but one thing I noticed is that the Themeing seems to be leaking into the "my.prefs" file -- if you select one of the Dark themes, then save a my.prefs, then go into Squeak 4.6 and load prefs, some of the colors become dark... On Sat, Aug 20, 2016 at 1:30 AM, wrote: > Marcel Taeumel uploaded a new version of Graphics to project The Trunk: > http://source.squeak.org/trunk/Graphics-mt.363.mcz > > ==================== Summary ==================== > > Name: Graphics-mt.363 > Author: mt > Time: 20 August 2016, 8:29:57.57726 am > UUID: 9d83d026-8ef5-8248-b8d3-4e88bc6ab344 > Ancestors: Graphics-mt.362 > > Fix font resetting in the face of UI themes. > > =============== Diff against Graphics-mt.362 =============== > > Item was changed: > ----- Method: StrikeFont class>>installDejaVu (in category 'font creation') ----- > installDejaVu > + "You have to re-create UI themes after doing this. > - " > StrikeFont installDejaVu > " > > TextConstants > at: 'Bitmap DejaVu Sans' > put: (TextStyle fontArray: (#(7 9 12 14 17 20) collect: [:size | self createDejaVu: size])). > - Preferences restoreDefaultFonts. > ! > > Item was changed: > ----- Method: StrikeFont class>>installDejaVuDark (in category 'font creation') ----- > installDejaVuDark > + " This is a Version of dejaVu renderd for light text on dark background. You have to re-create UI themes after doing this. > - " This is a Version of dejaVu renderd for light text on dark background. > StrikeFont installDejaVuDark > " > > TextConstants > at: 'Darkmap DejaVu Sans' > put: (TextStyle fontArray: (#(7 9 12 14 17 20) collect: [:size | self createDejaVuDark: size])). > ! > > From asqueaker at gmail.com Sat Aug 20 16:57:50 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sat Aug 20 16:58:33 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: > I?ve been delivering the PI system with an >> ht based vm for a long time now and millions of people use it daily. "Millions?" You've really piqued my interest Fabio! Can you share any info? :) From tim at rowledge.org Sat Aug 20 17:08:04 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Aug 20 17:08:06 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: > On 20-08-2016, at 9:57 AM, Chris Muller wrote: > >> I?ve been delivering the PI system with an >>> ht based vm for a long time now and millions of people use it daily. > > "Millions?" You've really piqued my interest Fabio! Can you share > any info? :) > Err, that would be me, referring to Scratch on Pi. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: XYZZY: Branch and Play Adventure From ma.chris.m at gmail.com Sat Aug 20 17:12:10 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Sat Aug 20 17:12:54 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: Oh. Just you, nevermind.. ;-) On Sat, Aug 20, 2016 at 12:08 PM, tim Rowledge wrote: > >> On 20-08-2016, at 9:57 AM, Chris Muller wrote: >> >>> I?ve been delivering the PI system with an >>>> ht based vm for a long time now and millions of people use it daily. >> >> "Millions?" You've really piqued my interest Fabio! Can you share >> any info? :) >> > > Err, that would be me, referring to Scratch on Pi. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: XYZZY: Branch and Play Adventure > > From tim at rowledge.org Sat Aug 20 17:38:05 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Aug 20 17:38:12 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: > On 20-08-2016, at 3:46 AM, Fabio Niephaus wrote: > > May I suggest we simply skip the ensure_conf_file step, if the launch script detects to run on a Pi for this release? Shall we print instructions for the common-session setup if necessary instead? We can adjust this behavior in the future, of course. But I'm not sure we can work out a proper solution in the next couple of days. I would suggest that you make the ensure_conf_file script start with a test for a) being on a Pi with a kernel level 4 or greater b) being on any machine with kernel greater than X, where X is not currently a number I know. I simply don?t know enough linux terminology to do effective googling for this. The Pi does not have a special kernel so I think any version 4+ would be safe. Is anyone running on an x86 linux out there? If NOT (a AND b) then do magic with /etc/securityblah-blah. Somebody that follows and understand linux release history would probably be able to tell us exactly which version introduced the fix that makes /etc/security/blah unnecessary. A test for /etc/pam.d/common-session containing ' session required pam_limits.so' would be a decent idea if we could also work out if the user were using xrdp or any other affected system. I?d suggest just documenting it for now. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: BFM: Branch on Full Moon From tim at rowledge.org Sat Aug 20 17:59:13 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Aug 20 17:59:18 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: > On 20-08-2016, at 10:38 AM, tim Rowledge wrote: > > If NOT (a AND b) then do magic with /etc/securityblah-blah. Sigh. if NOT( a OR b) tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Java: the best argument for Smalltalk since C++ From Marcel.Taeumel at hpi.de Sat Aug 20 20:59:20 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sat Aug 20 21:00:28 2016 Subject: [squeak-dev] Re: The Trunk: Graphics-mt.363.mcz In-Reply-To: References: Message-ID: <1471726760832-4912079.post@n4.nabble.com> Chris Muller-3 wrote > Hi Marcel, I don't know if this is related, but one thing I noticed is > that the Themeing seems to be leaking into the "my.prefs" file -- if > you select one of the Dark themes, then save a my.prefs, then go into > Squeak 4.6 and load prefs, some of the colors become dark... > > On Sat, Aug 20, 2016 at 1:30 AM, < > commits@.squeak > > wrote: >> Marcel Taeumel uploaded a new version of Graphics to project The Trunk: >> http://source.squeak.org/trunk/Graphics-mt.363.mcz >> >> ==================== Summary ==================== >> >> Name: Graphics-mt.363 >> Author: mt >> Time: 20 August 2016, 8:29:57.57726 am >> UUID: 9d83d026-8ef5-8248-b8d3-4e88bc6ab344 >> Ancestors: Graphics-mt.362 >> >> Fix font resetting in the face of UI themes. >> >> =============== Diff against Graphics-mt.362 =============== >> >> Item was changed: >> ----- Method: StrikeFont class>>installDejaVu (in category 'font >> creation') ----- >> installDejaVu >> + "You have to re-create UI themes after doing this. >> - " >> StrikeFont installDejaVu >> " >> >> TextConstants >> at: 'Bitmap DejaVu Sans' >> put: (TextStyle fontArray: (#(7 9 12 14 17 20) collect: >> [:size | self createDejaVu: size])). >> - Preferences restoreDefaultFonts. >> ! >> >> Item was changed: >> ----- Method: StrikeFont class>>installDejaVuDark (in category 'font >> creation') ----- >> installDejaVuDark >> + " This is a Version of dejaVu renderd for light text on dark >> background. You have to re-create UI themes after doing this. >> - " This is a Version of dejaVu renderd for light text on dark >> background. >> StrikeFont installDejaVuDark >> " >> >> TextConstants >> at: 'Darkmap DejaVu Sans' >> put: (TextStyle fontArray: (#(7 9 12 14 17 20) collect: >> [:size | self createDejaVuDark: size])). >> ! >> >> Which colors become dark? Can you post a screenshot? Best, Marcel -- View this message in context: http://forum.world.st/The-Trunk-Graphics-mt-363-mcz-tp4912028p4912079.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sat Aug 20 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 20 21:55:05 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160820215503.24678.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068693.html Name: Graphics-mt.363 Ancestors: Graphics-mt.362 Fix font resetting in the face of UI themes. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068694.html Name: Morphic-mt.1292 Ancestors: Morphic-mt.1291 At the moment, the search bar border with will frequently be overwritten by UI themes. We will account for that in the future, not now. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068695.html Name: ReleaseBuilder-mt.166 Ancestors: ReleaseBuilder-mt.165 Fixes preparation of environment so that the automated build on TravisCI can finish. ============================================= From tim at rowledge.org Sat Aug 20 22:52:48 2016 From: tim at rowledge.org (tim Rowledge) Date: Sat Aug 20 22:52:51 2016 Subject: [squeak-dev] ActiveEvent/Object>>currentEvent broken by Morphic-mt.1283? In-Reply-To: <1471688906845-4912039.post@n4.nabble.com> References: <1471677435424-4912031.post@n4.nabble.com> <1471688906845-4912039.post@n4.nabble.com> Message-ID: <3F765760-9A59-4831-9BFE-5776F671B618@rowledge.org> All good points Marcel - > On 20-08-2016, at 3:28 AM, marcel.taeumel wrote: > >> >> that code is tricky in the sense that it is exactly like MVC's "[Sensor >> anyButtonPressed]" loops but you should favor Morphic's event dispatching >> style. Absolutely; I?d love to get around to rewriting all that stuff but it isn?t going to happen soon. There?s 24 usages of currentEvent in Scratch code. Oh, and at least 10 in the base image code, so I hope you?ve been able to convince yourself they won?t have similar problems! I used currentEvent on Bert?s advice a couple of years ago and understood that it really should be the current event. If that is no longer true then I see a good chance of quite a few bits of code going wrong and it needs to be trapped to alert people properly. I?m fairly sure that my original puzzling situation was being caused by new events getting read as part of the doOneCycle, some of them causing changes in the PaintCanvas state and thus running clearMoveState which nils my selectionRect and thus, Boom. But your changes leave the currentEvent returning the same event (I think) all the time or at least nearly so. At a wild guess the entire edifice around ActiveEvent and #currentEvent etc are relics of converting to events and ought to be removed in order to force us all to use proper event handling! >> >> I noticed that the selection tool in the Paint Editor does not work at >> all. And the nil-debugger appears *only* if I try to draw a rectangle >> after trying to select something, which did not work. Correct. Reverting the two #sendFocus? methods lets it all work. >> >> So, does the selection tool work for you? I would fix that first. It only works when reverting etc. >> My guess is that Scratch can be fixed to work again. I certainly hope so ;-) You?ll have a large number of kids chasing you to the ends of the earth if not! > At this point in the code, "self currentEvent" would always be the same > event object in the middle of event dispatching. So will "currentHand". > Hence, this whileTrue will never end if you ask the same (immutable) event > object over and over again. You nil-bug occures if you ivoke another event > inside this loop, which will then call some code in PaintCanvas that makes > selectionRect nil. Yeah, I think this where the old rule - self current will always be the latest event to have been processed - has been broken. But yes, the best real answer is to rewrite a couple of dozen complex UI methods. Sigh. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Don't diddle code to make it faster; find a better algorithm. From Marcel.Taeumel at hpi.de Sun Aug 21 07:04:06 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Sun Aug 21 07:05:17 2016 Subject: [squeak-dev] Re: ActiveEvent/Object>>currentEvent broken by Morphic-mt.1283? In-Reply-To: <3F765760-9A59-4831-9BFE-5776F671B618@rowledge.org> References: <1471677435424-4912031.post@n4.nabble.com> <1471688906845-4912039.post@n4.nabble.com> <3F765760-9A59-4831-9BFE-5776F671B618@rowledge.org> Message-ID: <1471763046929-4912090.post@n4.nabble.com> Hey Tim, the use of #currentEvent is, basically, fine in Scratch and in Squeak. It only gets tricky if you do it in a loop like this: [self currentEvent anyButtonPressed] whileTrue: [ ... self currentWorld doOneCycle]. After doing another cycle, another event dispatching got finished and #currentEvent is again the object it was when entering the method were this loop is running. If you really want the "last mouse event", you should call "self currentHand lastEvent" -- which only keeps track of the last mouse event (no other kinds of events) compared to #currentEvent, which can also have keyboard events or drop events. In general, using #currentEvent without spawning another world cycle in a loop is fine: "self currentEvent shiftPressed" (BookMorph >> #showMoreControls) If you cannot pass the current event as an argument from call to call but want to reuse some piece of code that just accesses that current event. "menu popUpEvent: self currentEvent in: self world." (DialogWindow >> #offerDialogMenu) Same here. Note that there *is* a world cycle below but the conditions are quite different: "[menu isInWorld] whileTrue: [self world doOneSubCycle]." "aMenu popUpEvent: self currentEvent in: self world" (FlapTab >> #setEdgeToAdhereTo:) Same here. No loop with do-one-cycle. "...self currentEvent isMouse and: [self currentEvent isMouseUp]..." (MorphicToolBuilder >> #open:) Single query, no loop. Fine. ****************** Scratch uses #currentEvent in 22 places. Only these 2 places bother me: PaintCanvas >> #selectRectangleStartingAt: ScriptableScratchMorph class >> #fromUser Because they do event dispatching again in a loop and assume that their own current event changes. You should use "self currentHand lastEvent" here. There are also 4 step methods: ScratchNoteSelector >> #step LibraryItemMorph >> #step MediaItemMorph >> #step PaintCanvas >> #step Which get called outside any event dispatching but separately. These will automatically fall-back to "self currentHand lastEvent" because ActiveEvent will be nil then. I hope this helps. Best, Marcel -- View this message in context: http://forum.world.st/ActiveEvent-Object-currentEvent-broken-by-Morphic-mt-1283-tp4912022p4912090.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Sun Aug 21 11:51:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 21 11:51:18 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1293.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1293.mcz ==================== Summary ==================== Name: Morphic-mt.1293 Author: mt Time: 21 August 2016, 1:50:42.328131 pm UUID: 898ce70a-0deb-d049-abf1-cf494d533647 Ancestors: Morphic-mt.1292 Fixes list of open windows for windows that do not have a model set. =============== Diff against Morphic-mt.1292 =============== Item was changed: ----- Method: TheWorldMainDockingBar>>listWindowsOn: (in category 'submenu - windows') ----- listWindowsOn: menu | windows | windows := SortedCollection sortBlock: [:winA :winB | + ((winA model isNil or: [winB model isNil]) or: [winA model name = winB model name]) - winA model name = winB model name ifTrue: [winA label < winB label] ifFalse: [winA model name < winB model name]]. windows addAll: self allVisibleWindows. windows ifEmpty: [ menu addItem: [ :item | item contents: 'No Windows' translated; isEnabled: false ] ]. windows do: [ :each | menu addItem: [ :item | item contents: (self windowMenuItemLabelFor: each); + icon: (each model ifNotNil: [self colorIcon: each model windowColorToUse]); - icon: (self colorIcon: each model defaultBackgroundColor); target: each; selector: #comeToFront; subMenuUpdater: self selector: #windowMenuFor:on: arguments: { each }; action: [ each beKeyWindow; expand ] ] ]. menu addLine; add: 'Close all windows' target: self selector: #closeAllWindowsUnsafe; addItem: [:item | item contents: 'Close all windows without changes'; target: self; icon: MenuIcons smallBroomIcon; selector: #closeAllWindows]; add: 'Close all windows but workspaces' target: self selector: #closeAllWindowsButWorkspaces.! From leves at caesar.elte.hu Sun Aug 21 12:43:33 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Aug 21 12:43:38 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1293.mcz In-Reply-To: References: Message-ID: On Sun, 21 Aug 2016, commits@source.squeak.org wrote: > Marcel Taeumel uploaded a new version of Morphic to project The Trunk: > http://source.squeak.org/trunk/Morphic-mt.1293.mcz > > ==================== Summary ==================== > > Name: Morphic-mt.1293 > Author: mt > Time: 21 August 2016, 1:50:42.328131 pm > UUID: 898ce70a-0deb-d049-abf1-cf494d533647 > Ancestors: Morphic-mt.1292 > > Fixes list of open windows for windows that do not have a model set. > > =============== Diff against Morphic-mt.1292 =============== > > Item was changed: > ----- Method: TheWorldMainDockingBar>>listWindowsOn: (in category 'submenu - windows') ----- > listWindowsOn: menu > > | windows | > windows := SortedCollection sortBlock: [:winA :winB | Another use of SortedCollection to get rid of after the release. :) Levente > + ((winA model isNil or: [winB model isNil]) or: [winA model name = winB model name]) > - winA model name = winB model name > ifTrue: [winA label < winB label] > ifFalse: [winA model name < winB model name]]. > windows addAll: self allVisibleWindows. > windows ifEmpty: [ > menu addItem: [ :item | > item > contents: 'No Windows' translated; > isEnabled: false ] ]. > windows do: [ :each | > menu addItem: [ :item | > item > contents: (self windowMenuItemLabelFor: each); > + icon: (each model ifNotNil: [self colorIcon: each model windowColorToUse]); > - icon: (self colorIcon: each model defaultBackgroundColor); > target: each; > selector: #comeToFront; > subMenuUpdater: self > selector: #windowMenuFor:on: > arguments: { each }; > action: [ each beKeyWindow; expand ] ] ]. > menu > addLine; > add: 'Close all windows' target: self selector: #closeAllWindowsUnsafe; > addItem: [:item | item > contents: 'Close all windows without changes'; > target: self; > icon: MenuIcons smallBroomIcon; > selector: #closeAllWindows]; > add: 'Close all windows but workspaces' target: self selector: #closeAllWindowsButWorkspaces.! > > > From leves at caesar.elte.hu Sun Aug 21 15:21:09 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Aug 21 15:21:13 2016 Subject: [squeak-dev] Scrollbar bug Message-ID: Hi All, When you right-click (the one which doesn't open the halo) on a scrollbar anywere but on the thumb, then it'll open the menu and will scroll to the end. Either the menu or the scrolling should not be there. Levente From asqueaker at gmail.com Sun Aug 21 20:05:54 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Aug 21 20:06:37 2016 Subject: [squeak-dev] Re: The Trunk: Graphics-mt.363.mcz In-Reply-To: <1471726760832-4912079.post@n4.nabble.com> References: <1471726760832-4912079.post@n4.nabble.com> Message-ID: Menus were the only thing I noticed. On Sat, Aug 20, 2016 at 3:59 PM, marcel.taeumel wrote: > Chris Muller-3 wrote >> Hi Marcel, I don't know if this is related, but one thing I noticed is >> that the Themeing seems to be leaking into the "my.prefs" file -- if >> you select one of the Dark themes, then save a my.prefs, then go into >> Squeak 4.6 and load prefs, some of the colors become dark... >> >> On Sat, Aug 20, 2016 at 1:30 AM, < > >> commits@.squeak > >> > wrote: >>> Marcel Taeumel uploaded a new version of Graphics to project The Trunk: >>> http://source.squeak.org/trunk/Graphics-mt.363.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Graphics-mt.363 >>> Author: mt >>> Time: 20 August 2016, 8:29:57.57726 am >>> UUID: 9d83d026-8ef5-8248-b8d3-4e88bc6ab344 >>> Ancestors: Graphics-mt.362 >>> >>> Fix font resetting in the face of UI themes. >>> >>> =============== Diff against Graphics-mt.362 =============== >>> >>> Item was changed: >>> ----- Method: StrikeFont class>>installDejaVu (in category 'font >>> creation') ----- >>> installDejaVu >>> + "You have to re-create UI themes after doing this. >>> - " >>> StrikeFont installDejaVu >>> " >>> >>> TextConstants >>> at: 'Bitmap DejaVu Sans' >>> put: (TextStyle fontArray: (#(7 9 12 14 17 20) collect: >>> [:size | self createDejaVu: size])). >>> - Preferences restoreDefaultFonts. >>> ! >>> >>> Item was changed: >>> ----- Method: StrikeFont class>>installDejaVuDark (in category 'font >>> creation') ----- >>> installDejaVuDark >>> + " This is a Version of dejaVu renderd for light text on dark >>> background. You have to re-create UI themes after doing this. >>> - " This is a Version of dejaVu renderd for light text on dark >>> background. >>> StrikeFont installDejaVuDark >>> " >>> >>> TextConstants >>> at: 'Darkmap DejaVu Sans' >>> put: (TextStyle fontArray: (#(7 9 12 14 17 20) collect: >>> [:size | self createDejaVuDark: size])). >>> ! >>> >>> > > Which colors become dark? Can you post a screenshot? > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/The-Trunk-Graphics-mt-363-mcz-tp4912028p4912079.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Sun Aug 21 20:14:16 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Aug 21 20:14:59 2016 Subject: [squeak-dev] Scrollbar bug In-Reply-To: References: Message-ID: > When you right-click (the one which doesn't open the halo) a.k.a., "yellow" click. > on a scrollbar > anywere but on the thumb, then it'll open the menu and will scroll to the > end. Confirmed. > Either the menu or the scrolling should not be there. That out of control scrolling, definitely not.. From asqueaker at gmail.com Sun Aug 21 20:15:51 2016 From: asqueaker at gmail.com (Chris Muller) Date: Sun Aug 21 20:16:35 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: <20160821201314.GA20889@shell.msen.com> References: <8BCA4FA4-E7D4-4FAB-98DB-65795A75142E@rowledge.org> <20160821201314.GA20889@shell.msen.com> Message-ID: I've definitely experienced the exact same problem, and got around it the same way, restarting the method and proceeding. Very strange. On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis wrote: > > Moving from vm-dev to squeak-dev because it is a trunk update stream question. > Follow ups to squeak-dev please. > > Does anyone recognize this problem? > > We have an issue in trunk update processing that prevents a full update > without manual intervention. This does not affect the 5.1 release, but > it would be good to fix it so that the update from 5.0 to 5.1 can be > reproduced in a continuous integration test. > > To reproduce: Start with Squeak5.0-15113.image, set the update URL preference > to http://source.squeak.org/trunk, and do an "update from server". > > The error first appears when beginning to process the update-mt.378.mcm > update map. The problem is related to updating the progress bar with > ProgressInitiationException. > > When the failure occurs, the debugger (see attached image) seems to > show an array access being interpreted as if the array was an instance > of StrikeFont. Per Nicolas' note below, it may be related to showing > the progress bar while updating it. > > I can restart the update process from the debugger from > SystemProgressMorph>>position:label:min:max: in the stack frame, and the > update proceeds. The error happens several more times, then at some point > it seems to go away, so apparently the problem was fixed at some later > point in the update stream. > > Does anyone recognize this problem? Can we work around it by changing one > or more of the update maps? > > Thanks, > Dave > > > On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: >> >> yes, this is a problem I encountered both in 32 and 64 bits squeak while >> updating. >> >> I think it's related to showing the progress bar while updating the >> progress bar. It's a Squeak trunk update problem, not a VM problem. >> >> If some class layout change, but some block is still active (yeah, did you >> see how many blocks we traverse just to change display of a bar...), then >> the old block has invalid inst var offsets (offsets to the old object that >> now has become a new object with new layout). >> >> In an interactive image, just close the debugger and relaunch the update. >> In an headless automated process, well... We should have fixed the update >> or start from a newer artifact... >> >> 2016-08-19 21:32 GMT+02:00 tim Rowledge : >> > >> > I just tried running the vmmaker-build script on my iMac with weirdly bad >> > results. >> > >> > The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst trying >> > to do the update part of the process I had several *very* odd failures >> > where an object in a block was mistaken for nil during a message send. For >> > example in a progress bar update (which I can???t provide a log for since the >> > log got overwritten later) a line >> > (bars at: index) >> > lead to a nil is not indexable halt. Yet in inspecting the prior >> > stackframe the bars object was a perfectly normal array of progress bars. A >> > similar but not identical problem happened during another attempt. >> > >> > Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file failed when >> > the vm exploded with no visible log. >> > >> > Now I???m attempting to repeat that with a new 5.1rc1 vm & already up to >> > date 5.1rc1 image. Which has sorta-worked, in a rather odd manner. It got >> > to the final save and quit but when I start the supposedly prepared image >> > there is a problem with it trying to filein that file. I can???t tell right >> > now if it relates to the manual filein I started or if something got added >> > as a deferred action? Or maybe it???s a side-effect of the filein having a >> > save & quit? Not come across this before. >> > >> > >> > >> > So far as I can tell it did complete the filein, so maybe all is well. >> > > From leves at caesar.elte.hu Sun Aug 21 20:55:55 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Aug 21 20:56:02 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <8BCA4FA4-E7D4-4FAB-98DB-65795A75142E@rowledge.org> <20160821201314.GA20889@shell.msen.com> Message-ID: Same here. I think the code changes during the update and the old code on the stack causes the problem. Levente On Sun, 21 Aug 2016, Chris Muller wrote: > > I've definitely experienced the exact same problem, and got around it > the same way, restarting the method and proceeding. Very strange. > > > On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis wrote: >> >> Moving from vm-dev to squeak-dev because it is a trunk update stream question. >> Follow ups to squeak-dev please. >> >> Does anyone recognize this problem? >> >> We have an issue in trunk update processing that prevents a full update >> without manual intervention. This does not affect the 5.1 release, but >> it would be good to fix it so that the update from 5.0 to 5.1 can be >> reproduced in a continuous integration test. >> >> To reproduce: Start with Squeak5.0-15113.image, set the update URL preference >> to http://source.squeak.org/trunk, and do an "update from server". >> >> The error first appears when beginning to process the update-mt.378.mcm >> update map. The problem is related to updating the progress bar with >> ProgressInitiationException. >> >> When the failure occurs, the debugger (see attached image) seems to >> show an array access being interpreted as if the array was an instance >> of StrikeFont. Per Nicolas' note below, it may be related to showing >> the progress bar while updating it. >> >> I can restart the update process from the debugger from >> SystemProgressMorph>>position:label:min:max: in the stack frame, and the >> update proceeds. The error happens several more times, then at some point >> it seems to go away, so apparently the problem was fixed at some later >> point in the update stream. >> >> Does anyone recognize this problem? Can we work around it by changing one >> or more of the update maps? >> >> Thanks, >> Dave >> >> >> On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: >>> >>> yes, this is a problem I encountered both in 32 and 64 bits squeak while >>> updating. >>> >>> I think it's related to showing the progress bar while updating the >>> progress bar. It's a Squeak trunk update problem, not a VM problem. >>> >>> If some class layout change, but some block is still active (yeah, did you >>> see how many blocks we traverse just to change display of a bar...), then >>> the old block has invalid inst var offsets (offsets to the old object that >>> now has become a new object with new layout). >>> >>> In an interactive image, just close the debugger and relaunch the update. >>> In an headless automated process, well... We should have fixed the update >>> or start from a newer artifact... >>> >>> 2016-08-19 21:32 GMT+02:00 tim Rowledge : >>>> >>>> I just tried running the vmmaker-build script on my iMac with weirdly bad >>>> results. >>>> >>>> The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst trying >>>> to do the update part of the process I had several *very* odd failures >>>> where an object in a block was mistaken for nil during a message send. For >>>> example in a progress bar update (which I can???t provide a log for since the >>>> log got overwritten later) a line >>>> (bars at: index) >>>> lead to a nil is not indexable halt. Yet in inspecting the prior >>>> stackframe the bars object was a perfectly normal array of progress bars. A >>>> similar but not identical problem happened during another attempt. >>>> >>>> Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file failed when >>>> the vm exploded with no visible log. >>>> >>>> Now I???m attempting to repeat that with a new 5.1rc1 vm & already up to >>>> date 5.1rc1 image. Which has sorta-worked, in a rather odd manner. It got >>>> to the final save and quit but when I start the supposedly prepared image >>>> there is a problem with it trying to filein that file. I can???t tell right >>>> now if it relates to the manual filein I started or if something got added >>>> as a deferred action? Or maybe it???s a side-effect of the filein having a >>>> save & quit? Not come across this before. >>>> >>>> >>>> >>>> So far as I can tell it did complete the filein, so maybe all is well. >>>> >> > From commits at source.squeak.org Sun Aug 21 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 21 21:55:05 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160821215503.27073.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068696.html Name: Morphic-mt.1293 Ancestors: Morphic-mt.1292 Fixes list of open windows for windows that do not have a model set. ============================================= From goran at krampe.se Mon Aug 22 00:24:31 2016 From: goran at krampe.se (=?UTF-8?Q?G=c3=b6ran_Krampe?=) Date: Mon Aug 22 00:25:08 2016 Subject: [squeak-dev] Spry takes one more step towards being interesting? Message-ID: <2dfc1dba-f993-bcd7-1c6c-636c546eda2f@krampe.se> Hey! ESUG is going on (how I wish I could have been there!) and I just spent a few hours to take an important step for Spry (sprylang.org) that I hope will make things even more interesting: UI So... I took the neat wrapper of libui (basis of Go's new UI) that Andreas (author of Nim) has generated, then I hooked up a few primitives that I needed (9 so far) so that I could write this Spry program: -------------------------------------- # Initialize libui uiInit # Create a new Window win = newWindow "Spry Awakens" 200 200 true # Set a handler on closing window win onClosing: [ win message: "Time to close!" title: "Sorry..." echo "Okidoki closing window..." controlDestroy win echo "And quitting..." uiQuit ] # Show the window win show # Enter libui's event loop win uiMain -------------------------------------- Screenshot: http://pasteboard.co/btzf03EMR.png As you can see it creates a Window, hooks in an onClosing handler, inside the handler it calls message:title: to show an alert and then destroys window and quits libui. Then we show the window and enter libuis event loop. The above can be stuffed into a script and run like "spry win.sy" or use the hashbang trick. BUT... even nicer, we can wrap it up in a Nim program like this: ---------------------------------- # Spry sample single UI binary import spryvm, spryio, spryoo, sprymodules, spryui var spry = newInterpreter() spry.addIO() spry.addOO() spry.addModules() spry.addUI() discard spry.eval("""[ # Initialize libui uiInit # Create a new Window win = newWindow "Spry Awakens" 200 200 true # Set a handler on closing window win onClosing: [ win message: "Time to close!" title: "Sorry..." echo "Okidoki closing window..." controlDestroy win echo "And quitting..." uiQuit ] # Show the window win show # Enter libui's event loop win uiMain ]""") ------------------------------ We can then compile it, strip it, etc into a single 51kb 64 bit Linux binary! I haven't managed to compile and link it fully statically (need to mess around with gtk3, libui etc), so it probably doesn't run on your system (given libui.so missing), but here is the binary: http://krampe.se/win I presume it would run fine if you first built and installed libui: https://github.com/andlabs/libui regards, G?ran From commits at source.squeak.org Mon Aug 22 07:53:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 07:53:48 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1294.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1294.mcz ==================== Summary ==================== Name: Morphic-mt.1294 Author: mt Time: 22 August 2016, 9:53:07.357917 am UUID: e6c9b0f9-f531-6045-b74b-4f1f5d9a7405 Ancestors: Morphic-mt.1293 (For an update fix in the help browser.) If models start to tell text fields about selection changes, give models a chance to just say "No change, please." =============== Diff against Morphic-mt.1293 =============== Item was changed: ----- Method: PluggableTextMorph>>setSelection: (in category 'model access') ----- setSelection: sel + + "Give the model a chance to just leave the selection where it currently is." + sel ifNil: [^ self]. + selectionInterval := sel. textMorph editor selectFrom: sel first to: sel last. self scrollSelectionIntoView.! From commits at source.squeak.org Mon Aug 22 07:56:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 07:56:08 2016 Subject: [squeak-dev] The Trunk: HelpSystem-Core-mt.98.mcz Message-ID: Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk: http://source.squeak.org/trunk/HelpSystem-Core-mt.98.mcz ==================== Summary ==================== Name: HelpSystem-Core-mt.98 Author: mt Time: 22 August 2016, 9:56:00.217917 am UUID: 16424c54-dde0-5749-80ec-3ffbdadc87b4 Ancestors: HelpSystem-Core-mt.97 Fixes a bug with line endings and search topics in help browser. Fixes another bug with selection reset when editing a help topic. Provide result selection when navigating from search results to the actual search topic. Continue the search then with [CMD]+[G] (i.e. "find again"). =============== Diff against HelpSystem-Core-mt.97 =============== Item was changed: Model subclass: #HelpBrowser + instanceVariableNames: 'rootTopic currentTopic currentParentTopic result searchTopic topicPath toplevelTopics oldTopic topicContentsSelection isUpdating' - instanceVariableNames: 'rootTopic currentTopic currentParentTopic result searchTopic topicPath toplevelTopics oldTopic' classVariableNames: 'DefaultHelpBrowser' poolDictionaries: '' category: 'HelpSystem-Core-UI'! !HelpBrowser commentStamp: 'tbn 3/8/2010 09:33' prior: 0! A HelpBrowser is used to display a hierarchy of help topics and their contents. Instance Variables rootTopic: window: treeMorph: contentMorph: rootTopic - xxxxx window - xxxxx treeMorph - xxxxx contentMorph - xxxxx ! Item was changed: ----- Method: HelpBrowser>>accept: (in category 'actions') ----- accept: text "Accept edited text. Compile it into a HelpTopic" | parent currentKey normalizedText colorsToRemove | (self currentParentTopic isNil or: [self currentParentTopic isEditable not]) ifTrue: [^ self inform: 'This help topic cannot be edited.']. self changed: #clearUserEdits. "Remove default colors for the sake of UI themes." normalizedText := text. colorsToRemove := {Color black. Color white}. normalizedText runs: (normalizedText runs collect: [:attributes | attributes reject: [:attribute | (((attribute respondsTo: #color) and: [colorsToRemove includes: attribute color]) or: [attribute respondsTo: #font])]]). parent := self currentParentTopic. currentKey := self currentTopic key. + isUpdating := true. + parent accept: normalizedText for: self currentTopic. - parent refresh. parent == self rootTopic ifTrue: [self rootTopic: parent]. + isUpdating := false. + self currentTopic: (parent subtopics detect: [:t | t key = currentKey]).! Item was changed: ----- Method: HelpBrowser>>buildContentsWith: (in category 'toolbuilder') ----- buildContentsWith: builder ^ builder pluggableTextSpec new model: self; getText: #topicContents; setText: #accept:; + selection: #topicContentsSelection; menu: #codePaneMenu:shifted:; frame: (LayoutFrame fractions: (0.3@0.0 corner: 1@1) offsets: (0@ (Preferences standardDefaultTextFont height * 2) corner: 0@0)); yourself! Item was added: + ----- Method: HelpBrowser>>changed: (in category 'updating') ----- + changed: aspect + + (isUpdating == true and: [aspect == #topicContents]) ifTrue: [^ self]. + super changed: aspect.! Item was changed: ----- Method: HelpBrowser>>currentTopic: (in category 'accessing') ----- currentTopic: aHelpTopic self okToChange ifFalse: [^ self]. self currentTopic == aHelpTopic ifTrue: [^ self]. + + ((self currentTopic notNil + and: [aHelpTopic notNil]) + and: [self currentTopic key ~= aHelpTopic key]) ifTrue: [ + "Clear selection, we have new contents." + self topicContentsSelection: (1 to: 0)]. currentTopic := aHelpTopic. topicPath := nil. + topicContentsSelection := nil. self changed: #currentTopic. self changed: #topicContents. self changed: #showContents.! Item was added: + ----- Method: HelpBrowser>>topicContentsSelection (in category 'accessing - ui') ----- + topicContentsSelection + + ^ topicContentsSelection! Item was added: + ----- Method: HelpBrowser>>topicContentsSelection: (in category 'accessing - ui') ----- + topicContentsSelection: anInterval + + topicContentsSelection := anInterval. + self changed: #topicContentsSelection.! Item was changed: ----- Method: HelpBrowser>>update:with: (in category 'updating') ----- update: aspect with: object aspect == #contents ifTrue: [ object == self currentTopic ifTrue: [self changed: #topicContents]]. aspect == #searchResultSelected ifTrue: [ + self currentTopicPath: object]. + aspect == #searchResultContentsSelected ifTrue: [ + self topicContentsSelection: object].! - self currentTopicPath: object].! Item was changed: ----- Method: SearchTopic>>find:in:results: (in category 'as yet unclassified') ----- find: term in: path results: results | resultTemplate c topic | topic := path last. + resultTemplate := Array new: 6. - resultTemplate := Array new: 5. (topic title asString findString: term startingAt: 1 caseSensitive: false) in: [:index | index > 0 ifTrue: [resultTemplate at: 2 put: (index to: index + term size)]]. ((c := topic contents asString withSqueakLineEndings) findString: term startingAt: 1 caseSensitive: false) in: [:index | index > 0 ifTrue: [ | leadingContext trailingContext i | leadingContext := 0. trailingContext := 0. i := index. [i notNil] whileTrue: [ (leadingContext = 2 or: [i = 1]) ifTrue: [ leadingContext := i = 1 ifTrue: [i] ifFalse: [i+1]. i := nil] ifFalse: [ ((c at: i) = Character cr) ifTrue: [ leadingContext := leadingContext + 1]. i := i - 1] ]. i := index + term size. [i notNil] whileTrue: [ + (trailingContext = 2 or: [i >= c size]) - (trailingContext = 2 or: [i = c size]) ifTrue: [ trailingContext := i = c size ifTrue: [i] ifFalse: [i-1]. i := nil] ifFalse: [ ((c at: i) = Character cr) ifTrue: [ trailingContext := trailingContext + 1]. i := i + 1] ]. resultTemplate at: 1 put: path; at: 3 put: (index - leadingContext + 1 to: index - leadingContext + term size); at: 4 put: (c copyFrom: leadingContext to: trailingContext); + at: 5 put: leadingContext; + at: 6 put: (index to: index + term size - 1). - at: 5 put: leadingContext. self mutex critical: [ results add: resultTemplate ]. self triggerUpdateContents. ] ]. topic isSearchable ifTrue: [ topic subtopics do: [:t | self find: term in: path, {t} results: results]].! Item was changed: ----- Method: SearchTopic>>printResultEntry: (in category 'as yet unclassified') ----- printResultEntry: entry | resultEntry topic | resultEntry := '' asText. topic := entry first last. entry second notNil ifFalse: [resultEntry append: ( (topic title) asText addAttribute: TextEmphasis bold)] ifTrue: [resultEntry append: ( (topic title) asText addAttribute: TextEmphasis bold; addAttribute: (TextColor color: Color green muchDarker) from: entry second first to: entry second last)]. resultEntry append: (' (open topic)' asText + addAttribute: (PluggableTextAttribute evalBlock: [ + self changed: #searchResultSelected with: entry first. + self changed: #searchResultContentsSelected with: entry sixth])). - addAttribute: (PluggableTextAttribute evalBlock: [self changed: #searchResultSelected with: entry first])). resultEntry append: String cr. entry fourth in: [:contents | | text | text := contents asText. text addAttribute: (TextColor color: Color green muchDarker) from: entry third first to: entry third last; addAttribute: TextEmphasis bold from: entry third first to: entry third last. resultEntry append: text withBlanksTrimmed; append: '\\' withCRs. ]. ^ resultEntry! From hannes.hirzel at gmail.com Mon Aug 22 08:02:22 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Mon Aug 22 08:02:25 2016 Subject: [squeak-dev] The Trunk: Help-Squeak-Project-mt.51.mcz In-Reply-To: <57b4c87c.86bd370a.5ef23.8297SMTPIN_ADDED_MISSING@mx.google.com> References: <57b4c87c.86bd370a.5ef23.8297SMTPIN_ADDED_MISSING@mx.google.com> Message-ID: Thank you for the new links! A buglet in the same area Help Browser Tutorials The Squeak Image Working with the Squeak Image mentions an 'Object Explorer'. But there is no entry for such a tool, neither in the tool nor the apps menu. A link would be helpful. And then links for Project current and Project current world Smalltalk --Hannes On Wed, 17 Aug 2016 20:26:23.383 0000, commits@source.squeak.org wrote: > Marcel Taeumel uploaded a new version of Help-Squeak-Project to project The > Trunk: > http://source.squeak.org/trunk/Help-Squeak-Project-mt.51.mcz > > ==================== Summary ==================== > > Name: Help-Squeak-Project-mt.51 > Author: mt > Time: 17 August 2016, 10:26:23.585 pm > UUID: 0132d656-322c-a64b-b805-156f1cb523ea > Ancestors: Help-Squeak-Project-mt.50 > > Some links added to some tool help texts. (Thanks Hannes!) > > =============== Diff against Help-Squeak-Project-mt.50 =============== > > Item was changed: > ----- Method: SqueakToolsHelp class>>basicDevelopmentTools (in category > 'pages') ----- > basicDevelopmentTools > + "This method was automatically generated. Edit it using:" > + "SqueakToolsHelp edit: #basicDevelopmentTools" > + ^(HelpTopic > - ^HelpTopic > title: 'Basic Development Tools' > + contents: > + 'Smalltalk environments have some of the best user interfaces for > programmers ever devised. Those who have programmed in Lisp under Emacs have > some idea, but Smalltalk is even better. > - contents: 'Smalltalk environments have some of the best user interfaces > for programmers ever devised. Those who have programmed in Lisp under Emacs > have some idea, but Smalltalk is even better. > > You should learn these basic tools thoroughly: > - Workspace > + - Transcript (do it: Transcript showln: ''Hello Squeak!!!!'') > - - Transcript > - Browser > - Inspector > - File List > + - Change Sorter (and also the Dual Change Sorter) > - - Change Sorter > - Debugger > + - Method Finder > + !! > + ]style[(235 9 3 10 9 34 4 7 3 9 3 9 3 13 15 18 4 8 3 14 > 1),Rcode://Workspace open;,,Rcode://Transcript open;,,Rcode://Transcript > showln: ''Hello Squeak!!!!'';,,Rcode://Browser open;,,Rcode://#(S Q U E A K) > inspect;,,Rcode://FileList open;,,Rcode://ChangeSorter new > open;,,Rcode://DualChangeSorter new > open;,,Rcode://7/0;,,Rcode://SelectorBrowser new open;,!!' readStream > nextChunkText) > + key: #basicDevelopmentTools! > - - Method Finder > - '! > > Item was changed: > ----- Method: SqueakToolsTranscriptHelp class>>transcript (in category > 'pages') ----- > transcript > + "This method was automatically generated. Edit it using:" > + "SqueakToolsTranscriptHelp edit: #transcript" > + ^(HelpTopic > - ^HelpTopic > title: 'The Transcript window' > + contents: > + 'The Transcript window is often used for logging or printing results from > text only code. > - contents: 'The Transcript window is often used for logging or printing > results from text only code. > To open the Transcript use TheWorldMenu and choose ''open...''. Then > choose ''Transcript''. > You can also type > > Transcript open > > in a Workspace and doIt. > + !! > + ]style[(222 9 11),Rcode://Workspace open;,!!' readStream nextChunkText) > + key: #transcript! > - '! > > Item was changed: > ----- Method: SqueakToolsWorkspaceHelp class>>openWorkspace (in category > 'pages') ----- > openWorkspace > + "This method was automatically generated. Edit it using:" > + "SqueakToolsWorkspaceHelp edit: #openWorkspace" > + ^(HelpTopic > - ^HelpTopic > title: 'Open a Workspace' > + contents: > + 'You can open a Workspace window in any of the following ways: > - contents: 'You can open a Workspace window in any of the following > ways: > > + - Keyboard Shortcut: while pointing at an empty part of the Squeak window, > press alt-k (in Windows) or cmd-k (on a Mac) or ctrl-k (in Linux) > - - Keyboard Shortcut: while pointing at an empty part of the Squeak window, > press alt-k (in Windows) or cmd-k (on a Mac) > - World Menu: select "Workspace" > - Tools Flap: click on the Tools Flap. When it comes out, drag the > Workspace icon out. > + - Doit: select inside the following quote and doit: "Workspace open"!! > + ]style[(15 9 184 10 176),Rcode://Workspace open;,,Rcode://ActiveWorld > openWorldMenu;,!!' readStream nextChunkText) > + key: #openWorkspace! > - - Doit: select inside the following quote and doit: "Workspace open"'! > > > From commits at source.squeak.org Mon Aug 22 08:29:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 08:29:42 2016 Subject: [squeak-dev] The Trunk: Tests-mt.356.mcz Message-ID: Marcel Taeumel uploaded a new version of Tests to project The Trunk: http://source.squeak.org/trunk/Tests-mt.356.mcz ==================== Summary ==================== Name: Tests-mt.356 Author: mt Time: 22 August 2016, 10:29:10.855323 am UUID: f40b9423-7148-d149-b670-25d1607aace2 Ancestors: Tests-mt.355 Remove empty class category. =============== Diff against Tests-mt.355 =============== Item was changed: SystemOrganization addCategory: #'Tests-Bugs'! SystemOrganization addCategory: #'Tests-Compiler'! SystemOrganization addCategory: #'Tests-Dependencies'! SystemOrganization addCategory: #'Tests-Digital Signatures'! SystemOrganization addCategory: #'Tests-Environments'! SystemOrganization addCategory: #'Tests-Exceptions'! SystemOrganization addCategory: #'Tests-FilePackage'! SystemOrganization addCategory: #'Tests-Files'! SystemOrganization addCategory: #'Tests-Finalization'! SystemOrganization addCategory: #'Tests-Hex'! SystemOrganization addCategory: #'Tests-Installer-Core'! SystemOrganization addCategory: #'Tests-Localization'! SystemOrganization addCategory: #'Tests-Monticello'! SystemOrganization addCategory: #'Tests-Monticello-Mocks'! SystemOrganization addCategory: #'Tests-Monticello-Utils'! SystemOrganization addCategory: #'Tests-Object Events'! SystemOrganization addCategory: #'Tests-ObjectsAsMethods'! SystemOrganization addCategory: #'Tests-PrimCallController'! SystemOrganization addCategory: #'Tests-Release'! SystemOrganization addCategory: #'Tests-System-Object Storage'! SystemOrganization addCategory: #'Tests-System-Support'! SystemOrganization addCategory: #'Tests-Utilities'! SystemOrganization addCategory: #'Tests-VM'! SystemOrganization addCategory: #'Tests-System-Digital Signatures'! SystemOrganization addCategory: #'Tests-System-Preferences'! - SystemOrganization addCategory: #'Tests-MonticelloMocks'! From commits at source.squeak.org Mon Aug 22 08:31:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 08:31:16 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.167.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.167.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.167 Author: mt Time: 22 August 2016, 10:31:09.746323 am UUID: e32cca56-1bab-a048-9a15-a646dd2a5e9d Ancestors: ReleaseBuilder-mt.166 For a cleaner release process, do not release locally by default. (We might want to change this to be a class var to avoid dirty packages in the release image.) =============== Diff against ReleaseBuilder-mt.166 =============== Item was changed: ----- Method: ReleaseBuilder class>>releaseLocally (in category 'accessing') ----- releaseLocally "If true, use a local, directory-based repository. Usually in the working directory." + ^ false! - ^ true! From commits at source.squeak.org Mon Aug 22 08:51:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 08:51:06 2016 Subject: [squeak-dev] The Trunk: System-mt.906.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.906.mcz ==================== Summary ==================== Name: System-mt.906 Author: mt Time: 22 August 2016, 10:50:20.661793 am UUID: 7cd19e60-bb61-c142-8458-1414adbde9a9 Ancestors: System-mt.905 Small fix in system version to determine feature freeze. =============== Diff against System-mt.905 =============== Item was changed: ----- Method: SystemVersion>>isFeatureFreeze (in category 'testing') ----- isFeatureFreeze + ^ self isAlpha not and: [self isRelease not]! - ^ self isAlpha not! From commits at source.squeak.org Mon Aug 22 08:54:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 08:54:16 2016 Subject: [squeak-dev] The Trunk: MonticelloConfigurations-mt.145.mcz Message-ID: Marcel Taeumel uploaded a new version of MonticelloConfigurations to project The Trunk: http://source.squeak.org/trunk/MonticelloConfigurations-mt.145.mcz ==================== Summary ==================== Name: MonticelloConfigurations-mt.145 Author: mt Time: 22 August 2016, 10:54:09.101045 am UUID: 70a7747c-6b49-3949-b597-4b9290874060 Ancestors: MonticelloConfigurations-mt.144 Small tweak for the update information in the release. =============== Diff against MonticelloConfigurations-mt.144 =============== Item was changed: ----- Method: MCMcmUpdater>>doUpdate: (in category 'updating') ----- doUpdate: interactive "Update the image by loading all pending updates from the server. If this is the default updater for the system, update the system version when complete. If interteractive use a modal notifier, otherwise only update the transcript. Flush all caches. If a previous download failed this is often helpful" | config previousUpdateLevel | previousUpdateLevel := SystemVersion current highestUpdate. MCFileBasedRepository flushAllCaches. config := self updateFromRepositories: { self repository }. config ifNil: [ interactive ifTrue: [ ^self inform: 'Unable to retrieve updates from remote repository.' translated ]. Transcript cr; show: '========== Unable to retrieve updates from remote repository. ==========' translated; cr. ^ self ]. MCMcmUpdater default == self ifTrue: [ config setSystemVersion. interactive ifTrue: [ + self inform: ('Update completed.\\Version: {1}\Update: {3}{2}\\Url: {4}\Map: ''{5}''{6}' translated withCRs format: { - self inform: ('Update completed.\\Version: {1}\Update: {3}{2}\\Url: {4}\Map: ''{5}''\\{6}' translated withCRs format: { SystemVersion current version. SystemVersion current highestUpdate. previousUpdateLevel = SystemVersion current highestUpdate ifTrue: [''] ifFalse: [previousUpdateLevel asString, ' -> ']. self repository. MCMcmUpdater updateMapName. + SystemVersion current description ifEmpty: [''] ifNotEmpty: [:d | String cr, String cr, d]})]. - SystemVersion current description})]. Transcript cr; show: '========== Update completed: ' translated; show: previousUpdateLevel; show: ' -> ' ; show: SystemVersion current highestUpdate; show: ' =========='; cr ] ifFalse: [ interactive ifTrue: [ self inform: 'Update completed.' ]. Transcript cr; show: '========== Update completed. ==========' translated; cr ] ! From commits at source.squeak.org Mon Aug 22 09:00:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 09:00:25 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.168.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.168.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.168 Author: mt Time: 22 August 2016, 11:00:19.45232 am UUID: 45dd3d92-b30c-4e4b-856c-f6b0b5cce317 Ancestors: ReleaseBuilder-mt.167 Show deprecation warnings by default. =============== Diff against ReleaseBuilder-mt.167 =============== Item was changed: ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') ----- setPreferences "Preferences class defaultValueTableForCurrentRelease" " Preferences outOfTheBox." "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up." "General User interaction" Preferences enable: #generalizedYellowButtonMenu ; enable: #swapMouseButtons; disable: #mouseOverForKeyboardFocus. Morph indicateKeyboardFocus: true. Project uiManager openToolsAttachedToMouseCursor: false. SearchBar useScratchPad: false. HandMorph sendMouseWheelToKeyboardFocus: false. HandMorph synthesizeMouseWheelEvents: true. "Text input." TextEditor autoEnclose: true ; autoIndent: true ; encloseSelection: false ; destructiveBackWord: false ; blinkingCursor: true ; dumbbellCursor: false. PluggableTextMorph simpleFrameAdornments: false. "Windows" SystemWindow reuseWindows: false. SystemWindow windowsRaiseOnClick: true. SystemWindow windowTitleActiveOnFirstClick: true. Model windowActiveOnFirstClick: false. "Not good for little screen real estate." Model useColorfulWindows: false. Preferences disable: #showSplitterHandles; disable: #fastDragWindowForMorphic. CornerGripMorph drawCornerResizeHandles: false; passiveColor: (Color gray: 0.85); activeColor: (Color r: 1 g: 0.599 b: 0.0). ProportionalSplitterMorph smartHorizontalSplitters: false ; smartVerticalSplitters: false. "Scroll bars." Preferences enable: #scrollBarsNarrow; enable: #scrollBarsOnRight; enable: #alwaysHideHScrollbar; disable: #alwaysShowHScrollbar; disable: #alwaysShowVScrollbar. ScrollBar scrollBarsWithoutArrowButtons: true; scrollBarsWithoutMenuButton: true. ScrollPane useRetractableScrollBars: false. "Rounded corners." Morph preferredCornerRadius: 8. SystemWindow roundedWindowCorners: false. DialogWindow roundedDialogCorners: false. MenuMorph roundedMenuCorners: false. PluggableButtonMorph roundedButtonCorners: false. ScrollBar roundedScrollBarLook: false. "Gradients." SystemWindow gradientWindow: false. DialogWindow gradientDialog: false. MenuMorph gradientMenu: false. PluggableButtonMorph gradientButton: false. ScrollBar gradientScrollBar: false. "Shadows" Preferences enable: #menuAppearance3d. Morph useSoftDropShadow: true. "Lists and Trees" PluggableListMorph filterableLists: true; clearFilterAutomatically: false; highlightHoveredRow: true; menuRequestUpdatesSelection: true. PluggableTreeMorph filterByLabelsOnly: false; maximumSearchDepth: 1. "Standard Tools" TheWorldMainDockingBar showWorldMainDockingBar: true; showSecondsInClock: true; twentyFourHourClock: true. SearchBar useSmartSearch: true. Workspace shouldStyle: false. Browser listClassesHierarchically: true; showClassIcons: true; showMessageIcons: true; sortMessageCategoriesAlphabetically: true. Preferences enable: #annotationPanes; enable: #optionalButtons; disable: #diffsWithPrettyPrint; enable: #traceMessages; enable: #alternativeBrowseIt; enable: #menuWithIcons; enable: #visualExplorer. SystemNavigation thoroughSenders: true. Preferences disable: #debugLogTimestamp. "Halo" Preferences enable: #showBoundsInHalo ; disable: #alternateHandlesLook; disable: #showDirectionHandles. "System" NetNameResolver enableIPv6: false. Scanner allowUnderscoreAsAssignment: true; prefAllowUnderscoreSelectors: true. + + Deprecation showDeprecationWarnings: true "that's all, folks"! From commits at source.squeak.org Mon Aug 22 09:37:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 09:37:18 2016 Subject: [squeak-dev] The Trunk: ReleaseBuilder-mt.169.mcz Message-ID: Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk: http://source.squeak.org/trunk/ReleaseBuilder-mt.169.mcz ==================== Summary ==================== Name: ReleaseBuilder-mt.169 Author: mt Time: 22 August 2016, 11:37:09.697961 am UUID: 281d94ac-bf28-f242-9d0b-8eb181716f06 Ancestors: ReleaseBuilder-mt.168 Open the trunk again. =============== Diff against ReleaseBuilder-mt.168 =============== Item was changed: ----- Method: ReleaseBuilder class>>initialize (in category 'class initialization') ----- initialize "We have to be after AutoStart so that Morphic is up and running." Smalltalk addToStartUpList: ReleaseBuilder after: AutoStart. + SystemVersion newVersion: 'Squeak6.0alpha'.! - SystemVersion newVersion: 'Squeak5.1rc2'.! From commits at source.squeak.org Mon Aug 22 09:51:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 09:51:30 2016 Subject: [squeak-dev] The Trunk: Tools-mt.720.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.720.mcz ==================== Summary ==================== Name: Tools-mt.720 Author: mt Time: 22 August 2016, 11:51:12.591426 am UUID: 1ed892b1-bb0f-cb4c-8efa-19613c4b2fb9 Ancestors: Tools-mt.719 Last minute fix for selector browser label. =============== Diff against Tools-mt.719 =============== Item was added: + ----- Method: SelectorBrowser>>labelString (in category 'user interface') ----- + labelString + + ^ 'Selector Browser' translated! From bert at freudenbergs.de Mon Aug 22 12:36:09 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Mon Aug 22 12:36:13 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <8BCA4FA4-E7D4-4FAB-98DB-65795A75142E@rowledge.org> <20160821201314.GA20889@shell.msen.com> Message-ID: Seen it, discussed with Marcel but we don't have a good idea yet how to work around it. The only thing I can think of is to walk up the sender chain and restart some context above the one referencing the old instance layout. Maybe an exception handler in the updater that restarts updating in this specific case? - Bert - On Sun, Aug 21, 2016 at 10:55 PM, Levente Uzonyi wrote: > > Same here. I think the code changes during the update and the old code on > the stack causes the problem. > > Levente > > > On Sun, 21 Aug 2016, Chris Muller wrote: > > >> I've definitely experienced the exact same problem, and got around it >> the same way, restarting the method and proceeding. Very strange. >> >> >> On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis >> wrote: >> >>> >>> Moving from vm-dev to squeak-dev because it is a trunk update stream >>> question. >>> Follow ups to squeak-dev please. >>> >>> Does anyone recognize this problem? >>> >>> We have an issue in trunk update processing that prevents a full update >>> without manual intervention. This does not affect the 5.1 release, but >>> it would be good to fix it so that the update from 5.0 to 5.1 can be >>> reproduced in a continuous integration test. >>> >>> To reproduce: Start with Squeak5.0-15113.image, set the update URL >>> preference >>> to http://source.squeak.org/trunk, and do an "update from server". >>> >>> The error first appears when beginning to process the update-mt.378.mcm >>> update map. The problem is related to updating the progress bar with >>> ProgressInitiationException. >>> >>> When the failure occurs, the debugger (see attached image) seems to >>> show an array access being interpreted as if the array was an instance >>> of StrikeFont. Per Nicolas' note below, it may be related to showing >>> the progress bar while updating it. >>> >>> I can restart the update process from the debugger from >>> SystemProgressMorph>>position:label:min:max: in the stack frame, and the >>> update proceeds. The error happens several more times, then at some point >>> it seems to go away, so apparently the problem was fixed at some later >>> point in the update stream. >>> >>> Does anyone recognize this problem? Can we work around it by changing one >>> or more of the update maps? >>> >>> Thanks, >>> Dave >>> >>> >>> On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: >>> >>>> >>>> yes, this is a problem I encountered both in 32 and 64 bits squeak while >>>> updating. >>>> >>>> I think it's related to showing the progress bar while updating the >>>> progress bar. It's a Squeak trunk update problem, not a VM problem. >>>> >>>> If some class layout change, but some block is still active (yeah, did >>>> you >>>> see how many blocks we traverse just to change display of a bar...), >>>> then >>>> the old block has invalid inst var offsets (offsets to the old object >>>> that >>>> now has become a new object with new layout). >>>> >>>> In an interactive image, just close the debugger and relaunch the >>>> update. >>>> In an headless automated process, well... We should have fixed the >>>> update >>>> or start from a newer artifact... >>>> >>>> 2016-08-19 21:32 GMT+02:00 tim Rowledge : >>>> >>>>> >>>>> I just tried running the vmmaker-build script on my iMac with weirdly >>>>> bad >>>>> results. >>>>> >>>>> The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst >>>>> trying >>>>> to do the update part of the process I had several *very* odd failures >>>>> where an object in a block was mistaken for nil during a message send. >>>>> For >>>>> example in a progress bar update (which I can???t provide a log for >>>>> since the >>>>> log got overwritten later) a line >>>>> (bars at: index) >>>>> lead to a nil is not indexable halt. Yet in inspecting the prior >>>>> stackframe the bars object was a perfectly normal array of progress >>>>> bars. A >>>>> similar but not identical problem happened during another attempt. >>>>> >>>>> Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file failed >>>>> when >>>>> the vm exploded with no visible log. >>>>> >>>>> Now I???m attempting to repeat that with a new 5.1rc1 vm & already up >>>>> to >>>>> date 5.1rc1 image. Which has sorta-worked, in a rather odd manner. It >>>>> got >>>>> to the final save and quit but when I start the supposedly prepared >>>>> image >>>>> there is a problem with it trying to filein that file. I can???t tell >>>>> right >>>>> now if it relates to the manual filein I started or if something got >>>>> added >>>>> as a deferred action? Or maybe it???s a side-effect of the filein >>>>> having a >>>>> save & quit? Not come across this before. >>>>> >>>>> >>>>> >>>>> So far as I can tell it did complete the filein, so maybe all is well. >>>>> >>>>> >>> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160822/02112d49/attachment.htm From marcel.taeumel at hpi.de Mon Aug 22 14:51:18 2016 From: marcel.taeumel at hpi.de (Marcel Taeumel) Date: Mon Aug 22 14:51:32 2016 Subject: [squeak-dev] Using Semaphores in drawing code Message-ID: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> Hi, there. Take this Morph here: initialize ? ?super initialize. ? ?semaphore := Semaphore forMutualExclusion. step ? ?semaphore critical: [ [] repeat ]. drawOn: aCanvas ? ?semaphore critical: [super drawOn: aCanvas]. If you create such a morph and open it in the world, the UI process will freeze because of that endless loop in the step method. Okay. The tricky thing is, that you cannot use [CMD]+[.] because the drawing code waits for the same semaphore that is currently used in the morph's step. You will not see a debugger appear. The freshly spawned UI process will block right awai. The well known big red cross/box does not appear because there is no place to detect this situation. An easy fix would be to tell the application developer to use #critical:ifLocked: in that drawing code. If that semaphore is really necessary. However, can there be a way for Morphic to detect such issues and flag that Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw toValue: true") Could there be a notification for the Morphic framework to look out for such as WaitOnCriticalSection to flag that morph as bad? Could that primitive 86 send such a notification efficiently? Just once? ^__^ If yes, Morphic could draw its world like this (pseudo code!): ... [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | ? ?err "..." findBadMorph ?"..." setProperty: #errorOnDraw toValue: true.] ... Morphic would be more robust.? Best, Marcel -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160822/7cbe9580/attachment.htm From asqueaker at gmail.com Mon Aug 22 15:57:49 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Aug 22 15:58:32 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <8BCA4FA4-E7D4-4FAB-98DB-65795A75142E@rowledge.org> <20160821201314.GA20889@shell.msen.com> Message-ID: This isn't the first time our changes have caused update hiccups. I think it just comes with the territory. Easiest to just save off another image that is beyond the problem and move on from there. On Mon, Aug 22, 2016 at 7:36 AM, Bert Freudenberg wrote: > Seen it, discussed with Marcel but we don't have a good idea yet how to work > around it. > > The only thing I can think of is to walk up the sender chain and restart > some context above the one referencing the old instance layout. Maybe an > exception handler in the updater that restarts updating in this specific > case? > > - Bert - > > > On Sun, Aug 21, 2016 at 10:55 PM, Levente Uzonyi > wrote: >> >> >> Same here. I think the code changes during the update and the old code on >> the stack causes the problem. >> >> Levente >> >> >> On Sun, 21 Aug 2016, Chris Muller wrote: >> >>> >>> I've definitely experienced the exact same problem, and got around it >>> the same way, restarting the method and proceeding. Very strange. >>> >>> >>> On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis >>> wrote: >>>> >>>> >>>> Moving from vm-dev to squeak-dev because it is a trunk update stream >>>> question. >>>> Follow ups to squeak-dev please. >>>> >>>> Does anyone recognize this problem? >>>> >>>> We have an issue in trunk update processing that prevents a full update >>>> without manual intervention. This does not affect the 5.1 release, but >>>> it would be good to fix it so that the update from 5.0 to 5.1 can be >>>> reproduced in a continuous integration test. >>>> >>>> To reproduce: Start with Squeak5.0-15113.image, set the update URL >>>> preference >>>> to http://source.squeak.org/trunk, and do an "update from server". >>>> >>>> The error first appears when beginning to process the update-mt.378.mcm >>>> update map. The problem is related to updating the progress bar with >>>> ProgressInitiationException. >>>> >>>> When the failure occurs, the debugger (see attached image) seems to >>>> show an array access being interpreted as if the array was an instance >>>> of StrikeFont. Per Nicolas' note below, it may be related to showing >>>> the progress bar while updating it. >>>> >>>> I can restart the update process from the debugger from >>>> SystemProgressMorph>>position:label:min:max: in the stack frame, and the >>>> update proceeds. The error happens several more times, then at some >>>> point >>>> it seems to go away, so apparently the problem was fixed at some later >>>> point in the update stream. >>>> >>>> Does anyone recognize this problem? Can we work around it by changing >>>> one >>>> or more of the update maps? >>>> >>>> Thanks, >>>> Dave >>>> >>>> >>>> On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: >>>>> >>>>> >>>>> yes, this is a problem I encountered both in 32 and 64 bits squeak >>>>> while >>>>> updating. >>>>> >>>>> I think it's related to showing the progress bar while updating the >>>>> progress bar. It's a Squeak trunk update problem, not a VM problem. >>>>> >>>>> If some class layout change, but some block is still active (yeah, did >>>>> you >>>>> see how many blocks we traverse just to change display of a bar...), >>>>> then >>>>> the old block has invalid inst var offsets (offsets to the old object >>>>> that >>>>> now has become a new object with new layout). >>>>> >>>>> In an interactive image, just close the debugger and relaunch the >>>>> update. >>>>> In an headless automated process, well... We should have fixed the >>>>> update >>>>> or start from a newer artifact... >>>>> >>>>> 2016-08-19 21:32 GMT+02:00 tim Rowledge : >>>>>> >>>>>> >>>>>> I just tried running the vmmaker-build script on my iMac with weirdly >>>>>> bad >>>>>> results. >>>>>> >>>>>> The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst >>>>>> trying >>>>>> to do the update part of the process I had several *very* odd failures >>>>>> where an object in a block was mistaken for nil during a message send. >>>>>> For >>>>>> example in a progress bar update (which I can???t provide a log for >>>>>> since the >>>>>> log got overwritten later) a line >>>>>> (bars at: index) >>>>>> lead to a nil is not indexable halt. Yet in inspecting the prior >>>>>> stackframe the bars object was a perfectly normal array of progress >>>>>> bars. A >>>>>> similar but not identical problem happened during another attempt. >>>>>> >>>>>> Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file failed >>>>>> when >>>>>> the vm exploded with no visible log. >>>>>> >>>>>> Now I???m attempting to repeat that with a new 5.1rc1 vm & already up >>>>>> to >>>>>> date 5.1rc1 image. Which has sorta-worked, in a rather odd manner. It >>>>>> got >>>>>> to the final save and quit but when I start the supposedly prepared >>>>>> image >>>>>> there is a problem with it trying to filein that file. I can???t tell >>>>>> right >>>>>> now if it relates to the manual filein I started or if something got >>>>>> added >>>>>> as a deferred action? Or maybe it???s a side-effect of the filein >>>>>> having a >>>>>> save & quit? Not come across this before. >>>>>> >>>>>> >>>>>> >>>>>> So far as I can tell it did complete the filein, so maybe all is well. >>>>>> >>>> >>> > > > > From asqueaker at gmail.com Mon Aug 22 16:00:21 2016 From: asqueaker at gmail.com (Chris Muller) Date: Mon Aug 22 16:01:05 2016 Subject: [squeak-dev] Using Semaphores in drawing code In-Reply-To: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> Message-ID: Morphic is designed to run in one Process, so you shouldn't need any multi-process coordination because you should only be doing drawing in the UI process. Right? On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel wrote: > Hi, there. > > Take this Morph here: > > initialize > super initialize. > semaphore := Semaphore forMutualExclusion. > > step > semaphore critical: [ [] repeat ]. > > drawOn: aCanvas > semaphore critical: [super drawOn: aCanvas]. > > If you create such a morph and open it in the world, the UI process will > freeze because of that endless loop in the step method. Okay. The tricky > thing is, that you cannot use [CMD]+[.] because the drawing code waits for > the same semaphore that is currently used in the morph's step. You will not > see a debugger appear. The freshly spawned UI process will block right awai. > The well known big red cross/box does not appear because there is no place > to detect this situation. > > An easy fix would be to tell the application developer to use > #critical:ifLocked: in that drawing code. If that semaphore is really > necessary. > > However, can there be a way for Morphic to detect such issues and flag that > Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw toValue: > true") Could there be a notification for the Morphic framework to look out > for such as WaitOnCriticalSection to flag that morph as bad? Could that > primitive 86 send such a notification efficiently? Just once? ^__^ > > If yes, Morphic could draw its world like this (pseudo code!): > ... > [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | > err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: true.] > ... > > Morphic would be more robust. > > Best, > Marcel > > > > > > From nicolas.cellier.aka.nice at gmail.com Mon Aug 22 16:18:39 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Mon Aug 22 16:18:45 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <8BCA4FA4-E7D4-4FAB-98DB-65795A75142E@rowledge.org> <20160821201314.GA20889@shell.msen.com> Message-ID: There might be another possibility: destroy the progress bar in the preamble. How to detect the progress bar is left as an exercize (translate: I just don't know, maybe also by walking the stack). Reopen the progress bar in postscript. 2016-08-22 17:57 GMT+02:00 Chris Muller : > This isn't the first time our changes have caused update hiccups. I > think it just comes with the territory. Easiest to just save off > another image that is beyond the problem and move on from there. > > On Mon, Aug 22, 2016 at 7:36 AM, Bert Freudenberg > wrote: > > Seen it, discussed with Marcel but we don't have a good idea yet how to > work > > around it. > > > > The only thing I can think of is to walk up the sender chain and restart > > some context above the one referencing the old instance layout. Maybe an > > exception handler in the updater that restarts updating in this specific > > case? > > > > - Bert - > > > > > > On Sun, Aug 21, 2016 at 10:55 PM, Levente Uzonyi > > wrote: > >> > >> > >> Same here. I think the code changes during the update and the old code > on > >> the stack causes the problem. > >> > >> Levente > >> > >> > >> On Sun, 21 Aug 2016, Chris Muller wrote: > >> > >>> > >>> I've definitely experienced the exact same problem, and got around it > >>> the same way, restarting the method and proceeding. Very strange. > >>> > >>> > >>> On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis > >>> wrote: > >>>> > >>>> > >>>> Moving from vm-dev to squeak-dev because it is a trunk update stream > >>>> question. > >>>> Follow ups to squeak-dev please. > >>>> > >>>> Does anyone recognize this problem? > >>>> > >>>> We have an issue in trunk update processing that prevents a full > update > >>>> without manual intervention. This does not affect the 5.1 release, but > >>>> it would be good to fix it so that the update from 5.0 to 5.1 can be > >>>> reproduced in a continuous integration test. > >>>> > >>>> To reproduce: Start with Squeak5.0-15113.image, set the update URL > >>>> preference > >>>> to http://source.squeak.org/trunk, and do an "update from server". > >>>> > >>>> The error first appears when beginning to process the > update-mt.378.mcm > >>>> update map. The problem is related to updating the progress bar with > >>>> ProgressInitiationException. > >>>> > >>>> When the failure occurs, the debugger (see attached image) seems to > >>>> show an array access being interpreted as if the array was an instance > >>>> of StrikeFont. Per Nicolas' note below, it may be related to showing > >>>> the progress bar while updating it. > >>>> > >>>> I can restart the update process from the debugger from > >>>> SystemProgressMorph>>position:label:min:max: in the stack frame, and > the > >>>> update proceeds. The error happens several more times, then at some > >>>> point > >>>> it seems to go away, so apparently the problem was fixed at some later > >>>> point in the update stream. > >>>> > >>>> Does anyone recognize this problem? Can we work around it by changing > >>>> one > >>>> or more of the update maps? > >>>> > >>>> Thanks, > >>>> Dave > >>>> > >>>> > >>>> On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: > >>>>> > >>>>> > >>>>> yes, this is a problem I encountered both in 32 and 64 bits squeak > >>>>> while > >>>>> updating. > >>>>> > >>>>> I think it's related to showing the progress bar while updating the > >>>>> progress bar. It's a Squeak trunk update problem, not a VM problem. > >>>>> > >>>>> If some class layout change, but some block is still active (yeah, > did > >>>>> you > >>>>> see how many blocks we traverse just to change display of a bar...), > >>>>> then > >>>>> the old block has invalid inst var offsets (offsets to the old object > >>>>> that > >>>>> now has become a new object with new layout). > >>>>> > >>>>> In an interactive image, just close the debugger and relaunch the > >>>>> update. > >>>>> In an headless automated process, well... We should have fixed the > >>>>> update > >>>>> or start from a newer artifact... > >>>>> > >>>>> 2016-08-19 21:32 GMT+02:00 tim Rowledge : > >>>>>> > >>>>>> > >>>>>> I just tried running the vmmaker-build script on my iMac with > weirdly > >>>>>> bad > >>>>>> results. > >>>>>> > >>>>>> The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst > >>>>>> trying > >>>>>> to do the update part of the process I had several *very* odd > failures > >>>>>> where an object in a block was mistaken for nil during a message > send. > >>>>>> For > >>>>>> example in a progress bar update (which I can???t provide a log for > >>>>>> since the > >>>>>> log got overwritten later) a line > >>>>>> (bars at: index) > >>>>>> lead to a nil is not indexable halt. Yet in inspecting the prior > >>>>>> stackframe the bars object was a perfectly normal array of progress > >>>>>> bars. A > >>>>>> similar but not identical problem happened during another attempt. > >>>>>> > >>>>>> Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file failed > >>>>>> when > >>>>>> the vm exploded with no visible log. > >>>>>> > >>>>>> Now I???m attempting to repeat that with a new 5.1rc1 vm & already > up > >>>>>> to > >>>>>> date 5.1rc1 image. Which has sorta-worked, in a rather odd manner. > It > >>>>>> got > >>>>>> to the final save and quit but when I start the supposedly prepared > >>>>>> image > >>>>>> there is a problem with it trying to filein that file. I can???t > tell > >>>>>> right > >>>>>> now if it relates to the manual filein I started or if something got > >>>>>> added > >>>>>> as a deferred action? Or maybe it???s a side-effect of the filein > >>>>>> having a > >>>>>> save & quit? Not come across this before. > >>>>>> > >>>>>> > >>>>>> > >>>>>> So far as I can tell it did complete the filein, so maybe all is > well. > >>>>>> > >>>> > >>> > > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160822/0a85490f/attachment.htm From bert at freudenbergs.de Mon Aug 22 21:14:16 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Mon Aug 22 21:14:19 2016 Subject: [squeak-dev] Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> Message-ID: On Mon, Aug 22, 2016 at 6:00 PM, Chris Muller wrote: > Morphic is designed to run in one Process, so you shouldn't need any > multi-process coordination because you should only be doing drawing in > the UI process. Right? > Right. - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160822/97ae0d0a/attachment.htm From commits at source.squeak.org Mon Aug 22 21:55:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 22 21:55:06 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160822215504.11238.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068697.html Name: Morphic-mt.1294 Ancestors: Morphic-mt.1293 (For an update fix in the help browser.) If models start to tell text fields about selection changes, give models a chance to just say "No change, please." ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068698.html Name: HelpSystem-Core-mt.98 Ancestors: HelpSystem-Core-mt.97 Fixes a bug with line endings and search topics in help browser. Fixes another bug with selection reset when editing a help topic. Provide result selection when navigating from search results to the actual search topic. Continue the search then with [CMD]+[G] (i.e. "find again"). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068699.html Name: Tests-mt.356 Ancestors: Tests-mt.355 Remove empty class category. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068700.html Name: ReleaseBuilder-mt.167 Ancestors: ReleaseBuilder-mt.166 For a cleaner release process, do not release locally by default. (We might want to change this to be a class var to avoid dirty packages in the release image.) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068701.html Name: System-mt.906 Ancestors: System-mt.905 Small fix in system version to determine feature freeze. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068702.html Name: MonticelloConfigurations-mt.145 Ancestors: MonticelloConfigurations-mt.144 Small tweak for the update information in the release. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068703.html Name: ReleaseBuilder-mt.168 Ancestors: ReleaseBuilder-mt.167 Show deprecation warnings by default. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068704.html Name: ReleaseBuilder-mt.169 Ancestors: ReleaseBuilder-mt.168 Open the trunk again. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068705.html Name: Tools-mt.720 Ancestors: Tools-mt.719 Last minute fix for selector browser label. ============================================= From btc at openinworld.com Tue Aug 23 00:36:27 2016 From: btc at openinworld.com (Ben Coman) Date: Tue Aug 23 00:36:51 2016 Subject: [squeak-dev] Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> Message-ID: Unless your model includes a large calculation running in another thread. I would *guess* the right way to approach this is for the calculation-thread to periodically create a custom display-context-object containing only simple objects like Integers and Strings, then never touch that object again after assigning it to an instance variable as an atomic action. Perhaps a good application for an immutable object. cheers -ben On Tue, Aug 23, 2016 at 12:00 AM, Chris Muller wrote: > Morphic is designed to run in one Process, so you shouldn't need any > multi-process coordination because you should only be doing drawing in > the UI process. Right? > > On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel wrote: >> Hi, there. >> >> Take this Morph here: >> >> initialize >> super initialize. >> semaphore := Semaphore forMutualExclusion. >> >> step >> semaphore critical: [ [] repeat ]. >> >> drawOn: aCanvas >> semaphore critical: [super drawOn: aCanvas]. >> >> If you create such a morph and open it in the world, the UI process will >> freeze because of that endless loop in the step method. Okay. The tricky >> thing is, that you cannot use [CMD]+[.] because the drawing code waits for >> the same semaphore that is currently used in the morph's step. You will not >> see a debugger appear. The freshly spawned UI process will block right awai. >> The well known big red cross/box does not appear because there is no place >> to detect this situation. >> >> An easy fix would be to tell the application developer to use >> #critical:ifLocked: in that drawing code. If that semaphore is really >> necessary. >> >> However, can there be a way for Morphic to detect such issues and flag that >> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw toValue: >> true") Could there be a notification for the Morphic framework to look out >> for such as WaitOnCriticalSection to flag that morph as bad? Could that >> primitive 86 send such a notification efficiently? Just once? ^__^ >> >> If yes, Morphic could draw its world like this (pseudo code!): >> ... >> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: true.] >> ... >> >> Morphic would be more robust. >> >> Best, >> Marcel >> >> >> >> >> >> > From lewis at mail.msen.com Tue Aug 23 02:03:51 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Tue Aug 23 02:03:54 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <8BCA4FA4-E7D4-4FAB-98DB-65795A75142E@rowledge.org> <20160821201314.GA20889@shell.msen.com> Message-ID: <20160823020351.GA13829@shell.msen.com> On Mon, Aug 22, 2016 at 02:36:09PM +0200, Bert Freudenberg wrote: > Seen it, discussed with Marcel but we don't have a good idea yet how to > work around it. > > The only thing I can think of is to walk up the sender chain and restart > some context above the one referencing the old instance layout. Maybe an > exception handler in the updater that restarts updating in this specific > case? > > - Bert - > I don't see a good place to put an exception handler, at least not without making things even more complicated than they already are. It looks like the the direct reference to instance var 'bars' is where we encounter the problem. Presumably the old code in a block is refering to an ivar slot in SystemProgressMorph that used to point to the 'vars' array, but that is now pointing to the 'font' ivar. And indeed I see now that Marcel found and fixed this issue in Morphic-mt.1198, so that accessor methods will now be used instead of direct references to the variables. But we still have the problem of a SystemProgressMorph evaluating an older block that was created with an earlier version of the SystemProgressMorph>>position:label:min:max: method, so the update stream processing still fails if the update processing was started before Morphic-mt.1198 was loaded. A partial workaround is to modify #position:label:min:max: to use an accessor for 'bars' prior to starting the update processing. This prevents the error condition that we are discussing here, but unfortunately it also results in a couple of merge dialogs for the modified methods, so the update still requires manual intervention. Dave > > On Sun, Aug 21, 2016 at 10:55 PM, Levente Uzonyi > wrote: > > > > > Same here. I think the code changes during the update and the old code on > > the stack causes the problem. > > > > Levente > > > > > > On Sun, 21 Aug 2016, Chris Muller wrote: > > > > > >> I've definitely experienced the exact same problem, and got around it > >> the same way, restarting the method and proceeding. Very strange. > >> > >> > >> On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis > >> wrote: > >> > >>> > >>> Moving from vm-dev to squeak-dev because it is a trunk update stream > >>> question. > >>> Follow ups to squeak-dev please. > >>> > >>> Does anyone recognize this problem? > >>> > >>> We have an issue in trunk update processing that prevents a full update > >>> without manual intervention. This does not affect the 5.1 release, but > >>> it would be good to fix it so that the update from 5.0 to 5.1 can be > >>> reproduced in a continuous integration test. > >>> > >>> To reproduce: Start with Squeak5.0-15113.image, set the update URL > >>> preference > >>> to http://source.squeak.org/trunk, and do an "update from server". > >>> > >>> The error first appears when beginning to process the update-mt.378.mcm > >>> update map. The problem is related to updating the progress bar with > >>> ProgressInitiationException. > >>> > >>> When the failure occurs, the debugger (see attached image) seems to > >>> show an array access being interpreted as if the array was an instance > >>> of StrikeFont. Per Nicolas' note below, it may be related to showing > >>> the progress bar while updating it. > >>> > >>> I can restart the update process from the debugger from > >>> SystemProgressMorph>>position:label:min:max: in the stack frame, and the > >>> update proceeds. The error happens several more times, then at some point > >>> it seems to go away, so apparently the problem was fixed at some later > >>> point in the update stream. > >>> > >>> Does anyone recognize this problem? Can we work around it by changing one > >>> or more of the update maps? > >>> > >>> Thanks, > >>> Dave > >>> > >>> > >>> On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: > >>> > >>>> > >>>> yes, this is a problem I encountered both in 32 and 64 bits squeak while > >>>> updating. > >>>> > >>>> I think it's related to showing the progress bar while updating the > >>>> progress bar. It's a Squeak trunk update problem, not a VM problem. > >>>> > >>>> If some class layout change, but some block is still active (yeah, did > >>>> you > >>>> see how many blocks we traverse just to change display of a bar...), > >>>> then > >>>> the old block has invalid inst var offsets (offsets to the old object > >>>> that > >>>> now has become a new object with new layout). > >>>> > >>>> In an interactive image, just close the debugger and relaunch the > >>>> update. > >>>> In an headless automated process, well... We should have fixed the > >>>> update > >>>> or start from a newer artifact... > >>>> > >>>> 2016-08-19 21:32 GMT+02:00 tim Rowledge : > >>>> > >>>>> > >>>>> I just tried running the vmmaker-build script on my iMac with weirdly > >>>>> bad > >>>>> results. > >>>>> > >>>>> The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst > >>>>> trying > >>>>> to do the update part of the process I had several *very* odd failures > >>>>> where an object in a block was mistaken for nil during a message send. > >>>>> For > >>>>> example in a progress bar update (which I can???t provide a log for > >>>>> since the > >>>>> log got overwritten later) a line > >>>>> (bars at: index) > >>>>> lead to a nil is not indexable halt. Yet in inspecting the prior > >>>>> stackframe the bars object was a perfectly normal array of progress > >>>>> bars. A > >>>>> similar but not identical problem happened during another attempt. > >>>>> > >>>>> Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file failed > >>>>> when > >>>>> the vm exploded with no visible log. > >>>>> > >>>>> Now I???m attempting to repeat that with a new 5.1rc1 vm & already up > >>>>> to > >>>>> date 5.1rc1 image. Which has sorta-worked, in a rather odd manner. It > >>>>> got > >>>>> to the final save and quit but when I start the supposedly prepared > >>>>> image > >>>>> there is a problem with it trying to filein that file. I can???t tell > >>>>> right > >>>>> now if it relates to the manual filein I started or if something got > >>>>> added > >>>>> as a deferred action? Or maybe it???s a side-effect of the filein > >>>>> having a > >>>>> save & quit? Not come across this before. > >>>>> > >>>>> > >>>>> > >>>>> So far as I can tell it did complete the filein, so maybe all is well. > >>>>> > >>>>> > >>> > >> > From nicolas.cellier.aka.nice at gmail.com Tue Aug 23 06:47:28 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Tue Aug 23 06:47:36 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: <20160823020351.GA13829@shell.msen.com> References: <8BCA4FA4-E7D4-4FAB-98DB-65795A75142E@rowledge.org> <20160821201314.GA20889@shell.msen.com> <20160823020351.GA13829@shell.msen.com> Message-ID: There's yet another possibility, in a preamble: - clone the old SystemProgressMorph class, - mutate all instances to the clone class Don't use class rename and class removal, because the system will do too much clean up. instead hack at a lower level 2016-08-23 4:03 GMT+02:00 David T. Lewis : > On Mon, Aug 22, 2016 at 02:36:09PM +0200, Bert Freudenberg wrote: > > Seen it, discussed with Marcel but we don't have a good idea yet how to > > work around it. > > > > The only thing I can think of is to walk up the sender chain and restart > > some context above the one referencing the old instance layout. Maybe an > > exception handler in the updater that restarts updating in this specific > > case? > > > > - Bert - > > > > I don't see a good place to put an exception handler, at least not without > making things even more complicated than they already are. > > It looks like the the direct reference to instance var 'bars' is where we > encounter the problem. Presumably the old code in a block is refering to > an ivar slot in SystemProgressMorph that used to point to the 'vars' array, > but that is now pointing to the 'font' ivar. > > And indeed I see now that Marcel found and fixed this issue in > Morphic-mt.1198, > so that accessor methods will now be used instead of direct references to > the variables. > > But we still have the problem of a SystemProgressMorph evaluating an older > block that was created with an earlier version of the > SystemProgressMorph>>position:label:min:max: method, so the update stream > processing still fails if the update processing was started before > Morphic-mt.1198 was loaded. > > A partial workaround is to modify #position:label:min:max: to use an > accessor > for 'bars' prior to starting the update processing. This prevents the error > condition that we are discussing here, but unfortunately it also results > in a couple of merge dialogs for the modified methods, so the update still > requires manual intervention. > > Dave > > > > > > On Sun, Aug 21, 2016 at 10:55 PM, Levente Uzonyi > > wrote: > > > > > > > > Same here. I think the code changes during the update and the old code > on > > > the stack causes the problem. > > > > > > Levente > > > > > > > > > On Sun, 21 Aug 2016, Chris Muller wrote: > > > > > > > > >> I've definitely experienced the exact same problem, and got around it > > >> the same way, restarting the method and proceeding. Very strange. > > >> > > >> > > >> On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis > > >> wrote: > > >> > > >>> > > >>> Moving from vm-dev to squeak-dev because it is a trunk update stream > > >>> question. > > >>> Follow ups to squeak-dev please. > > >>> > > >>> Does anyone recognize this problem? > > >>> > > >>> We have an issue in trunk update processing that prevents a full > update > > >>> without manual intervention. This does not affect the 5.1 release, > but > > >>> it would be good to fix it so that the update from 5.0 to 5.1 can be > > >>> reproduced in a continuous integration test. > > >>> > > >>> To reproduce: Start with Squeak5.0-15113.image, set the update URL > > >>> preference > > >>> to http://source.squeak.org/trunk, and do an "update from server". > > >>> > > >>> The error first appears when beginning to process the > update-mt.378.mcm > > >>> update map. The problem is related to updating the progress bar with > > >>> ProgressInitiationException. > > >>> > > >>> When the failure occurs, the debugger (see attached image) seems to > > >>> show an array access being interpreted as if the array was an > instance > > >>> of StrikeFont. Per Nicolas' note below, it may be related to showing > > >>> the progress bar while updating it. > > >>> > > >>> I can restart the update process from the debugger from > > >>> SystemProgressMorph>>position:label:min:max: in the stack frame, > and the > > >>> update proceeds. The error happens several more times, then at some > point > > >>> it seems to go away, so apparently the problem was fixed at some > later > > >>> point in the update stream. > > >>> > > >>> Does anyone recognize this problem? Can we work around it by > changing one > > >>> or more of the update maps? > > >>> > > >>> Thanks, > > >>> Dave > > >>> > > >>> > > >>> On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: > > >>> > > >>>> > > >>>> yes, this is a problem I encountered both in 32 and 64 bits squeak > while > > >>>> updating. > > >>>> > > >>>> I think it's related to showing the progress bar while updating the > > >>>> progress bar. It's a Squeak trunk update problem, not a VM problem. > > >>>> > > >>>> If some class layout change, but some block is still active (yeah, > did > > >>>> you > > >>>> see how many blocks we traverse just to change display of a bar...), > > >>>> then > > >>>> the old block has invalid inst var offsets (offsets to the old > object > > >>>> that > > >>>> now has become a new object with new layout). > > >>>> > > >>>> In an interactive image, just close the debugger and relaunch the > > >>>> update. > > >>>> In an headless automated process, well... We should have fixed the > > >>>> update > > >>>> or start from a newer artifact... > > >>>> > > >>>> 2016-08-19 21:32 GMT+02:00 tim Rowledge : > > >>>> > > >>>>> > > >>>>> I just tried running the vmmaker-build script on my iMac with > weirdly > > >>>>> bad > > >>>>> results. > > >>>>> > > >>>>> The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst > > >>>>> trying > > >>>>> to do the update part of the process I had several *very* odd > failures > > >>>>> where an object in a block was mistaken for nil during a message > send. > > >>>>> For > > >>>>> example in a progress bar update (which I can???t provide a log for > > >>>>> since the > > >>>>> log got overwritten later) a line > > >>>>> (bars at: index) > > >>>>> lead to a nil is not indexable halt. Yet in inspecting the prior > > >>>>> stackframe the bars object was a perfectly normal array of progress > > >>>>> bars. A > > >>>>> similar but not identical problem happened during another attempt. > > >>>>> > > >>>>> Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file failed > > >>>>> when > > >>>>> the vm exploded with no visible log. > > >>>>> > > >>>>> Now I???m attempting to repeat that with a new 5.1rc1 vm & already > up > > >>>>> to > > >>>>> date 5.1rc1 image. Which has sorta-worked, in a rather odd manner. > It > > >>>>> got > > >>>>> to the final save and quit but when I start the supposedly prepared > > >>>>> image > > >>>>> there is a problem with it trying to filein that file. I can???t > tell > > >>>>> right > > >>>>> now if it relates to the manual filein I started or if something > got > > >>>>> added > > >>>>> as a deferred action? Or maybe it???s a side-effect of the filein > > >>>>> having a > > >>>>> save & quit? Not come across this before. > > >>>>> > > >>>>> > > >>>>> > > >>>>> So far as I can tell it did complete the filein, so maybe all is > well. > > >>>>> > > >>>>> > > >>> > > >> > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160823/4db889e9/attachment.htm From commits at source.squeak.org Tue Aug 23 09:12:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 23 09:12:51 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1295.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1295.mcz ==================== Summary ==================== Name: Morphic-mt.1295 Author: mt Time: 23 August 2016, 11:12:14.145924 am UUID: a59d0463-424b-af47-ad8a-f6d403c7dd5d Ancestors: Morphic-mt.1294 Fix accidential scrolling when invoking the menu of a scroll pane (e.g. lists, text fields) via yellow-clicking the scroll bar (paging area). =============== Diff against Morphic-mt.1294 =============== Item was changed: ----- Method: ScrollBar>>scrollPageInit: (in category 'scrolling') ----- scrollPageInit: evt + + evt redButtonPressed ifFalse: [^ self]. + self resetTimer. self setNextDirectionFromEvent: evt. self scrollBarAction: #doScrollByPage. self startStepping.! From Marcel.Taeumel at hpi.de Tue Aug 23 09:14:01 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 23 09:15:25 2016 Subject: [squeak-dev] Re: Scrollbar bug In-Reply-To: References: Message-ID: <1471943641414-4912304.post@n4.nabble.com> Chris Muller-3 wrote >> When you right-click (the one which doesn't open the halo) > > a.k.a., "yellow" click. > >> on a scrollbar >> anywere but on the thumb, then it'll open the menu and will scroll to the >> end. > > Confirmed. > >> Either the menu or the scrolling should not be there. > > That out of control scrolling, definitely not.. Thanks: http://forum.world.st/The-Trunk-Morphic-mt-1295-mcz-tp4912303.html Best, Marcel -- View this message in context: http://forum.world.st/Scrollbar-bug-tp4912105p4912304.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Aug 23 09:21:46 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 23 09:23:09 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <20160823020351.GA13829@shell.msen.com> Message-ID: <1471944106453-4912305.post@n4.nabble.com> Nicolas Cellier wrote > There's yet another possibility, in a preamble: > - clone the old SystemProgressMorph class, > - mutate all instances to the clone class > > Don't use class rename and class removal, because the system will do too > much clean up. > instead hack at a lower level > > 2016-08-23 4:03 GMT+02:00 David T. Lewis < > lewis@.msen > >: > >> On Mon, Aug 22, 2016 at 02:36:09PM +0200, Bert Freudenberg wrote: >> > Seen it, discussed with Marcel but we don't have a good idea yet how to >> > work around it. >> > >> > The only thing I can think of is to walk up the sender chain and >> restart >> > some context above the one referencing the old instance layout. Maybe >> an >> > exception handler in the updater that restarts updating in this >> specific >> > case? >> > >> > - Bert - >> > >> >> I don't see a good place to put an exception handler, at least not >> without >> making things even more complicated than they already are. >> >> It looks like the the direct reference to instance var 'bars' is where we >> encounter the problem. Presumably the old code in a block is refering to >> an ivar slot in SystemProgressMorph that used to point to the 'vars' >> array, >> but that is now pointing to the 'font' ivar. >> >> And indeed I see now that Marcel found and fixed this issue in >> Morphic-mt.1198, >> so that accessor methods will now be used instead of direct references to >> the variables. >> >> But we still have the problem of a SystemProgressMorph evaluating an >> older >> block that was created with an earlier version of the >> SystemProgressMorph>>position:label:min:max: method, so the update stream >> processing still fails if the update processing was started before >> Morphic-mt.1198 was loaded. >> >> A partial workaround is to modify #position:label:min:max: to use an >> accessor >> for 'bars' prior to starting the update processing. This prevents the >> error >> condition that we are discussing here, but unfortunately it also results >> in a couple of merge dialogs for the modified methods, so the update >> still >> requires manual intervention. >> >> Dave >> >> >> > >> > On Sun, Aug 21, 2016 at 10:55 PM, Levente Uzonyi < > leves@.elte > > >> > wrote: >> > >> > > >> > > Same here. I think the code changes during the update and the old >> code >> on >> > > the stack causes the problem. >> > > >> > > Levente >> > > >> > > >> > > On Sun, 21 Aug 2016, Chris Muller wrote: >> > > >> > > >> > >> I've definitely experienced the exact same problem, and got around >> it >> > >> the same way, restarting the method and proceeding. Very strange. >> > >> >> > >> >> > >> On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis < > lewis@.msen > > >> > >> wrote: >> > >> >> > >>> >> > >>> Moving from vm-dev to squeak-dev because it is a trunk update >> stream >> > >>> question. >> > >>> Follow ups to squeak-dev please. >> > >>> >> > >>> Does anyone recognize this problem? >> > >>> >> > >>> We have an issue in trunk update processing that prevents a full >> update >> > >>> without manual intervention. This does not affect the 5.1 release, >> but >> > >>> it would be good to fix it so that the update from 5.0 to 5.1 can >> be >> > >>> reproduced in a continuous integration test. >> > >>> >> > >>> To reproduce: Start with Squeak5.0-15113.image, set the update URL >> > >>> preference >> > >>> to http://source.squeak.org/trunk, and do an "update from server". >> > >>> >> > >>> The error first appears when beginning to process the >> update-mt.378.mcm >> > >>> update map. The problem is related to updating the progress bar >> with >> > >>> ProgressInitiationException. >> > >>> >> > >>> When the failure occurs, the debugger (see attached image) seems to >> > >>> show an array access being interpreted as if the array was an >> instance >> > >>> of StrikeFont. Per Nicolas' note below, it may be related to >> showing >> > >>> the progress bar while updating it. >> > >>> >> > >>> I can restart the update process from the debugger from >> > >>> SystemProgressMorph>>position:label:min:max: in the stack frame, >> and the >> > >>> update proceeds. The error happens several more times, then at some >> point >> > >>> it seems to go away, so apparently the problem was fixed at some >> later >> > >>> point in the update stream. >> > >>> >> > >>> Does anyone recognize this problem? Can we work around it by >> changing one >> > >>> or more of the update maps? >> > >>> >> > >>> Thanks, >> > >>> Dave >> > >>> >> > >>> >> > >>> On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: >> > >>> >> > >>>> >> > >>>> yes, this is a problem I encountered both in 32 and 64 bits squeak >> while >> > >>>> updating. >> > >>>> >> > >>>> I think it's related to showing the progress bar while updating >> the >> > >>>> progress bar. It's a Squeak trunk update problem, not a VM >> problem. >> > >>>> >> > >>>> If some class layout change, but some block is still active (yeah, >> did >> > >>>> you >> > >>>> see how many blocks we traverse just to change display of a >> bar...), >> > >>>> then >> > >>>> the old block has invalid inst var offsets (offsets to the old >> object >> > >>>> that >> > >>>> now has become a new object with new layout). >> > >>>> >> > >>>> In an interactive image, just close the debugger and relaunch the >> > >>>> update. >> > >>>> In an headless automated process, well... We should have fixed the >> > >>>> update >> > >>>> or start from a newer artifact... >> > >>>> >> > >>>> 2016-08-19 21:32 GMT+02:00 tim Rowledge < > tim@ > >: >> > >>>> >> > >>>>> >> > >>>>> I just tried running the vmmaker-build script on my iMac with >> weirdly >> > >>>>> bad >> > >>>>> results. >> > >>>>> >> > >>>>> The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst >> > >>>>> trying >> > >>>>> to do the update part of the process I had several *very* odd >> failures >> > >>>>> where an object in a block was mistaken for nil during a message >> send. >> > >>>>> For >> > >>>>> example in a progress bar update (which I can???t provide a log >> for >> > >>>>> since the >> > >>>>> log got overwritten later) a line >> > >>>>> (bars at: index) >> > >>>>> lead to a nil is not indexable halt. Yet in inspecting the prior >> > >>>>> stackframe the bars object was a perfectly normal array of >> progress >> > >>>>> bars. A >> > >>>>> similar but not identical problem happened during another >> attempt. >> > >>>>> >> > >>>>> Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file >> failed >> > >>>>> when >> > >>>>> the vm exploded with no visible log. >> > >>>>> >> > >>>>> Now I???m attempting to repeat that with a new 5.1rc1 vm & >> already >> up >> > >>>>> to >> > >>>>> date 5.1rc1 image. Which has sorta-worked, in a rather odd >> manner. >> It >> > >>>>> got >> > >>>>> to the final save and quit but when I start the supposedly >> prepared >> > >>>>> image >> > >>>>> there is a problem with it trying to filein that file. I can???t >> tell >> > >>>>> right >> > >>>>> now if it relates to the manual filein I started or if something >> got >> > >>>>> added >> > >>>>> as a deferred action? Or maybe it???s a side-effect of the filein >> > >>>>> having a >> > >>>>> save & quit? Not come across this before. >> > >>>>> >> > >>>>> >> > >>>>> >> > >>>>> So far as I can tell it did complete the filein, so maybe all is >> well. >> > >>>>> >> > >>>>> >> > >>> >> > >> >> >> > >> >> >> Hi, there. It is, unfortunately, not possible to turn back time and rewrite history. ;-) There is several important code that makes excessive use of instVar accesses such as in SystemProgressMorph or HandMorph. Making any change in their class layout while using some of their methods will provoke a strange error. This could only be changed by a VM that keeps old class layouts/schemata around for some longer time until there is no old compiled method on any stack anymore. Usually, restarting the update process helps here. There is no way to fix that in order to interactively update from 5.0 to 5.1 without any errors. However, we have an update script that updates build 15113, which is effectively Squeak 5.0 to the latest trunk. Here is the script: https://github.com/squeak-smalltalk/squeak-app/blob/master/prepare_image.st And here is the image build 15113: http://files.squeak.org/base/Squeak-trunk/base.zip We use that the create bundles with the latest alpha, beta, rc versions. Best, Marcel -- View this message in context: http://forum.world.st/Re-Does-anyone-recognize-this-glitch-in-our-trunk-update-processing-was-Vm-dev-buildspurtrunkvmmaker-tp4912130p4912305.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Aug 23 09:26:32 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 23 09:27:56 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> Message-ID: <1471944392511-4912307.post@n4.nabble.com> Chris Muller-3 wrote > Morphic is designed to run in one Process, so you shouldn't need any > multi-process coordination because you should only be doing drawing in > the UI process. Right? > > On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < > marcel.taeumel@ > > wrote: >> Hi, there. >> >> Take this Morph here: >> >> initialize >> super initialize. >> semaphore := Semaphore forMutualExclusion. >> >> step >> semaphore critical: [ [] repeat ]. >> >> drawOn: aCanvas >> semaphore critical: [super drawOn: aCanvas]. >> >> If you create such a morph and open it in the world, the UI process will >> freeze because of that endless loop in the step method. Okay. The tricky >> thing is, that you cannot use [CMD]+[.] because the drawing code waits >> for >> the same semaphore that is currently used in the morph's step. You will >> not >> see a debugger appear. The freshly spawned UI process will block right >> awai. >> The well known big red cross/box does not appear because there is no >> place >> to detect this situation. >> >> An easy fix would be to tell the application developer to use >> #critical:ifLocked: in that drawing code. If that semaphore is really >> necessary. >> >> However, can there be a way for Morphic to detect such issues and flag >> that >> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >> toValue: >> true") Could there be a notification for the Morphic framework to look >> out >> for such as WaitOnCriticalSection to flag that morph as bad? Could that >> primitive 86 send such a notification efficiently? Just once? ^__^ >> >> If yes, Morphic could draw its world like this (pseudo code!): >> ... >> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >> true.] >> ... >> >> Morphic would be more robust. >> >> Best, >> Marcel >> >> >> >> >> >> Hi Chris, hi Bert, if you need an example, well, Etoys/Kedama makes those things in the latest Trunk version. ;-) It is not the point whether applications should do this or not but our recently changed semantics of semaphores might render your image unusable because of unusual application code. I see an opportunity to improve Morphics robustness and help users debug their applications without image freeze/lock out. So, I want to discuss here, whether there could be a Notification sent whenever an object/process starts waiting on a semaphore. :-) Best, Marcel -- View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912307.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Tue Aug 23 09:36:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 23 09:36:35 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1296.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1296.mcz ==================== Summary ==================== Name: Morphic-mt.1296 Author: mt Time: 23 August 2016, 11:35:56.13446 am UUID: 79fdc139-7292-bf44-80ca-4a9651d8dfaa Ancestors: Morphic-mt.1295 One less use of SortedCollection. =============== Diff against Morphic-mt.1295 =============== Item was changed: ----- Method: TheWorldMainDockingBar>>listWindowsOn: (in category 'submenu - windows') ----- listWindowsOn: menu | windows | + windows := self allVisibleWindows sorted: [:winA :winB | - windows := SortedCollection sortBlock: [:winA :winB | ((winA model isNil or: [winB model isNil]) or: [winA model name = winB model name]) ifTrue: [winA label < winB label] ifFalse: [winA model name < winB model name]]. - windows addAll: self allVisibleWindows. windows ifEmpty: [ menu addItem: [ :item | item contents: 'No Windows' translated; isEnabled: false ] ]. windows do: [ :each | menu addItem: [ :item | item contents: (self windowMenuItemLabelFor: each); icon: (each model ifNotNil: [self colorIcon: each model windowColorToUse]); target: each; selector: #comeToFront; subMenuUpdater: self selector: #windowMenuFor:on: arguments: { each }; action: [ each beKeyWindow; expand ] ] ]. menu addLine; add: 'Close all windows' target: self selector: #closeAllWindowsUnsafe; addItem: [:item | item contents: 'Close all windows without changes'; target: self; icon: MenuIcons smallBroomIcon; selector: #closeAllWindows]; add: 'Close all windows but workspaces' target: self selector: #closeAllWindowsButWorkspaces.! From herbertkoenig at gmx.net Tue Aug 23 11:54:57 2016 From: herbertkoenig at gmx.net (Herbert =?UTF-8?B?S8O2bmln?=) Date: Tue Aug 23 11:55:05 2016 Subject: [squeak-dev] Squeak under Raspbian from a USB Dongle In-Reply-To: References: <20160814181135.53dc33aa@herpi5> Message-ID: <20160823135457.625caa8e@herpi5> Am Mon, 15 Aug 2016 10:14:17 +0200 schrieb "H. Hirzel" : > http://askubuntu.com/questions/49392/how-to-mark-allow-executing-file-as-program-on-an-external-drive > Hi Hannes, from there I tried this: sudo mount -o remount,fmask=027 /media/YOURDRIVE and this: sudo mount -o remount,fmask=027,id=$(id -u) /media/YOURDRIVE These don't even make the scripts executable. Meanwhile I tried with 5.0 and 5.1rc2. They both work if dowloaded to the SD card. Cheers, Herbert > On 8/14/16, Herbert K?nig wrote: > > Am Fri, 12 Aug 2016 23:53:58 +0200 > > schrieb Tim Felgentreff : > > > >> Hi > >> > >> You need to mount with the exec option (or the right umask). Then > >> all files are executable. > >> > >> Best, > >> Tim > >> > > > > Hi Tim, > > > > thanks for the hint but it seems my linux fu is lacking. > > USB dongles are auto mounted under Raspbian so I first did: > > sudo umount /media/pi/INTENSO > > then, after some searching: > > sudo mount -o exec /dev/disk/by-label/INTENSO /media/intenso > > That makes all scripts (i found :-)) and the VM executable but > > neither start in a terminal not start without a terminal works. > > For a very short time a window comes up and then closes so I don't > > see an error. > > It works on my Windows 7 laptop and for the experiment I use a > > Squeak 5.0 all in one. > > > > Cheers, > > > > Herbert > > > > > > > >> Am 12.08.2016 22:51 schrieb "Herbert K?nig" > >> : > >> > >> > Hi, > >> > > >> > I assume it's not possible to run Squeak all in one from a USB > >> > dongle under linux because one FAT does not have an executable > >> > flag. > >> > > >> > Or is there a way? Would be too cool to move a USB dongle from my > >> > Windows Laptop to the RasPi. > >> > > >> > Cheers, > >> > > >> > > >> > Herbert > >> > > >> > > >> > > > > > > > > From btc at openinworld.com Tue Aug 23 12:31:24 2016 From: btc at openinworld.com (Ben Coman) Date: Tue Aug 23 12:31:47 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: <1471944392511-4912307.post@n4.nabble.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: On Tue, Aug 23, 2016 at 5:26 PM, marcel.taeumel wrote: > Chris Muller-3 wrote >> Morphic is designed to run in one Process, so you shouldn't need any >> multi-process coordination because you should only be doing drawing in >> the UI process. Right? >> >> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < > >> marcel.taeumel@ > >> > wrote: >>> Hi, there. >>> >>> Take this Morph here: >>> >>> initialize >>> super initialize. >>> semaphore := Semaphore forMutualExclusion. >>> >>> step >>> semaphore critical: [ [] repeat ]. >>> >>> drawOn: aCanvas >>> semaphore critical: [super drawOn: aCanvas]. >>> >>> If you create such a morph and open it in the world, the UI process will >>> freeze because of that endless loop in the step method. Okay. The tricky >>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>> for >>> the same semaphore that is currently used in the morph's step. You will >>> not >>> see a debugger appear. The freshly spawned UI process will block right >>> awai. >>> The well known big red cross/box does not appear because there is no >>> place >>> to detect this situation. >>> >>> An easy fix would be to tell the application developer to use >>> #critical:ifLocked: in that drawing code. If that semaphore is really >>> necessary. >>> >>> However, can there be a way for Morphic to detect such issues and flag >>> that >>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>> toValue: >>> true") Could there be a notification for the Morphic framework to look >>> out >>> for such as WaitOnCriticalSection to flag that morph as bad? Could that >>> primitive 86 send such a notification efficiently? Just once? ^__^ >>> >>> If yes, Morphic could draw its world like this (pseudo code!): >>> ... >>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>> true.] >>> ... >>> >>> Morphic would be more robust. >>> >>> Best, >>> Marcel >>> >>> >>> >>> >>> >>> > > Hi Chris, hi Bert, > > if you need an example, well, Etoys/Kedama makes those things in the latest > Trunk version. ;-) > > It is not the point whether applications should do this or not but our > recently changed semantics of semaphores might render your image unusable > because of unusual application code. I'm curious what was the change in Semaphore semantics? cheers -ben > I see an opportunity to improve > Morphics robustness and help users debug their applications without image > freeze/lock out. > > So, I want to discuss here, whether there could be a Notification sent > whenever an object/process starts waiting on a semaphore. :-) From lists at fniephaus.com Tue Aug 23 13:25:21 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Tue Aug 23 13:25:36 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 Code Freeze -- Trunk still closed; first release candidate(s) available In-Reply-To: References: <1471503751072-4911665.post@n4.nabble.com> <776147FC-49FE-492C-825B-5D10D8446E2B@rowledge.org> Message-ID: On Sat, Aug 20, 2016 at 7:38 PM tim Rowledge wrote: > > > On 20-08-2016, at 3:46 AM, Fabio Niephaus wrote: > > > > > May I suggest we simply skip the ensure_conf_file step, if the launch > script detects to run on a Pi for this release? Shall we print instructions > for the common-session setup if necessary instead? We can adjust this > behavior in the future, of course. But I'm not sure we can work out a > proper solution in the next couple of days. > > I would suggest that you make the ensure_conf_file script start with a > test for > > a) being on a Pi with a kernel level 4 or greater > b) being on any machine with kernel greater than X, where X is not > currently a number I know. I simply don?t know enough linux terminology to > do effective googling for this. The Pi does not have a special kernel so I > think any version 4+ would be safe. Is anyone running on an x86 linux out > there? > > If NOT (a AND b) then do magic with /etc/securityblah-blah. > > Somebody that follows and understand linux release history would probably > be able to tell us exactly which version introduced the fix that makes > /etc/security/blah unnecessary. > I just had a quick chat with Eliot and we decided to skip the ensure_conf_file step on systems with Linux kernels earlier than 4.x.x for now. We can change the behavior in the next release, but I'd currently say, it works well on the different systems as is. Best, Fabio > A test for /etc/pam.d/common-session containing > ' session required pam_limits.so' > would be a decent idea if we could also work out if the user were using > xrdp or any other affected system. I?d suggest just documenting it for now. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: BFM: Branch on Full Moon > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160823/e12b1b36/attachment.htm From Marcel.Taeumel at hpi.de Tue Aug 23 13:34:00 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 23 13:35:25 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: <1471959240953-4912325.post@n4.nabble.com> Ben Coman wrote > On Tue, Aug 23, 2016 at 5:26 PM, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >> Chris Muller-3 wrote >>> Morphic is designed to run in one Process, so you shouldn't need any >>> multi-process coordination because you should only be doing drawing in >>> the UI process. Right? >>> >>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >> >>> marcel.taeumel@ >> >>> > wrote: >>>> Hi, there. >>>> >>>> Take this Morph here: >>>> >>>> initialize >>>> super initialize. >>>> semaphore := Semaphore forMutualExclusion. >>>> >>>> step >>>> semaphore critical: [ [] repeat ]. >>>> >>>> drawOn: aCanvas >>>> semaphore critical: [super drawOn: aCanvas]. >>>> >>>> If you create such a morph and open it in the world, the UI process >>>> will >>>> freeze because of that endless loop in the step method. Okay. The >>>> tricky >>>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>>> for >>>> the same semaphore that is currently used in the morph's step. You will >>>> not >>>> see a debugger appear. The freshly spawned UI process will block right >>>> awai. >>>> The well known big red cross/box does not appear because there is no >>>> place >>>> to detect this situation. >>>> >>>> An easy fix would be to tell the application developer to use >>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>> necessary. >>>> >>>> However, can there be a way for Morphic to detect such issues and flag >>>> that >>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>> toValue: >>>> true") Could there be a notification for the Morphic framework to look >>>> out >>>> for such as WaitOnCriticalSection to flag that morph as bad? Could that >>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>> >>>> If yes, Morphic could draw its world like this (pseudo code!): >>>> ... >>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>> true.] >>>> ... >>>> >>>> Morphic would be more robust. >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> >>>> >>>> >> >> Hi Chris, hi Bert, >> >> if you need an example, well, Etoys/Kedama makes those things in the >> latest >> Trunk version. ;-) >> >> It is not the point whether applications should do this or not but our >> recently changed semantics of semaphores might render your image unusable >> because of unusual application code. > > I'm curious what was the change in Semaphore semantics? > > cheers -ben > >> I see an opportunity to improve >> Morphics robustness and help users debug their applications without image >> freeze/lock out. >> >> So, I want to discuss here, whether there could be a Notification sent >> whenever an object/process starts waiting on a semaphore. :-) Seems to be more strict/reliable now. Does real blocking. Something in that direction. :-) Best, Marcel -- View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912325.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Tue Aug 23 13:55:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 23 13:55:56 2016 Subject: [squeak-dev] The Trunk: ST80-mt.217.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.217.mcz ==================== Summary ==================== Name: ST80-mt.217 Author: mt Time: 23 August 2016, 3:55:41.367497 pm UUID: e305089b-97de-ac41-b3ee-002757bcf7b5 Ancestors: ST80-nice.216 Fix serious bug in MVC that occured when having deprecation warnings enabled. =============== Diff against ST80-nice.216 =============== Item was changed: ----- Method: View>>setDefaultBackgroundColor (in category 'initialize-release') ----- setDefaultBackgroundColor "Obtain the background color from the receiver's model. The preferences make sure whether this is a colorful or uniform look." + self backgroundColor: model windowColorToUse! - self backgroundColor: model defaultBackgroundColor! From marcel.taeumel at hpi.de Tue Aug 23 14:30:24 2016 From: marcel.taeumel at hpi.de (Marcel Taeumel) Date: Tue Aug 23 14:31:38 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 released; www.squeak.org; Trunk open again Message-ID: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> We are happy to announce the release of Squeak 5.1! Visit the Website [1], read the release notes in the image or outside [2], and try it out for yourself [3][4]! Thank you all for the contributions! :-) Happy birthday Squeak! It has been?(almost)?20 years!!! [5] Best, Marcel [1] http://www.squeak.org/ [2] https://github.com/squeak-smalltalk/squeak-app/blob/master/release-notes/5.1 [3] http://files.squeak.org/5.1/ [4] http://try.squeak.org/ (to be updated soonish) [5] http://files.squeak.org/docs/OOPSLA.Squeak.html -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160823/409d5f4b/attachment.htm From btc at openinworld.com Tue Aug 23 14:35:03 2016 From: btc at openinworld.com (Ben Coman) Date: Tue Aug 23 14:35:28 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: <1471959240953-4912325.post@n4.nabble.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <1471959240953-4912325.post@n4.nabble.com> Message-ID: On Tue, Aug 23, 2016 at 9:34 PM, marcel.taeumel wrote: > Ben Coman wrote >> On Tue, Aug 23, 2016 at 5:26 PM, marcel.taeumel < >>> It is not the point whether applications should do this or not but our >>> recently changed semantics of semaphores might render your image unusable >>> because of unusual application code. >> >> I'm curious what was the change in Semaphore semantics? >> >> cheers -ben >> > > Seems to be more strict/reliable now. Does real blocking. Something in that > direction. :-) I search my gmail for... semaphore "The Trunk Kernel" and could not identify any changes to Semaphore handling. I did see two Process related commits that seem aimed at improving the run queue interaction with semaphores, but I'm not sure that is what you meant. http://forum.world.st/The-Trunk-Kernel-eem-999-mcz-td4878765.html Name: Kernel-eem.999 Author: eem Time: 18 February 2016, 11:03:09.008076 pm UUID: 30222068-755f-4637-bbbb-6f775291e746 Ancestors: Kernel-bf.998 Fix isSuspended (my last commit was a regression; I had confused isSuspended with isBlocked). Comment all the isFoo testing methods in process. Add isBlocked. Modify Process>>terminate to set the pc of the context of a process that is not auto-terminated to its endPC so that isTerminated and isSuspended can distinguish between processes either terminated or suspended. http://forum.world.st/The-Trunk-Kernel-eem-1000-mcz-td4878768.html Name: Kernel-eem.1000 Author: eem Time: 18 February 2016, 11:18:00.405861 pm UUID: 70e6b96c-ca2f-4f79-8253-239575f13beb Ancestors: Kernel-eem.999 Make Process>>resume primitive. Andreas fixed the ancestor of the Cog VM so that the resume primitive fails if thesuspendedContext is not a context. This renders Tim's suspendedCOntext ifNil: [^self primitiveFailed] guard obsolete. Hence nuke primitiveResume. Also searching on... semaphore "vm-dev vm maker" could not identify any Semaphore changes. If indeed there were any Semaphore code changes, I'd be interested in reviewing them if anyone could easily put their finger on it. cheers -ben From herbertkoenig at gmx.net Tue Aug 23 16:47:10 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Tue Aug 23 16:47:12 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 released; In-Reply-To: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> References: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> Message-ID: <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> Hi, Unzipping the Windows Version from the squeak.org, skip configuration and try to bring up the halos on the Welcome thingie brings a multitude (more than I could close) of Warnings in the Windows version. Same with AllInOne and ARM versions on my Pi 3 Morph from the Objects catalog bring one Warning: MenuMorph class>>#menuSelectionColor has been deprecated. mt: Use UI themes. which can be resumed. On the World I can bring up the halos. So maybe the first case is sth. recursive through the submorphs. Cheers, Herbert Am 23.08.2016 um 16:30 schrieb Marcel Taeumel: > *We are happy to announce the release of Squeak 5.1!* > > Visit the Website [1], read the release notes in the image or outside > [2], and try it out for yourself [3][4]! > > Thank you all for the contributions! :-) > > Happy birthday Squeak! It has been (almost) 20 years!!! [5] > > Best, > Marcel > > [1] http://www.squeak.org/ > [2] > https://github.com/squeak-smalltalk/squeak-app/blob/master/release-notes/5.1 > [3] http://files.squeak.org/5.1/ > [4] http://try.squeak.org/ (to be updated soonish) > [5] http://files.squeak.org/docs/OOPSLA.Squeak.html > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160823/fb9f5a21/attachment.htm From tim at rowledge.org Tue Aug 23 17:07:17 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Aug 23 17:07:22 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 released; In-Reply-To: <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> References: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> Message-ID: > On 23-08-2016, at 9:47 AM, Herbert K?nig wrote: > > Hi, > > Unzipping the Windows Version from the squeak.org, skip configuration and try to bring up the halos on the Welcome thingie brings a multitude (more than I could close) of Warnings in the Windows version. > > Same with AllInOne and ARM versions on my Pi 3 If you can open the Preferences and find the deprecated warning preference, setting if ?off' solves the immediate problem. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: BA: Branch Approximate From lists at fniephaus.com Tue Aug 23 17:35:03 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Tue Aug 23 17:35:16 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 released; In-Reply-To: References: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> Message-ID: On Tue, Aug 23, 2016 at 7:07 PM tim Rowledge wrote: > > > On 23-08-2016, at 9:47 AM, Herbert K?nig wrote: > > > > Hi, > > > > Unzipping the Windows Version from the squeak.org, skip configuration > and try to bring up the halos on the Welcome thingie brings a multitude > (more than I could close) of Warnings in the Windows version. > > > > Same with AllInOne and ARM versions on my Pi 3 > We just updated the bundles once more because of the deprecated warning and some code signing issues. The website is updated accordingly. Best, Fabio > > If you can open the Preferences and find the deprecated warning > preference, setting if ?off' solves the immediate problem. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: BA: Branch Approximate > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160823/8cf36bd1/attachment.htm From herbertkoenig at gmx.net Tue Aug 23 17:42:15 2016 From: herbertkoenig at gmx.net (Herbert =?UTF-8?B?S8O2bmln?=) Date: Tue Aug 23 17:42:20 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 released; In-Reply-To: References: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> Message-ID: <20160823194215.18c41a10@herpi5> Thanks Tim, show deprecation warnings wasn't enabled but enabling and again disabling it works. Cheers, Herbert Am Tue, 23 Aug 2016 10:07:17 -0700 schrieb tim Rowledge : > > > On 23-08-2016, at 9:47 AM, Herbert K?nig > > wrote: > > > > Hi, > > > > Unzipping the Windows Version from the squeak.org, skip > > configuration and try to bring up the halos on the Welcome thingie > > brings a multitude (more than I could close) of Warnings in the > > Windows version. > > > > Same with AllInOne and ARM versions on my Pi 3 > > If you can open the Preferences and find the deprecated warning > preference, setting if ?off' solves the immediate problem. > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > Strange OpCodes: BA: Branch Approximate > > > From asqueaker at gmail.com Tue Aug 23 17:48:54 2016 From: asqueaker at gmail.com (Chris Muller) Date: Tue Aug 23 17:49:39 2016 Subject: [squeak-dev] Re: [Vm-dev] [ANN] Squeak 5.1 released; www.squeak.org; Trunk open again In-Reply-To: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> References: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> Message-ID: Someone please get this man a beer! On Tue, Aug 23, 2016 at 9:30 AM, Marcel Taeumel wrote: > > We are happy to announce the release of Squeak 5.1! > > Visit the Website [1], read the release notes in the image or outside [2], and try it out for yourself [3][4]! > > Thank you all for the contributions! :-) > > Happy birthday Squeak! It has been (almost) 20 years!!! [5] > > Best, > Marcel > > [1] http://www.squeak.org/ > [2] https://github.com/squeak-smalltalk/squeak-app/blob/master/release-notes/5.1 > [3] http://files.squeak.org/5.1/ > [4] http://try.squeak.org/ (to be updated soonish) > [5] http://files.squeak.org/docs/OOPSLA.Squeak.html > From leves at caesar.elte.hu Tue Aug 23 18:30:33 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Aug 23 18:30:38 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: <1471944106453-4912305.post@n4.nabble.com> References: <20160823020351.GA13829@shell.msen.com> <1471944106453-4912305.post@n4.nabble.com> Message-ID: It would be possible to start the update with the required error handlers around it, but unless you really had to do it, you're better off using a fixed image. Levente On Tue, 23 Aug 2016, marcel.taeumel wrote: > Nicolas Cellier wrote >> There's yet another possibility, in a preamble: >> - clone the old SystemProgressMorph class, >> - mutate all instances to the clone class >> >> Don't use class rename and class removal, because the system will do too >> much clean up. >> instead hack at a lower level >> >> 2016-08-23 4:03 GMT+02:00 David T. Lewis < > >> lewis@.msen > >> >: >> >>> On Mon, Aug 22, 2016 at 02:36:09PM +0200, Bert Freudenberg wrote: >>>> Seen it, discussed with Marcel but we don't have a good idea yet how to >>>> work around it. >>>> >>>> The only thing I can think of is to walk up the sender chain and >>> restart >>>> some context above the one referencing the old instance layout. Maybe >>> an >>>> exception handler in the updater that restarts updating in this >>> specific >>>> case? >>>> >>>> - Bert - >>>> >>> >>> I don't see a good place to put an exception handler, at least not >>> without >>> making things even more complicated than they already are. >>> >>> It looks like the the direct reference to instance var 'bars' is where we >>> encounter the problem. Presumably the old code in a block is refering to >>> an ivar slot in SystemProgressMorph that used to point to the 'vars' >>> array, >>> but that is now pointing to the 'font' ivar. >>> >>> And indeed I see now that Marcel found and fixed this issue in >>> Morphic-mt.1198, >>> so that accessor methods will now be used instead of direct references to >>> the variables. >>> >>> But we still have the problem of a SystemProgressMorph evaluating an >>> older >>> block that was created with an earlier version of the >>> SystemProgressMorph>>position:label:min:max: method, so the update stream >>> processing still fails if the update processing was started before >>> Morphic-mt.1198 was loaded. >>> >>> A partial workaround is to modify #position:label:min:max: to use an >>> accessor >>> for 'bars' prior to starting the update processing. This prevents the >>> error >>> condition that we are discussing here, but unfortunately it also results >>> in a couple of merge dialogs for the modified methods, so the update >>> still >>> requires manual intervention. >>> >>> Dave >>> >>> >>>> >>>> On Sun, Aug 21, 2016 at 10:55 PM, Levente Uzonyi < > >> leves@.elte > >> > >>>> wrote: >>>> >>>>> >>>>> Same here. I think the code changes during the update and the old >>> code >>> on >>>>> the stack causes the problem. >>>>> >>>>> Levente >>>>> >>>>> >>>>> On Sun, 21 Aug 2016, Chris Muller wrote: >>>>> >>>>> >>>>>> I've definitely experienced the exact same problem, and got around >>> it >>>>>> the same way, restarting the method and proceeding. Very strange. >>>>>> >>>>>> >>>>>> On Sun, Aug 21, 2016 at 3:13 PM, David T. Lewis < > >> lewis@.msen > >> > >>>>>> wrote: >>>>>> >>>>>>> >>>>>>> Moving from vm-dev to squeak-dev because it is a trunk update >>> stream >>>>>>> question. >>>>>>> Follow ups to squeak-dev please. >>>>>>> >>>>>>> Does anyone recognize this problem? >>>>>>> >>>>>>> We have an issue in trunk update processing that prevents a full >>> update >>>>>>> without manual intervention. This does not affect the 5.1 release, >>> but >>>>>>> it would be good to fix it so that the update from 5.0 to 5.1 can >>> be >>>>>>> reproduced in a continuous integration test. >>>>>>> >>>>>>> To reproduce: Start with Squeak5.0-15113.image, set the update URL >>>>>>> preference >>>>>>> to http://source.squeak.org/trunk, and do an "update from server". >>>>>>> >>>>>>> The error first appears when beginning to process the >>> update-mt.378.mcm >>>>>>> update map. The problem is related to updating the progress bar >>> with >>>>>>> ProgressInitiationException. >>>>>>> >>>>>>> When the failure occurs, the debugger (see attached image) seems to >>>>>>> show an array access being interpreted as if the array was an >>> instance >>>>>>> of StrikeFont. Per Nicolas' note below, it may be related to >>> showing >>>>>>> the progress bar while updating it. >>>>>>> >>>>>>> I can restart the update process from the debugger from >>>>>>> SystemProgressMorph>>position:label:min:max: in the stack frame, >>> and the >>>>>>> update proceeds. The error happens several more times, then at some >>> point >>>>>>> it seems to go away, so apparently the problem was fixed at some >>> later >>>>>>> point in the update stream. >>>>>>> >>>>>>> Does anyone recognize this problem? Can we work around it by >>> changing one >>>>>>> or more of the update maps? >>>>>>> >>>>>>> Thanks, >>>>>>> Dave >>>>>>> >>>>>>> >>>>>>> On Fri, Aug 19, 2016 at 10:30:30PM +0200, Nicolas Cellier wrote: >>>>>>> >>>>>>>> >>>>>>>> yes, this is a problem I encountered both in 32 and 64 bits squeak >>> while >>>>>>>> updating. >>>>>>>> >>>>>>>> I think it's related to showing the progress bar while updating >>> the >>>>>>>> progress bar. It's a Squeak trunk update problem, not a VM >>> problem. >>>>>>>> >>>>>>>> If some class layout change, but some block is still active (yeah, >>> did >>>>>>>> you >>>>>>>> see how many blocks we traverse just to change display of a >>> bar...), >>>>>>>> then >>>>>>>> the old block has invalid inst var offsets (offsets to the old >>> object >>>>>>>> that >>>>>>>> now has become a new object with new layout). >>>>>>>> >>>>>>>> In an interactive image, just close the debugger and relaunch the >>>>>>>> update. >>>>>>>> In an headless automated process, well... We should have fixed the >>>>>>>> update >>>>>>>> or start from a newer artifact... >>>>>>>> >>>>>>>> 2016-08-19 21:32 GMT+02:00 tim Rowledge < > >> tim@ > >> >: >>>>>>>> >>>>>>>>> >>>>>>>>> I just tried running the vmmaker-build script on my iMac with >>> weirdly >>>>>>>>> bad >>>>>>>>> results. >>>>>>>>> >>>>>>>>> The vm it downloads is the CogSpur.app-16.18.3692 version. Whilst >>>>>>>>> trying >>>>>>>>> to do the update part of the process I had several *very* odd >>> failures >>>>>>>>> where an object in a block was mistaken for nil during a message >>> send. >>>>>>>>> For >>>>>>>>> example in a progress bar update (which I can???t provide a log >>> for >>>>>>>>> since the >>>>>>>>> log got overwritten later) a line >>>>>>>>> (bars at: index) >>>>>>>>> lead to a nil is not indexable halt. Yet in inspecting the prior >>>>>>>>> stackframe the bars object was a perfectly normal array of >>> progress >>>>>>>>> bars. A >>>>>>>>> similar but not identical problem happened during another >>> attempt. >>>>>>>>> >>>>>>>>> Attempting to filein the BuildSqueakSpurTrunkVMMaker.st file >>> failed >>>>>>>>> when >>>>>>>>> the vm exploded with no visible log. >>>>>>>>> >>>>>>>>> Now I???m attempting to repeat that with a new 5.1rc1 vm & >>> already >>> up >>>>>>>>> to >>>>>>>>> date 5.1rc1 image. Which has sorta-worked, in a rather odd >>> manner. >>> It >>>>>>>>> got >>>>>>>>> to the final save and quit but when I start the supposedly >>> prepared >>>>>>>>> image >>>>>>>>> there is a problem with it trying to filein that file. I can???t >>> tell >>>>>>>>> right >>>>>>>>> now if it relates to the manual filein I started or if something >>> got >>>>>>>>> added >>>>>>>>> as a deferred action? Or maybe it???s a side-effect of the filein >>>>>>>>> having a >>>>>>>>> save & quit? Not come across this before. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> So far as I can tell it did complete the filein, so maybe all is >>> well. >>>>>>>>> >>>>>>>>> >>>>>>> >>>>>> >>> >>>> >>> >>> >>> > > Hi, there. > > It is, unfortunately, not possible to turn back time and rewrite history. > ;-) There is several important code that makes excessive use of instVar > accesses such as in SystemProgressMorph or HandMorph. Making any change in > their class layout while using some of their methods will provoke a strange > error. This could only be changed by a VM that keeps old class > layouts/schemata around for some longer time until there is no old compiled > method on any stack anymore. > > Usually, restarting the update process helps here. There is no way to fix > that in order to interactively update from 5.0 to 5.1 without any errors. > > However, we have an update script that updates build 15113, which is > effectively Squeak 5.0 to the latest trunk. Here is the script: > https://github.com/squeak-smalltalk/squeak-app/blob/master/prepare_image.st > And here is the image build 15113: > http://files.squeak.org/base/Squeak-trunk/base.zip > > We use that the create bundles with the latest alpha, beta, rc versions. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Re-Does-anyone-recognize-this-glitch-in-our-trunk-update-processing-was-Vm-dev-buildspurtrunkvmmaker-tp4912130p4912305.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From leves at caesar.elte.hu Tue Aug 23 18:34:04 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Aug 23 18:34:06 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: You have to #yield explicitly if you want your process to be preempted. Otherwise, processes with the same or lower priority will never run. It's not a Semaphore change, but a VM setting. Levente On Tue, 23 Aug 2016, Ben Coman wrote: > On Tue, Aug 23, 2016 at 5:26 PM, marcel.taeumel wrote: >> Chris Muller-3 wrote >>> Morphic is designed to run in one Process, so you shouldn't need any >>> multi-process coordination because you should only be doing drawing in >>> the UI process. Right? >>> >>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >> >>> marcel.taeumel@ >> >>> > wrote: >>>> Hi, there. >>>> >>>> Take this Morph here: >>>> >>>> initialize >>>> super initialize. >>>> semaphore := Semaphore forMutualExclusion. >>>> >>>> step >>>> semaphore critical: [ [] repeat ]. >>>> >>>> drawOn: aCanvas >>>> semaphore critical: [super drawOn: aCanvas]. >>>> >>>> If you create such a morph and open it in the world, the UI process will >>>> freeze because of that endless loop in the step method. Okay. The tricky >>>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>>> for >>>> the same semaphore that is currently used in the morph's step. You will >>>> not >>>> see a debugger appear. The freshly spawned UI process will block right >>>> awai. >>>> The well known big red cross/box does not appear because there is no >>>> place >>>> to detect this situation. >>>> >>>> An easy fix would be to tell the application developer to use >>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>> necessary. >>>> >>>> However, can there be a way for Morphic to detect such issues and flag >>>> that >>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>> toValue: >>>> true") Could there be a notification for the Morphic framework to look >>>> out >>>> for such as WaitOnCriticalSection to flag that morph as bad? Could that >>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>> >>>> If yes, Morphic could draw its world like this (pseudo code!): >>>> ... >>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>> true.] >>>> ... >>>> >>>> Morphic would be more robust. >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> >>>> >>>> >> >> Hi Chris, hi Bert, >> >> if you need an example, well, Etoys/Kedama makes those things in the latest >> Trunk version. ;-) >> >> It is not the point whether applications should do this or not but our >> recently changed semantics of semaphores might render your image unusable >> because of unusual application code. > > I'm curious what was the change in Semaphore semantics? > > cheers -ben > >> I see an opportunity to improve >> Morphics robustness and help users debug their applications without image >> freeze/lock out. >> >> So, I want to discuss here, whether there could be a Notification sent >> whenever an object/process starts waiting on a semaphore. :-) > > From Marcel.Taeumel at hpi.de Tue Aug 23 19:50:04 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 23 19:51:31 2016 Subject: [squeak-dev] Re: [ANN] Squeak 5.1 released; In-Reply-To: <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> References: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> Message-ID: <1471981804254-4912377.post@n4.nabble.com> Herbert K?nig wrote > Hi, > > Unzipping the Windows Version from the squeak.org, skip configuration > and try to bring up the halos on the Welcome thingie brings a multitude > (more than I could close) of Warnings in the Windows version. > > Same with AllInOne and ARM versions on my Pi 3 > > Morph from the Objects catalog bring one Warning: > > MenuMorph class>>#menuSelectionColor has been deprecated. mt: Use UI > themes. > > which can be resumed. > > On the World I can bring up the halos. > > So maybe the first case is sth. recursive through the submorphs. > > Cheers, > > Herbert > > Am 23.08.2016 um 16:30 schrieb Marcel Taeumel: >> *We are happy to announce the release of Squeak 5.1!* >> >> Visit the Website [1], read the release notes in the image or outside >> [2], and try it out for yourself [3][4]! >> >> Thank you all for the contributions! :-) >> >> Happy birthday Squeak! It has been (almost) 20 years!!! [5] >> >> Best, >> Marcel >> >> [1] http://www.squeak.org/ >> [2] >> https://github.com/squeak-smalltalk/squeak-app/blob/master/release-notes/5.1 >> [3] http://files.squeak.org/5.1/ >> [4] http://try.squeak.org/ (to be updated soonish) >> [5] http://files.squeak.org/docs/OOPSLA.Squeak.html >> >> Ooops. :) Well, we updated the release artifacts and disabled the deprecation warnings by default in 5.1. Have fun! Marcel -- View this message in context: http://forum.world.st/ANN-Squeak-5-1-released-www-squeak-org-Trunk-open-again-tp4912328p4912377.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Tue Aug 23 19:52:55 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Tue Aug 23 19:54:23 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: <1471981975899-4912378.post@n4.nabble.com> Levente Uzonyi wrote > You have to #yield explicitly if you want your process to be preempted. > Otherwise, processes with the same or lower priority will never run. > It's not a Semaphore change, but a VM setting. > > Levente > > On Tue, 23 Aug 2016, Ben Coman wrote: > >> On Tue, Aug 23, 2016 at 5:26 PM, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >>> Chris Muller-3 wrote >>>> Morphic is designed to run in one Process, so you shouldn't need any >>>> multi-process coordination because you should only be doing drawing in >>>> the UI process. Right? >>>> >>>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >>> >>>> marcel.taeumel@ >>> >>>> > wrote: >>>>> Hi, there. >>>>> >>>>> Take this Morph here: >>>>> >>>>> initialize >>>>> super initialize. >>>>> semaphore := Semaphore forMutualExclusion. >>>>> >>>>> step >>>>> semaphore critical: [ [] repeat ]. >>>>> >>>>> drawOn: aCanvas >>>>> semaphore critical: [super drawOn: aCanvas]. >>>>> >>>>> If you create such a morph and open it in the world, the UI process >>>>> will >>>>> freeze because of that endless loop in the step method. Okay. The >>>>> tricky >>>>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>>>> for >>>>> the same semaphore that is currently used in the morph's step. You >>>>> will >>>>> not >>>>> see a debugger appear. The freshly spawned UI process will block right >>>>> awai. >>>>> The well known big red cross/box does not appear because there is no >>>>> place >>>>> to detect this situation. >>>>> >>>>> An easy fix would be to tell the application developer to use >>>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>>> necessary. >>>>> >>>>> However, can there be a way for Morphic to detect such issues and flag >>>>> that >>>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>>> toValue: >>>>> true") Could there be a notification for the Morphic framework to look >>>>> out >>>>> for such as WaitOnCriticalSection to flag that morph as bad? Could >>>>> that >>>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>>> >>>>> If yes, Morphic could draw its world like this (pseudo code!): >>>>> ... >>>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>>> true.] >>>>> ... >>>>> >>>>> Morphic would be more robust. >>>>> >>>>> Best, >>>>> Marcel >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>> >>> Hi Chris, hi Bert, >>> >>> if you need an example, well, Etoys/Kedama makes those things in the >>> latest >>> Trunk version. ;-) >>> >>> It is not the point whether applications should do this or not but our >>> recently changed semantics of semaphores might render your image >>> unusable >>> because of unusual application code. >> >> I'm curious what was the change in Semaphore semantics? >> >> cheers -ben >> >>> I see an opportunity to improve >>> Morphics robustness and help users debug their applications without >>> image >>> freeze/lock out. >>> >>> So, I want to discuss here, whether there could be a Notification sent >>> whenever an object/process starts waiting on a semaphore. :-) >> >> The problem is that there can be dead-locked drawing code in a morph without a chance to flag that morph for not being drawn at the next round. It would be nice if we could address that problem in the future. Best, Marcel -- View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912378.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bert at freudenbergs.de Tue Aug 23 21:06:02 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Aug 23 21:06:05 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: <1471944106453-4912305.post@n4.nabble.com> References: <20160823020351.GA13829@shell.msen.com> <1471944106453-4912305.post@n4.nabble.com> Message-ID: On Tue, Aug 23, 2016 at 11:21 AM, marcel.taeumel wrote: > > Hi, there. > > It is, unfortunately, not possible to turn back time and rewrite history. > ;-) > ... unless we're dealing with software. Oh wait, we are ;) There is several important code that makes excessive use of instVar > accesses such as in SystemProgressMorph or HandMorph. Making any change in > their class layout while using some of their methods will provoke a strange > error. This could only be changed by a VM that keeps old class > layouts/schemata around for some longer time until there is no old compiled > method on any stack anymore. Class layout changes and instance migration is handled fully in the image by class ClassBuilder. The VM is not at fault here. > Usually, restarting the update process helps here. There is no way to fix > that in order to interactively update from 5.0 to 5.1 without any errors. > We can retroactively change the config map that introduced the problem. I'm certain it would be possible to fix, but I am not entirely sure it's worth the trouble. - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160823/ed1e1b36/attachment.htm From commits at source.squeak.org Tue Aug 23 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 23 21:55:04 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160823215503.1131.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068706.html Name: Morphic-mt.1295 Ancestors: Morphic-mt.1294 Fix accidential scrolling when invoking the menu of a scroll pane (e.g. lists, text fields) via yellow-clicking the scroll bar (paging area). ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068707.html Name: Morphic-mt.1296 Ancestors: Morphic-mt.1295 One less use of SortedCollection. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068708.html Name: ST80-mt.217 Ancestors: ST80-nice.216 Fix serious bug in MVC that occured when having deprecation warnings enabled. ============================================= From Marcel.Taeumel at hpi.de Wed Aug 24 05:01:57 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 05:03:27 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <20160823020351.GA13829@shell.msen.com> <1471944106453-4912305.post@n4.nabble.com> Message-ID: <1472014917638-4912402.post@n4.nabble.com> Bert Freudenberg wrote > On Tue, Aug 23, 2016 at 11:21 AM, marcel.taeumel < > Marcel.Taeumel@ > > > wrote: > >> >> Hi, there. >> >> It is, unfortunately, not possible to turn back time and rewrite history. >> ;-) >> > > ... unless we're dealing with software. Oh wait, we are ;) > > There is several important code that makes excessive use of instVar >> accesses such as in SystemProgressMorph or HandMorph. Making any change >> in >> their class layout while using some of their methods will provoke a >> strange >> error. This could only be changed by a VM that keeps old class >> layouts/schemata around for some longer time until there is no old >> compiled >> method on any stack anymore. > > > Class layout changes and instance migration is handled fully in the image > by class ClassBuilder. The VM is not at fault here. > > >> Usually, restarting the update process helps here. There is no way to fix >> that in order to interactively update from 5.0 to 5.1 without any errors. >> > > We can retroactively change the config map that introduced the problem. > I'm > certain it would be possible to fix, but I am not entirely sure it's worth > the trouble. > > - Bert - Hi Bert, the config map will not help, we would have to change numerous MCZs since point X in time to rewrite history. :) "Oh, would we have always been using accessors here instead of instVar accessess..." Best, Marcel -- View this message in context: http://forum.world.st/Re-Does-anyone-recognize-this-glitch-in-our-trunk-update-processing-was-Vm-dev-buildspurtrunkvmmaker-tp4912130p4912402.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Aug 24 05:06:57 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 05:08:27 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: <1472014917638-4912402.post@n4.nabble.com> References: <20160823020351.GA13829@shell.msen.com> <1471944106453-4912305.post@n4.nabble.com> <1472014917638-4912402.post@n4.nabble.com> Message-ID: <1472015217513-4912403.post@n4.nabble.com> marcel.taeumel wrote > > Bert Freudenberg wrote >> On Tue, Aug 23, 2016 at 11:21 AM, marcel.taeumel < >> Marcel.Taeumel@ >> > >> wrote: >> >>> >>> Hi, there. >>> >>> It is, unfortunately, not possible to turn back time and rewrite >>> history. >>> ;-) >>> >> >> ... unless we're dealing with software. Oh wait, we are ;) >> >> There is several important code that makes excessive use of instVar >>> accesses such as in SystemProgressMorph or HandMorph. Making any change >>> in >>> their class layout while using some of their methods will provoke a >>> strange >>> error. This could only be changed by a VM that keeps old class >>> layouts/schemata around for some longer time until there is no old >>> compiled >>> method on any stack anymore. >> >> >> Class layout changes and instance migration is handled fully in the image >> by class ClassBuilder. The VM is not at fault here. >> >> >>> Usually, restarting the update process helps here. There is no way to >>> fix >>> that in order to interactively update from 5.0 to 5.1 without any >>> errors. >>> >> >> We can retroactively change the config map that introduced the problem. >> I'm >> certain it would be possible to fix, but I am not entirely sure it's >> worth >> the trouble. >> >> - Bert - > Hi Bert, > > the config map will not help, we would have to change numerous MCZs since > point X in time to rewrite history. :) "Oh, would we have always been > using accessors here instead of instVar accessess..." > > Best, > Marcel ...even then, how do you update the code in image Y, which is going to be updated before it is updated? This is not even possible for every user's images out there... :-/ The Java Hotspot VM has a mapping table for changed instVar accesses. Maybe we could use this trick, too? Still, would only applies to future versions. We cannot rewrite history because it is not only one piece of software in a single version control system with a single version checked out. :) Best, Marcel -- View this message in context: http://forum.world.st/Re-Does-anyone-recognize-this-glitch-in-our-trunk-update-processing-was-Vm-dev-buildspurtrunkvmmaker-tp4912130p4912403.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From btc at openinworld.com Wed Aug 24 06:23:33 2016 From: btc at openinworld.com (Ben Coman) Date: Wed Aug 24 06:23:58 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: On Wed, Aug 24, 2016 at 2:34 AM, Levente Uzonyi wrote: > You have to #yield explicitly if you want your process to be preempted. > Otherwise, processes with the same or lower priority will never run. Just to be pedantic ;) IIUC... #yield does not allow lower priority processes to run. For that you need to #wait, #suspend or be waiting on a #critical: etc. cheers -ben > It's not a Semaphore change, but a VM setting. > > Levente > > > On Tue, 23 Aug 2016, Ben Coman wrote: > >> On Tue, Aug 23, 2016 at 5:26 PM, marcel.taeumel >> wrote: >>> >>> Chris Muller-3 wrote >>>> >>>> Morphic is designed to run in one Process, so you shouldn't need any >>>> multi-process coordination because you should only be doing drawing in >>>> the UI process. Right? >>>> >>>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >>> >>> >>>> marcel.taeumel@ >>> >>> >>>> > wrote: >>>>> >>>>> Hi, there. >>>>> >>>>> Take this Morph here: >>>>> >>>>> initialize >>>>> super initialize. >>>>> semaphore := Semaphore forMutualExclusion. >>>>> >>>>> step >>>>> semaphore critical: [ [] repeat ]. >>>>> >>>>> drawOn: aCanvas >>>>> semaphore critical: [super drawOn: aCanvas]. >>>>> >>>>> If you create such a morph and open it in the world, the UI process >>>>> will >>>>> freeze because of that endless loop in the step method. Okay. The >>>>> tricky >>>>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>>>> for >>>>> the same semaphore that is currently used in the morph's step. You will >>>>> not >>>>> see a debugger appear. The freshly spawned UI process will block right >>>>> awai. >>>>> The well known big red cross/box does not appear because there is no >>>>> place >>>>> to detect this situation. >>>>> >>>>> An easy fix would be to tell the application developer to use >>>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>>> necessary. >>>>> >>>>> However, can there be a way for Morphic to detect such issues and flag >>>>> that >>>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>>> toValue: >>>>> true") Could there be a notification for the Morphic framework to look >>>>> out >>>>> for such as WaitOnCriticalSection to flag that morph as bad? Could that >>>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>>> >>>>> If yes, Morphic could draw its world like this (pseudo code!): >>>>> ... >>>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>>> true.] >>>>> ... >>>>> >>>>> Morphic would be more robust. >>>>> >>>>> Best, >>>>> Marcel >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>> >>> Hi Chris, hi Bert, >>> >>> if you need an example, well, Etoys/Kedama makes those things in the >>> latest >>> Trunk version. ;-) >>> >>> It is not the point whether applications should do this or not but our >>> recently changed semantics of semaphores might render your image unusable >>> because of unusual application code. >> >> >> I'm curious what was the change in Semaphore semantics? >> >> cheers -ben >> >>> I see an opportunity to improve >>> Morphics robustness and help users debug their applications without image >>> freeze/lock out. >>> >>> So, I want to discuss here, whether there could be a Notification sent >>> whenever an object/process starts waiting on a semaphore. :-) >> >> >> > From Marcel.Taeumel at hpi.de Wed Aug 24 06:35:41 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 06:37:11 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: <1472020541238-4912413.post@n4.nabble.com> Ben Coman wrote > On Wed, Aug 24, 2016 at 2:34 AM, Levente Uzonyi < > leves@.elte > > wrote: >> You have to #yield explicitly if you want your process to be preempted. >> Otherwise, processes with the same or lower priority will never run. > > Just to be pedantic ;) IIUC... #yield does not allow lower priority > processes to run. For that you need to #wait, #suspend or be waiting > on a #critical: etc. > > cheers -ben > >> It's not a Semaphore change, but a VM setting. >> >> Levente >> >> >> On Tue, 23 Aug 2016, Ben Coman wrote: >> >>> On Tue, Aug 23, 2016 at 5:26 PM, marcel.taeumel < > Marcel.Taeumel@ > > >>> wrote: >>>> >>>> Chris Muller-3 wrote >>>>> >>>>> Morphic is designed to run in one Process, so you shouldn't need any >>>>> multi-process coordination because you should only be doing drawing in >>>>> the UI process. Right? >>>>> >>>>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >>>> >>>> >>>>> marcel.taeumel@ >>>> >>>> >>>>> > wrote: >>>>>> >>>>>> Hi, there. >>>>>> >>>>>> Take this Morph here: >>>>>> >>>>>> initialize >>>>>> super initialize. >>>>>> semaphore := Semaphore forMutualExclusion. >>>>>> >>>>>> step >>>>>> semaphore critical: [ [] repeat ]. >>>>>> >>>>>> drawOn: aCanvas >>>>>> semaphore critical: [super drawOn: aCanvas]. >>>>>> >>>>>> If you create such a morph and open it in the world, the UI process >>>>>> will >>>>>> freeze because of that endless loop in the step method. Okay. The >>>>>> tricky >>>>>> thing is, that you cannot use [CMD]+[.] because the drawing code >>>>>> waits >>>>>> for >>>>>> the same semaphore that is currently used in the morph's step. You >>>>>> will >>>>>> not >>>>>> see a debugger appear. The freshly spawned UI process will block >>>>>> right >>>>>> awai. >>>>>> The well known big red cross/box does not appear because there is no >>>>>> place >>>>>> to detect this situation. >>>>>> >>>>>> An easy fix would be to tell the application developer to use >>>>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>>>> necessary. >>>>>> >>>>>> However, can there be a way for Morphic to detect such issues and >>>>>> flag >>>>>> that >>>>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>>>> toValue: >>>>>> true") Could there be a notification for the Morphic framework to >>>>>> look >>>>>> out >>>>>> for such as WaitOnCriticalSection to flag that morph as bad? Could >>>>>> that >>>>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>>>> >>>>>> If yes, Morphic could draw its world like this (pseudo code!): >>>>>> ... >>>>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>>>> true.] >>>>>> ... >>>>>> >>>>>> Morphic would be more robust. >>>>>> >>>>>> Best, >>>>>> Marcel >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>> >>>> Hi Chris, hi Bert, >>>> >>>> if you need an example, well, Etoys/Kedama makes those things in the >>>> latest >>>> Trunk version. ;-) >>>> >>>> It is not the point whether applications should do this or not but our >>>> recently changed semantics of semaphores might render your image >>>> unusable >>>> because of unusual application code. >>> >>> >>> I'm curious what was the change in Semaphore semantics? >>> >>> cheers -ben >>> >>>> I see an opportunity to improve >>>> Morphics robustness and help users debug their applications without >>>> image >>>> freeze/lock out. >>>> >>>> So, I want to discuss here, whether there could be a Notification sent >>>> whenever an object/process starts waiting on a semaphore. :-) >>> >>> >>> >> Yes, only waiting on a semaphore (or mutex) will allow processes at lower priorities to run. For example, "(Delay forMilliseconds: 500) wait." gives processes at the same or lower priorities a chance to run. You can implement interesting process schedulers with this. :D Best, Marcel -- View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912413.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 24 07:19:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:19:03 2016 Subject: [squeak-dev] The Trunk: 51Deprecated-mt.47.mcz Message-ID: Marcel Taeumel uploaded a new version of 51Deprecated to project The Trunk: http://source.squeak.org/trunk/51Deprecated-mt.47.mcz ==================== Summary ==================== Name: 51Deprecated-mt.47 Author: mt Time: 24 August 2016, 9:18:52.102086 am UUID: 91c0a16a-f16a-784a-9ea5-a21976599744 Ancestors: 51Deprecated-mt.46 Reduce use of deprecated API. =============== Diff against 51Deprecated-mt.46 =============== Item was changed: ----- Method: MenuLineMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas + + aCanvas + fillRectangle: ((bounds topLeft corner: bounds bottomRight) insetBy: (0@0 corner: 0@ 1)) + color: Color gray.! - | baseColor | - baseColor := Preferences menuColorFromWorld - ifTrue: [owner color twiceDarker] - ifFalse: [Preferences menuAppearance3d - ifTrue: [owner color] - ifFalse: [MenuMorph menuLineColor]]. - Preferences menuAppearance3d - ifTrue: [ - aCanvas - fillRectangle: (bounds topLeft corner: bounds rightCenter) - color: baseColor twiceDarker. - - aCanvas - fillRectangle: (bounds leftCenter corner: bounds bottomRight) - color: baseColor twiceLighter] - ifFalse: [ - aCanvas - fillRectangle: ((bounds topLeft corner: bounds bottomRight) insetBy: (0@0 corner: 0@ 1)) - color: baseColor]! From commits at source.squeak.org Wed Aug 24 07:22:32 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:22:34 2016 Subject: [squeak-dev] The Trunk: 60Deprecated-mt.1.mcz Message-ID: Marcel Taeumel uploaded a new version of 60Deprecated to project The Trunk: http://source.squeak.org/trunk/60Deprecated-mt.1.mcz ==================== Summary ==================== Name: 60Deprecated-mt.1 Author: mt Time: 24 August 2016, 9:22:29.736086 am UUID: 7d3d754e-fa52-e348-9c9d-a9ab9bf150c5 Ancestors: Deprecate project-parameter style preferences for menu visuals. ==================== Snapshot ==================== ----- Method: Preferences class>>menuBorderColor (in category '*60Deprecated-menu colors') ----- menuBorderColor self deprecated: 'mt: Use UI themes.'. ^ (UserInterfaceTheme current get: #borderColor for: #MenuMorph) ifNil: [(Color r: 0.2 g: 0.3 b: 0.9)]! ----- Method: Preferences class>>menuBorderWidth (in category '*60Deprecated-menu colors') ----- menuBorderWidth self deprecated: 'mt: Use UI themes.'. ^ (UserInterfaceTheme current get: #borderWidth for: #MenuMorph) ifNil: [2]! ----- Method: Preferences class>>menuColor (in category '*60Deprecated-menu colors') ----- menuColor self deprecated: 'mt: Use UI themes.'. ^ (UserInterfaceTheme current get: #color for: #MenuMorph) ifNil: [(Color r: 0.9 g: 0.9 b: 0.9)]! ----- Method: Preferences class>>menuLineColor (in category '*60Deprecated-menu colors') ----- menuLineColor self deprecated: 'mt: Use UI themes.'. ^ (UserInterfaceTheme current get: #lineColor for: #MenuMorph) ifNil: [(Color r: 0.6 g: 0.7 b: 1)]! ----- Method: Preferences class>>menuSelectionColor (in category '*60Deprecated-menu colors') ----- menuSelectionColor self deprecated: 'mt: Use UI themes.'. ^ (UserInterfaceTheme current get: #selectionColor for: #MenuItemMorph) ifNil: [(Color r: 0.4 g: 0.5 b: 0.7)]! ----- Method: Preferences class>>menuTitleBorderColor (in category '*60Deprecated-menu colors') ----- menuTitleBorderColor self deprecated: 'mt: Use UI themes.'. ^ (UserInterfaceTheme current get: #titleBorderColor for: #MenuMorph) ifNil: [(Color r: 0.6 g: 0.7 b: 1)]! ----- Method: Preferences class>>menuTitleBorderWidth (in category '*60Deprecated-menu colors') ----- menuTitleBorderWidth self deprecated: 'mt: Use UI themes.'. ^ (UserInterfaceTheme current get: #titleBorderWidth for: #MenuMorph) ifNil: [0]! ----- Method: Preferences class>>menuTitleColor (in category '*60Deprecated-menu colors') ----- menuTitleColor self deprecated: 'mt: Use UI themes.'. ^ (UserInterfaceTheme current get: #titleColor for: #MenuMorph) ifNil: [ Color transparent]! From commits at source.squeak.org Wed Aug 24 07:23:29 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:23:32 2016 Subject: [squeak-dev] The Trunk: Nebraska-mt.43.mcz Message-ID: Marcel Taeumel uploaded a new version of Nebraska to project The Trunk: http://source.squeak.org/trunk/Nebraska-mt.43.mcz ==================== Summary ==================== Name: Nebraska-mt.43 Author: mt Time: 24 August 2016, 9:23:19.115086 am UUID: 21a6c68d-b9a1-4c41-8901-120a7494c5ed Ancestors: Nebraska-mt.42 Reduced use of deprecated API. =============== Diff against Nebraska-mt.42 =============== Item was changed: ----- Method: NebraskaServerMorph>>setColorsAndBorder (in category 'initialization') ----- setColorsAndBorder | worldColor c | c := ((Preferences menuColorFromWorld and: [Display depth > 4]) and: [(worldColor := self currentWorld color) isColor]) ifTrue: [worldColor luminance > 0.7 ifTrue: [worldColor mixed: 0.8 with: Color black] ifFalse: [worldColor mixed: 0.4 with: Color white]] + ifFalse: [Color r: 0.9 g: 0.9 b: 0.9]. - ifFalse: [MenuMorph menuColor]. self color: c. self borderColor: #raised. + self borderWidth: 1. - self borderWidth: MenuMorph menuBorderWidth. self useRoundedCorners! From commits at source.squeak.org Wed Aug 24 07:28:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:28:22 2016 Subject: [squeak-dev] The Trunk: Tools-mt.721.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.721.mcz ==================== Summary ==================== Name: Tools-mt.721 Author: mt Time: 24 August 2016, 9:27:56.387086 am UUID: d3d423cf-f384-e549-85a2-f457c5662693 Ancestors: Tools-mt.720 Reduce use of deprecated API. =============== Diff against Tools-mt.720 =============== Item was changed: ----- Method: FileChooser>>createDialogBoxMorphicView (in category 'ui creation') ----- createDialogBoxMorphicView | m | m := MorphicModel new layoutPolicy: ProportionalLayout new; + color: (Color r: 0.9 g: 0.9 b: 0.9); + borderColor: Color gray; + borderWidth: 1; - color: Preferences menuColor; - borderColor: Preferences menuBorderColor; - borderWidth: Preferences menuBorderWidth; layoutInset: 0; extent: 600@400. self setMorphicView: m. ^m! Item was changed: ----- Method: FileChooser>>initializeAsDialogBox (in category 'initialization') ----- initializeAsDialogBox self initializeBasicParameters. self createDialogBoxUI. self morphicView useRoundedCorners; + color: (Color r: 0.9 g: 0.9 b: 0.9); + adoptPaneColor: (Color r: 0.6 g: 0.7 b: 1). - color: Preferences menuColor; - adoptPaneColor: Preferences menuLineColor. self + setCaptionColor: Color transparent; + setButtonColor: (Color r: 0.9 g: 0.9 b: 0.9). + ! - setCaptionColor: Preferences menuTitleColor; - setButtonColor: Preferences menuColor.! From commits at source.squeak.org Wed Aug 24 07:29:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:29:23 2016 Subject: [squeak-dev] The Trunk: PreferenceBrowser-mt.77.mcz Message-ID: Marcel Taeumel uploaded a new version of PreferenceBrowser to project The Trunk: http://source.squeak.org/trunk/PreferenceBrowser-mt.77.mcz ==================== Summary ==================== Name: PreferenceBrowser-mt.77 Author: mt Time: 24 August 2016, 9:29:10.757086 am UUID: 13ffbc3f-d12f-7a49-950d-fb41f6d53d4a Ancestors: PreferenceBrowser-mt.76 Reduced use of deprecated API. =============== Diff against PreferenceBrowser-mt.76 =============== Item was changed: ----- Method: PBColorPreferenceView>>colorMenuButton (in category 'user interface') ----- colorMenuButton | selector name | name := self preference name. (name includesSubstring: 'border' caseSensitive: false) ifTrue: [ selector := #borderStyleMenu] ifFalse:[ selector := #fillStyleMenu]. button := SimpleButtonMorph new label: self preference preferenceValue asString; actionSelector: selector; target: self. + - name = #menuBorderColor - ifTrue:[ ^button borderColor: MenuMorph menuBorderColor; borderWidth: MenuMorph menuBorderWidth]. - name = #menuTitleBorderColor - ifTrue:[ ^button borderColor: MenuMorph menuTitleBorderColor; borderWidth: MenuMorph menuTitleBorderWidth]. self adjustLabelColor. ^button color: self preference preferenceValue "UpdatingRectangleMorph new target: self preference; getSelector: #preferenceValue; putSelector: #preferenceValue:; extent: 22@22; setBalloonText: 'click here to change the color' translated; yourself."! Item was changed: ----- Method: PBColorPreferenceView>>setBorderStyle: (in category 'user interface') ----- setBorderStyle: aBorderStyle + - self preference name = #menuBorderColor - ifTrue: [button color: MenuMorph menuColor; - borderWidth: MenuMorph menuBorderWidth]. - self preference name = #menuTitleBorderColor - ifTrue: [button color: MenuMorph menuTitleColor; - borderWidth: MenuMorph menuTitleBorderWidth]. self preference preferenceValue: aBorderStyle. button label: self preference preferenceValue asString; borderColor: aBorderStyle. ! From commits at source.squeak.org Wed Aug 24 07:35:14 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:35:17 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1297.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1297.mcz ==================== Summary ==================== Name: Morphic-mt.1297 Author: mt Time: 24 August 2016, 9:34:22.478086 am UUID: 4851a423-b544-174b-b6c7-0ecef50f1009 Ancestors: Morphic-mt.1296 Reduced use of deprecated API. Custom UI theme colors for halo morph and its rubber selection. =============== Diff against Morphic-mt.1296 =============== Item was changed: ----- Method: MorphHierarchyListMorph>>createContainer (in category 'private') ----- createContainer "Private - Create a container" | container | container := BorderedMorph new. container extent: (World extent * (1 / 4 @ (2 / 3))) rounded. container layoutPolicy: TableLayout new. container hResizing: #rigid. container vResizing: #rigid. container + setColor: (Color gray: 0.9) + borderWidth: 1 + borderColor: Color gray. - setColor: MenuMorph menuColor - borderWidth: MenuMorph menuBorderWidth - borderColor: MenuMorph menuBorderColor. container layoutInset: 0. "container useRoundedCorners." "" container setProperty: #morphHierarchy toValue: true. container setNameTo: 'Objects Hierarchy' translated. "" ^ container! Item was changed: ----- Method: SelectionMorph>>defaultBorderColor (in category 'initialization') ----- defaultBorderColor "answer the default border color/fill style for the receiver" + ^ self userInterfaceTheme borderColor ifNil: [Color blue twiceDarker alpha: 0.75]! - ^ ( MenuMorph menuSelectionColor ifNil: [Color blue]) twiceDarker alpha: 0.75! Item was changed: ----- Method: SelectionMorph>>defaultColor (in category 'initialization') ----- defaultColor "answer the default color/fill style for the receiver" + ^ self userInterfaceTheme color ifNil: [Color blue alpha: 0.08] - ^ (MenuMorph menuSelectionColor ifNil: [Color blue]) alpha: 0.08 ! Item was changed: ----- Method: SimpleHaloMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas "Draw this morph only if it has no target." (Preferences showBoundsInHalo and: [self target isWorldMorph not]) ifTrue: [ - | boundsColor | - boundsColor := MenuMorph menuSelectionColor - ifNil: [Color blue]. aCanvas frameAndFillRectangle: self bounds fillColor: Color transparent borderWidth: 2 + borderColor: (self userInterfaceTheme borderColor ifNil: [Color blue alpha: 0.8])]! - borderColor: - (boundsColor isTranslucent - ifTrue: [boundsColor] - ifFalse: [boundsColor alpha: 0.8])]! Item was changed: ----- Method: TheWorldMainDockingBar>>colorIcon: (in category 'private') ----- colorIcon: aColor "Guess if 'uniform window colors' are used and avoid all icons to be just gray" (aColor = (UserInterfaceTheme current get: #uniformWindowColor for: Model) or: [Preferences tinyDisplay]) ifTrue: [ ^nil ]. ^(aColor iconOrThumbnailOfSize: 14) + borderWidth: 3 color: ((UserInterfaceTheme current get: #color for: #MenuMorph) ifNil: [(Color r: 0.9 g: 0.9 b: 0.9)]) muchDarker; - borderWidth: 3 color: MenuMorph menuColor muchDarker; borderWidth: 2 color: Color transparent! Item was removed: - ----- Method: TheWorldMainDockingBar>>gradientRamp (in category 'private') ----- - gradientRamp - - ^{ - 0.0 -> Color white. - 1.0 -> MenuMorph menuColor darker }! From commits at source.squeak.org Wed Aug 24 07:36:37 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:36:41 2016 Subject: [squeak-dev] The Trunk: System-mt.907.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.907.mcz ==================== Summary ==================== Name: System-mt.907 Author: mt Time: 24 August 2016, 9:36:05.021086 am UUID: 2371125c-24aa-1a4e-aa88-ed2339ba3a9c Ancestors: System-mt.906 Deprecate project-parameter preference for menu colors etc. Provide UI theme colors for halo and rubber selection. =============== Diff against System-mt.906 =============== Item was changed: ----- Method: Preferences class>>initializeParameters (in category 'parameters') ----- initializeParameters "Preferences initializeParameters" Parameters := IdentityDictionary new. - self restoreDefaultMenuParameters. Parameters at: #maxBalloonHelpLineLength put: 28. self initializeTextHighlightingParameters! Item was removed: - ----- Method: Preferences class>>menuBorderColor (in category 'prefs - menus') ----- - menuBorderColor - Display depth <= 2 ifTrue: [^ Color black]. - ^ Parameters at: #menuBorderColor! Item was removed: - ----- Method: Preferences class>>menuBorderWidth (in category 'prefs - menus') ----- - menuBorderWidth - ^ Parameters at: #menuBorderWidth! Item was removed: - ----- Method: Preferences class>>menuColor (in category 'prefs - menus') ----- - menuColor - Display depth <= 2 ifTrue: [^ Color white]. - ^ Parameters at: #menuColor! Item was removed: - ----- Method: Preferences class>>menuLineColor (in category 'prefs - menus') ----- - menuLineColor - ^ Parameters - at: #menuLineColor - ifAbsentPut: [Preferences menuBorderColor lighter]! Item was removed: - ----- Method: Preferences class>>menuSelectionColor (in category 'prefs - menus') ----- - menuSelectionColor - ^ Parameters - at: #menuSelectionColor - ifAbsent: [nil]! Item was removed: - ----- Method: Preferences class>>menuTitleBorderColor (in category 'prefs - menus') ----- - menuTitleBorderColor - Display depth <= 2 ifTrue: [^ Color black]. - ^ Parameters at: #menuTitleBorderColor! Item was removed: - ----- Method: Preferences class>>menuTitleBorderWidth (in category 'prefs - menus') ----- - menuTitleBorderWidth - ^ Parameters at: #menuTitleBorderWidth! Item was removed: - ----- Method: Preferences class>>menuTitleColor (in category 'prefs - menus') ----- - menuTitleColor - Display depth = 1 ifTrue: [^ Color white]. - Display depth = 2 ifTrue: [^ Color gray]. - ^ Parameters at: #menuTitleColor! Item was removed: - ----- Method: Preferences class>>restoreDefaultMenuParameters (in category 'initialization - misc') ----- - restoreDefaultMenuParameters - "Restore the four color choices of the original implementors of - MorphicMenus" - " - Preferences restoreDefaultMenuParameters - " - Parameters - at: #menuColor - put: (Color - r: 0.97 - g: 0.97 - b: 0.97). - Parameters - at: #menuBorderColor - put: (Color - r: 0.167 - g: 0.167 - b: 1.0). - Parameters at: #menuBorderWidth put: 2. - Parameters at: #menuTitleColor put: (Color - r: 0.4 - g: 0.8 - b: 0.9) twiceDarker. - Parameters - at: #menuTitleBorderColor - put: (Color - r: 0.333 - g: 0.667 - b: 0.751). - Parameters at: #menuTitleBorderWidth put: 1. - Parameters - at: #menuLineColor - put: (Preferences menuBorderColor lighter)! Item was changed: ----- Method: SqueakTheme class>>addToolColors: (in category 'instance creation') ----- addToolColors: theme "Tool-specific colors." "SUnit's TestRunner." theme set: #failureColor for: #TestRunner to: Color yellow; set: #errorColor for: #TestRunner to: Color red; set: #passColor for: #TestRunner to: Color green; derive: #failureTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #errorTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor; derive: #passTextColor for: #TestRunner from: #PluggableTextMorph at: #textColor. "Monticello Tools." theme set: #revertedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #ignoredOperationAttributes for: #MCOperationsBrowser to: {TextColor color: Color gray}. "set: #rejectedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis struckOut}; set: #acceptedOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis underlined}; + set: #conflictingOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis bold}." + + "Halos." + theme + derive: #borderColor for: #HaloMorph from: #MenuItemMorph at: #selectionColor do: [:c | c alpha: 0.8]; + derive: #borderColor for: #SelectionMorph from: #MenuItemMorph at: #selectionColor do: [:c | c twiceDarker alpha: 0.75]; + derive: #color for: #SelectionMorph from: #MenuItemMorph at: #selectionColor do: [:c | c alpha: 0.08].! - set: #conflictingOperationAttributes for: #MCOperationsBrowser to: {TextEmphasis bold}."! From commits at source.squeak.org Wed Aug 24 07:44:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:44:13 2016 Subject: [squeak-dev] The Trunk: Monticello-mt.648.mcz Message-ID: Marcel Taeumel uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-mt.648.mcz ==================== Summary ==================== Name: Monticello-mt.648 Author: mt Time: 24 August 2016, 9:43:53.760054 am UUID: f94e32a5-1d5d-bf4a-ba2d-b5be328f1925 Ancestors: Monticello-mt.647 Due to updated trait composition string, fix requirements code. =============== Diff against Monticello-mt.647 =============== Item was changed: ----- Method: MCTraitDefinition>>requirements (in category 'comparing') ----- requirements "Assuming that traits in a composition can be identified by testing for the first character beeing an uppercase character (and thus not a special character such as {, # etc.)" | tokens traitNames | self hasTraitComposition ifFalse: [ ^Array new ]. + tokens := (Scanner new scanTokens: self traitComposition) flattened. - tokens := Scanner new scanTokens: self traitComposition. traitNames := tokens select: [:each | each first isUppercase]. ^traitNames asArray! From commits at source.squeak.org Wed Aug 24 07:46:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 07:46:41 2016 Subject: [squeak-dev] The Trunk: Squeak-Version-mt.4716.mcz Message-ID: Marcel Taeumel uploaded a new version of Squeak-Version to project The Trunk: http://source.squeak.org/trunk/Squeak-Version-mt.4716.mcz ==================== Summary ==================== Name: Squeak-Version-mt.4716 Author: mt Time: 24 August 2016, 9:46:29.025054 am UUID: c0093209-1442-9c4d-b603-d5dfe1be0ef0 Ancestors: Squeak-Version-kfr.4713 Unload package '311Deprecated'. =============== Diff against Squeak-Version-kfr.4713 =============== Item was changed: + (PackageInfo named: 'Squeak-Version') postscript: '(MCPackage named: ''311Deprecated'') unload.'! - (PackageInfo named: 'Squeak-Version') postscript: '"below, add code to be run after the loading of this package" - (MCPackage named: ''Universes'') workingCopy unload. - (MCPackage named: ''Universes'') workingCopy unregister. - '! From commits at source.squeak.org Wed Aug 24 08:52:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 08:52:24 2016 Subject: [squeak-dev] The Trunk: Tools-mt.722.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.722.mcz ==================== Summary ==================== Name: Tools-mt.722 Author: mt Time: 24 August 2016, 10:51:53.333003 am UUID: ec1bbe45-f22c-cf47-a2a8-979c13e702b0 Ancestors: Tools-mt.721 Remove use of ColorTheme. =============== Diff against Tools-mt.721 =============== Item was changed: ----- Method: FileList2 class>>blueButtonText:textColor:color:inWindow: (in category 'blue ui') ----- blueButtonText: aString textColor: textColor color: aColor inWindow: window | result | result := window fancyText: aString translated font: Preferences standardEToysFont color: textColor. result setProperty: #buttonText toValue: aString; hResizing: #rigid; extent: 100 @ 20; layoutInset: 4; + borderWidth: 1; - borderWidth: ColorTheme current dialogButtonBorderWidth; useRoundedCorners. aColor isNil ifFalse: [""result color: aColor. result borderColor: aColor muchDarker]. ^ result! Item was changed: ----- Method: FileList2 class>>blueButtonText:textColor:color:inWindow:balloonText:selector:recipient: (in category 'blue ui') ----- blueButtonText: aString textColor: textColor color: aColor inWindow: window balloonText: balloonText selector: sel recipient: recip | result | result := window fancyText: aString translated + font: Preferences standardEToysFont - font: Preferences standardEToysFont color: textColor. result setProperty: #buttonText toValue: aString; hResizing: #rigid; extent: 100 @ 20; layoutInset: 4; + borderWidth: 1; - borderWidth: ColorTheme current dialogButtonBorderWidth; useRoundedCorners; setBalloonText: balloonText. result on: #mouseUp send: sel to: recip. aColor isNil ifFalse: ["" result color: aColor. result borderColor: aColor muchDarker]. ^ result! Item was changed: ----- Method: FileList2 class>>morphicViewGeneralLoaderInWorld: (in category 'blue ui') ----- morphicViewGeneralLoaderInWorld: aWorld " FileList2 morphicViewGeneralLoaderInWorld: self currentWorld " | window aFileList buttons treePane textColor1 fileListPane pane2a pane2b fileTypeInfo fileTypeButtons fileTypeRow actionRow | fileTypeInfo := self endingSpecs. window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: FileDirectory default. aFileList fileSelectionBlock: self projectOnlySelectionBlock; modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; + borderWidth: 1; + borderColor: (Color r: 0.9 g: 0.801 b: 0.2); - borderWidth: ColorTheme current dialogBorderWidth; - borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. fileTypeButtons := fileTypeInfo collect: [ :each | (self blueButtonText: each first textColor: Color gray inWindow: window) setProperty: #enabled toValue: true; hResizing: #shrinkWrap; useSquareCorners ]. + buttons := {{'OK'. Color lightGreen}. {'Cancel'. Color lightRed}} collect: [ :each | - buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each | self blueButtonText: each first textColor: textColor1 color: each second inWindow: window ]. treePane := aFileList morphicDirectoryTreePane extent: 250@300; retractable: false; borderWidth: 0. fileListPane := aFileList morphicFileListPane extent: 350@300; retractable: false; borderWidth: 0. window addARow: {window fancyText: 'Find...' translated font: Preferences standardEToysTitleFont color: textColor1}. fileTypeRow := window addARowCentered: fileTypeButtons cellInset: 2. actionRow := window addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second } cellInset: 2. window addARow: { (window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; + borderWidth: 1; + borderColor: (Color r: 0.6 g: 0.7 b: 1) - borderWidth: ColorTheme current dialogPaneBorderWidth; - borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. (window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) useRoundedCorners; layoutInset: 0; + borderWidth: 1; + borderColor: (Color r: 0.6 g: 0.7 b: 1) - borderWidth: ColorTheme current dialogPaneBorderWidth; - borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. }. window fullBounds. + window fillWithRamp: (Color r: 1 g: 0.85 b: 0.975) oriented: 0.65. + pane2a fillWithRamp: (Color r: 0.85 g: 0.9 b: 1) oriented: (0.7 @ 0.35). + pane2b fillWithRamp: (Color r: 0.85 g: 0.9 b: 1) oriented: (0.7 @ 0.35). - window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. - pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). - pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " fileTypeButtons do: [ :each | each on: #mouseUp send: #value:value: to: [ :evt :morph | self update: actionRow in: window fileTypeRow: fileTypeRow morphUp: morph. ] ]. buttons first on: #mouseUp send: #okHit to: aFileList. buttons second on: #mouseUp send: #cancelHit to: aFileList. aFileList postOpen. window position: aWorld topLeft + (aWorld extent - window extent // 2). aFileList directoryChangeBlock: [ :newDir | self update: actionRow in: window fileTypeRow: fileTypeRow morphUp: nil. self enableTypeButtons: fileTypeButtons info: fileTypeInfo forDir: newDir. ]. aFileList directory: aFileList directory. window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). window becomeModal. ^ window openInWorld: aWorld.! Item was changed: ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld:reallyLoad:dirFilterType: (in category 'blue ui') ----- morphicViewProjectLoader2InWorld: aWorld reallyLoad: aBoolean dirFilterType: aSymbol | window aFileList buttons treePane textColor1 fileListPane pane2a pane2b treeExtent filesExtent | window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: FileDirectory default. aFileList optionalButtonSpecs: aFileList servicesForProjectLoader; fileSelectionBlock: ( aSymbol == #limitedSuperSwikiDirectoryList ifTrue: [ MessageSend receiver: self selector: #projectOnlySelectionMethod: ] ifFalse: [ self projectOnlySelectionBlock ] ); "dirSelectionBlock: self hideSqueakletDirectoryBlock;" modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; + borderWidth: 1; + borderColor: (Color r: 0.9 g: 0.801 b: 0.2); - borderWidth: ColorTheme current dialogBorderWidth; - borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. + buttons := {{'OK'. Color lightGreen}. {'Cancel'. Color lightRed}} collect: [ :each | - buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each | self blueButtonText: each first textColor: textColor1 color: each second inWindow: window ]. aWorld width < 800 ifTrue: [ treeExtent := 150@300. filesExtent := 350@300. ] ifFalse: [ treeExtent := 250@300. filesExtent := 350@300. ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: aSymbol) extent: treeExtent; retractable: false; borderWidth: 0. fileListPane := aFileList morphicFileListPane extent: filesExtent; retractable: false; borderWidth: 0. window addARow: { window fancyText: 'Load A Project' translated font: Preferences standardEToysTitleFont color: textColor1 }; addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second }; addARow: { window fancyText: 'Please select a project' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { (window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; + borderWidth: 1; + borderColor: (Color r: 0.6 g: 0.7 b: 1) - borderWidth: ColorTheme current dialogPaneBorderWidth; - borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. (window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) useRoundedCorners; layoutInset: 0; + borderWidth: 1; + borderColor: (Color r: 0.6 g: 0.7 b: 1) - borderWidth: ColorTheme current dialogPaneBorderWidth; - borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. }. window fullBounds. + window fillWithRamp: (Color r: 1 g: 0.85 b: 0.975) oriented: 0.65. + pane2a fillWithRamp: (Color r: 0.85 g: 0.9 b: 1) oriented: (0.7 @ 0.35). + pane2b fillWithRamp: (Color r: 0.85 g: 0.9 b: 1) oriented: (0.7 @ 0.35). - window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. - pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). - pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " buttons first on: #mouseUp send: (aBoolean ifTrue: [#okHitForProjectLoader] ifFalse: [#okHit]) to: aFileList. buttons second on: #mouseUp send: #cancelHit to: aFileList. aFileList postOpen. window position: aWorld topLeft + (aWorld extent - window extent // 2). window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). window becomeModal. ^ window openInWorld: aWorld.! Item was changed: ----- Method: FileList2 class>>morphicViewProjectSaverFor: (in category 'blue ui') ----- morphicViewProjectSaverFor: aProject " (FileList2 morphicViewProjectSaverFor: Project current) openInWorld " | window aFileList buttons treePane pane2 textColor1 option treeExtent buttonData buttonRow | textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: ServerDirectory projectDefaultDirectory. aFileList dirSelectionBlock: self hideSqueakletDirectoryBlock. window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. aFileList modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; + borderWidth: 1; + borderColor: (Color r: 0.9 g: 0.801 b: 0.2); - borderWidth: ColorTheme current dialogBorderWidth; - borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttonData := Preferences enableLocalSave ifTrue: [{ + {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. Color lightGreen}. + {'Save on local disk only'. #saveLocalOnlyHit. 'saves in the Squeaklets folder'. Color lightGreen}. + {'Cancel'. #cancelHit. 'return without saving'. Color lightRed} - {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. - {'Save on local disk only'. #saveLocalOnlyHit. 'saves in the Squeaklets folder'. ColorTheme current okColor}. - {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }] ifFalse: [{ + {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. Color lightGreen}. + {'Cancel'. #cancelHit. 'return without saving'. Color lightRed} - {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. - {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }]. buttons := buttonData collect: [ :each | (self blueButtonText: each first textColor: textColor1 color: each fourth inWindow: window) setBalloonText: each third translated; hResizing: #shrinkWrap; on: #mouseUp send: each second to: aFileList ]. option := aProject world valueOfProperty: #SuperSwikiPublishOptions ifAbsent: [#initialDirectoryList]. aProject world removeProperty: #SuperSwikiPublishOptions. treeExtent := World height < 500 ifTrue: [ 350@150 ] ifFalse: [ 350@300 ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: option) extent: treeExtent; retractable: false; borderWidth: 0. window addARowCentered: { window fancyText: 'Publish This Project' translated font: Preferences standardEToysTitleFont color: textColor1 }. buttonRow := OrderedCollection new. buttons do: [:button | buttonRow add: button] separatedBy: [buttonRow add: ((Morph new extent: 30@5) color: Color transparent)]. " addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second. (Morph new extent: 30@5) color: Color transparent. buttons third };" window addARowCentered: buttonRow; addARowCentered: { (window inAColumn: {(ProjectViewMorph on: aProject) lock}) layoutInset: 4}; addARowCentered: { window fancyText: 'Please select a folder' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { ( window inAColumn: { (pane2 := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; + borderWidth: 1; + borderColor: (Color r: 0.6 g: 0.7 b: 1) - borderWidth: ColorTheme current dialogPaneBorderWidth; - borderColor: ColorTheme current dialogPaneBorderColor } ) layoutInset: 10 }. window fullBounds. + window fillWithRamp: (Color r: 1 g: 0.85 b: 0.975) oriented: 0.65. + pane2 fillWithRamp: (Color r: 0.85 g: 0.9 b: 1) oriented: (0.7 @ 0.35). - window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. - pane2 fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " window setProperty: #morphicLayerNumber toValue: 11. aFileList postOpen. window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). ^ window ! Item was changed: ----- Method: FileList2 class>>update:in:fileTypeRow:morphUp: (in category 'morphic ui') ----- update: actionRow in: window fileTypeRow: fileTypeRow morphUp: morph | fileTypeInfo info2 buttons textColor1 fileSuffixes fileActions aFileList fileTypeString | (morph notNil and:[(morph valueOfProperty: #enabled) not]) ifTrue: [^self]. fileTypeRow submorphsDo: [ :sub | sub color: ( sub == morph ifTrue: [Color white] ifFalse: [(sub valueOfProperty: #enabled) ifTrue: [Color transparent] ifFalse: [Color gray]] ). ]. fileTypeString := morph isNil ifTrue:['xxxx'] ifFalse:[morph valueOfProperty: #buttonText]. aFileList := window valueOfProperty: #FileList. textColor1 := Color r: 0.742 g: 0.839 b: 1.0. actionRow removeAllMorphs. fileTypeInfo := self endingSpecs. info2 := fileTypeInfo detect: [ :each | each first = fileTypeString] ifNone: [ nil ]. info2 isNil ifTrue:[ buttons := OrderedCollection new ] ifFalse:[ fileSuffixes := info2 second. fileActions := info2 third. buttons := fileActions collect: [ :each | aFileList blueButtonForService: each textColor: textColor1 inWindow: window ]. buttons do: [ :each | + each fillWithRamp: Color lightGreen oriented: (0.75 @ 0). - each fillWithRamp: ColorTheme current okColor oriented: (0.75 @ 0). ]. ]. buttons addLast: (self blueButtonText: 'Cancel' textColor: textColor1 + color: Color lightRed - color: ColorTheme current cancelColor inWindow: window balloonText: 'Cancel this search' selector: #cancelHit recipient: aFileList). buttons do: [ :each | actionRow addMorphBack: each]. window fullBounds. fileSuffixes isNil ifFalse:[ aFileList fileSelectionBlock: ( self selectionBlockForSuffixes: (fileSuffixes collect: [ :each | '*.',each]) ). ]. aFileList updateFileList.! Item was changed: ----- Method: FileList2>>blueButtonForService:textColor:inWindow: (in category 'user interface') ----- blueButtonForService: aService textColor: textColor inWindow: window | block result | block := [self fullName isNil ifTrue: [self inform: 'Please select a file' translated] ifFalse: [aService performServiceFor: self]]. result := window fancyText: aService buttonLabel capitalized translated font: Preferences standardEToysFont color: textColor. result setProperty: #buttonText toValue: aService buttonLabel capitalized; hResizing: #rigid; extent: 100 @ 20; layoutInset: 4; + borderWidth: 1; - borderWidth: ColorTheme current dialogButtonBorderWidth; useRoundedCorners; setBalloonText: aService label. result on: #mouseUp send: #value to: block. ^ result! From commits at source.squeak.org Wed Aug 24 08:53:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 08:53:26 2016 Subject: [squeak-dev] The Trunk: System-mt.908.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.908.mcz ==================== Summary ==================== Name: System-mt.908 Author: mt Time: 24 August 2016, 10:52:49.127003 am UUID: 3e3bb674-23f0-184e-80d2-0edf1a64492e Ancestors: System-mt.907 Deprecate ColorTheme. =============== Diff against System-mt.907 =============== Item was removed: - Object subclass: #ColorTheme - instanceVariableNames: '' - classVariableNames: 'Current' - poolDictionaries: '' - category: 'System-Support'! Item was removed: - ----- Method: ColorTheme class>>apply (in category 'applying') ----- - apply - ^self new apply! Item was removed: - ----- Method: ColorTheme class>>applyTheme: (in category 'applying') ----- - applyTheme: aThemeClass - aThemeClass new apply! Item was removed: - ----- Method: ColorTheme class>>current (in category 'accessing') ----- - current - ^ Current - ifNil: [self defaultTheme apply]! Item was removed: - ----- Method: ColorTheme class>>current: (in category 'accessing') ----- - current: aColorTheme - Current := aColorTheme! Item was removed: - ----- Method: ColorTheme class>>defaultTheme (in category 'accessing') ----- - defaultTheme - ^ self new.! Item was removed: - ----- Method: ColorTheme>>apply (in category 'applying') ----- - apply - "apply the receiver as the current theme" - BalloonMorph balloonColor: self balloonColor. - - Preferences setParameter: #defaultWorldColor to: self defaultWorldColor. - - Preferences insertionPointColor: self insertionPointColor. - Preferences keyboardFocusColor: self keyboardFocusColor. - Preferences textHighlightColor: self textHighlightColor. - - Preferences setParameter: #menuTitleColor to: self menuTitleColor. - Preferences setParameter: #menuTitleBorderColor to: self menuTitleBorderColor. - Preferences setParameter: #menuTitleBorderWidth to: self menuTitleBorderWidth. - Preferences setParameter: #menuColor to: self menuColor. - Preferences setParameter: #menuBorderColor to: self menuBorderColor. - Preferences setParameter: #menuLineColor to: self menuLineColor. - Preferences setParameter: #menuBorderWidth to: self menuBorderWidth. - Preferences setParameter: #menuSelectionColor to: self menuSelectionColor. - - SystemProgressMorph reset. - - self class current: self. - ! Item was removed: - ----- Method: ColorTheme>>balloonColor (in category 'theme') ----- - balloonColor - ^ TranslucentColor - r: 0.92 - g: 0.92 - b: 0.706 - alpha: 0.75! Item was removed: - ----- Method: ColorTheme>>cancelColor (in category 'theme') ----- - cancelColor - ^ Color lightRed! Item was removed: - ----- Method: ColorTheme>>defaultWorldColor (in category 'theme') ----- - defaultWorldColor - ^ Color blue muchLighter! Item was removed: - ----- Method: ColorTheme>>dialog3DTitles (in category 'theme - dialogs') ----- - dialog3DTitles - ^ true! Item was removed: - ----- Method: ColorTheme>>dialogBorderColor (in category 'theme - dialogs') ----- - dialogBorderColor - ^ Color fromArray: #(0.355 0.516 1.0 )! Item was removed: - ----- Method: ColorTheme>>dialogBorderWidth (in category 'theme - dialogs') ----- - dialogBorderWidth - ^ 4! Item was removed: - ----- Method: ColorTheme>>dialogButtonBorderWidth (in category 'theme - dialogs') ----- - dialogButtonBorderWidth - ^ 0! Item was removed: - ----- Method: ColorTheme>>dialogColor (in category 'theme - dialogs') ----- - dialogColor - ^ Color paleYellow! Item was removed: - ----- Method: ColorTheme>>dialogPaneBorderColor (in category 'theme - dialogs') ----- - dialogPaneBorderColor - ^ Color black - ! Item was removed: - ----- Method: ColorTheme>>dialogPaneBorderWidth (in category 'theme - dialogs') ----- - dialogPaneBorderWidth - ^ 0! Item was removed: - ----- Method: ColorTheme>>dialogPaneRampOrColor (in category 'theme - dialogs') ----- - dialogPaneRampOrColor - ^ {0.0 -> (Color r: 0.742 g: 0.871 b: 1.0). - 1.0 -> (Color r: 0.516 g: 0.645 b: 1.0)}! Item was removed: - ----- Method: ColorTheme>>dialogRampOrColor (in category 'theme - dialogs') ----- - dialogRampOrColor - ^ {0.0 -> (Color r: 0.516 g: 0.645 b: 1.0). - 1.0 -> (Color r: 0.742 g: 0.871 b: 1.0)}! Item was removed: - ----- Method: ColorTheme>>dialogTextBoxBorderColor (in category 'theme - dialogs') ----- - dialogTextBoxBorderColor - ^ Color black! Item was removed: - ----- Method: ColorTheme>>dialogTextBoxColor (in category 'theme - dialogs') ----- - dialogTextBoxColor - ^ Color white! Item was removed: - ----- Method: ColorTheme>>disabledColor (in category 'theme') ----- - disabledColor - ^ Color lightGray! Item was removed: - ----- Method: ColorTheme>>dockingBarAutoGradient (in category 'theme - dockingbar') ----- - dockingBarAutoGradient - ^ true! Item was removed: - ----- Method: ColorTheme>>dockingBarColor (in category 'theme - dockingbar') ----- - dockingBarColor - ^ Color r: 0.6 g: 0.7 b: 1! Item was removed: - ----- Method: ColorTheme>>dockingBarGradientRamp (in category 'theme - dockingbar') ----- - dockingBarGradientRamp - ^ { 0.0 -> Color white. - 1.0 -> (Color r: 0.6 g: 0.7 b: 1) }! Item was removed: - ----- Method: ColorTheme>>helpColor (in category 'theme') ----- - helpColor - ^ Color lightGreen! Item was removed: - ----- Method: ColorTheme>>insertionPointColor (in category 'theme') ----- - insertionPointColor - ^ Color red! Item was removed: - ----- Method: ColorTheme>>keyboardFocusColor (in category 'theme') ----- - keyboardFocusColor - ^ Color r: 0.6 g: 1 b: 1! Item was removed: - ----- Method: ColorTheme>>menuBorderColor (in category 'theme - menus') ----- - menuBorderColor - ^ Color r: 0.2 g: 0.3 b: 0.9! Item was removed: - ----- Method: ColorTheme>>menuBorderWidth (in category 'theme - menus') ----- - menuBorderWidth - ^ 2! Item was removed: - ----- Method: ColorTheme>>menuColor (in category 'theme - menus') ----- - menuColor - ^ Color r: 0.85 g: 0.9 b: 1! Item was removed: - ----- Method: ColorTheme>>menuLineColor (in category 'theme - menus') ----- - menuLineColor - ^ Color r: 0.6 g: 0.7 b: 1! Item was removed: - ----- Method: ColorTheme>>menuSelectionColor (in category 'theme - menus') ----- - menuSelectionColor - ^ Color r: 0.2 g: 0.3 b: 0.9! Item was removed: - ----- Method: ColorTheme>>menuTitleBorderColor (in category 'theme - menus') ----- - menuTitleBorderColor - ^ Color r: 0.6 g: 0.7 b: 1! Item was removed: - ----- Method: ColorTheme>>menuTitleBorderWidth (in category 'theme - menus') ----- - menuTitleBorderWidth - ^ 6! Item was removed: - ----- Method: ColorTheme>>menuTitleColor (in category 'theme - menus') ----- - menuTitleColor - ^ Color r: 0.6 g: 0.7 b: 1! Item was removed: - ----- Method: ColorTheme>>okColor (in category 'theme') ----- - okColor - ^ Color lightGreen! Item was removed: - ----- Method: ColorTheme>>textHighlightColor (in category 'theme') ----- - textHighlightColor - ^ Color blue muchLighter alpha: 0.7! From commits at source.squeak.org Wed Aug 24 08:54:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 08:54:09 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-mt.184.mcz Message-ID: Marcel Taeumel uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-mt.184.mcz ==================== Summary ==================== Name: MorphicExtras-mt.184 Author: mt Time: 24 August 2016, 10:53:41.897003 am UUID: 79677d6b-d106-2443-aa77-d7440477a793 Ancestors: MorphicExtras-mt.183 Remove use of ColorTheme. =============== Diff against MorphicExtras-mt.183 =============== Item was changed: ----- Method: AlignmentMorphBob1>>fancyText:font:color: (in category 'as yet unclassified') ----- fancyText: aString font: aFont color: aColor | answer tm col | + col := Preferences menuAppearance3d - col := ColorTheme current dialog3DTitles ifTrue: [aColor] ifFalse: [aColor negated]. tm := TextMorph new. tm beAllFont: aFont; color: col; contents: aString. answer := self inAColumn: {tm}. + Preferences menuAppearance3d - ColorTheme current dialog3DTitles ifTrue: ["" tm addDropShadow. tm shadowPoint: 5 @ 5 + tm bounds center]. tm lock. ^ answer! Item was changed: ----- Method: GeePrinterDialogMorph>>cancelButton (in category 'as yet unclassified') ----- cancelButton ^ self buttonNamed: 'Cancel' action: #doCancel + color: Color lightRed - color: ColorTheme current cancelColor help: 'Cancel this printing operation.'! Item was changed: ----- Method: Morph>>dismissButton (in category '*MorphicExtras-menus') ----- dismissButton "Answer a button whose action would be to dismiss the receiver, and whose action is to send #delete to the receiver" | aButton | aButton := SimpleButtonMorph new. aButton target: self topRendererOrSelf; + color: Color lightRed; + borderColor: Color lightRed muchDarker; - color: ColorTheme current cancelColor; - borderColor: ColorTheme current cancelColor muchDarker; borderWidth: 1; label: 'X' font: Preferences standardButtonFont; actionSelector: #delete; setBalloonText: 'dismiss' translated. ^ aButton! Item was changed: ----- Method: ObjectsTool>>initializeToStandAlone (in category 'initialization') ----- initializeToStandAlone "Initialize the receiver so that it can live as a stand-alone morph" | buttonPane aBin aColor heights tabsPane | self basicInitialize. self layoutInset: 0; layoutPolicy: ProportionalLayout new; useRoundedCorners; hResizing: #rigid; vResizing: #rigid; extent: (self minimumWidth @ self minimumHeight). "mode buttons" buttonPane := self paneForTabs: self modeTabs. + buttonPane color: (Color r: 1 g: 0.85 b: 0.975). - buttonPane color: ColorTheme current dialogColor. buttonPane vResizing: #shrinkWrap; setNameTo: 'ButtonPane'; addMorphFront: self dismissButton; addMorphBack: self helpButton; color: (aColor := buttonPane color) darker; layoutInset: 5; wrapDirection: nil; width: self width; layoutChanged; fullBounds. "Place holder for a tabs or text pane" tabsPane := Morph new. tabsPane + color: (Color r: 1 g: 0.85 b: 0.975); - color: ColorTheme current dialogColor; setNameTo: 'TabPane'; hResizing: #spaceFill. heights := { buttonPane height. 40 }. buttonPane vResizing: #spaceFill. self addMorph: buttonPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0 @ 0 corner: 0 @ heights first)). self addMorph: tabsPane fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0) offsets: (0 @ heights first corner: 0 @ (heights first + heights second))). aBin := (PartsBin newPartsBinWithOrientation: #leftToRight from: #()) listDirection: #leftToRight; wrapDirection: #topToBottom; color: aColor lighter lighter; setNameTo: 'Parts'; dropEnabled: false; vResizing: #spaceFill; yourself. self addMorph: aBin fullFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 1) offsets: (0 @ (heights first + heights second) corner: 0 @ 0)). self + borderWidth: 1; + borderColor: (Color r: 0.9 g: 0.801 b: 0.2); + color: (Color r: 1 g: 0.85 b: 0.975); - borderWidth: ColorTheme current dialogBorderWidth; - borderColor: ColorTheme current dialogBorderColor; - color: ColorTheme current dialogColor; setNameTo: 'Objects' translated; showCategories. ! Item was changed: ----- Method: ObjectsTool>>paneForTabs: (in category 'tabs') ----- paneForTabs: tabList "Answer a pane bearing tabs for the given list" | aPane | tabList do: [:t | t color: Color transparent. t borderWidth: 1; borderColor: Color black]. aPane := AlignmentMorph newRow + color: (Color r: 1 g: 0.85 b: 0.975); - color: ColorTheme current dialogColor; listDirection: #leftToRight; wrapDirection: #topToBottom; vResizing: #spaceFill; hResizing: #spaceFill; cellInset: 6; layoutInset: 4; listCentering: #center; listSpacing: #equal; addAllMorphs: tabList; yourself. aPane width: self layoutBounds width. ^ aPane! From commits at source.squeak.org Wed Aug 24 08:55:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 08:55:38 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1298.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1298.mcz ==================== Summary ==================== Name: Morphic-mt.1298 Author: mt Time: 24 August 2016, 10:54:46.509003 am UUID: b1016b43-3e51-5b49-a326-8ebf48b81e78 Ancestors: Morphic-mt.1297 Remove use of ColorTheme. =============== Diff against Morphic-mt.1297 =============== Item was changed: ----- Method: Morph>>helpButton (in category 'menus') ----- helpButton "Answer a button whose action would be to put up help concerning the receiver" | aButton | aButton := SimpleButtonMorph new. aButton target: self; + color: Color lightGreen; + borderColor: Color lightGreen muchDarker; - color: ColorTheme current helpColor; - borderColor: ColorTheme current helpColor muchDarker; borderWidth: 1; label: '?' translated font: Preferences standardButtonFont; actionSelector: #presentHelp; setBalloonText: 'click here for help' translated. ^ aButton! From commits at source.squeak.org Wed Aug 24 08:56:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 08:56:26 2016 Subject: [squeak-dev] The Trunk: EToys-mt.142.mcz Message-ID: Marcel Taeumel uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-mt.142.mcz ==================== Summary ==================== Name: EToys-mt.142 Author: mt Time: 24 August 2016, 10:55:37.986003 am UUID: 05513d21-7b60-f54e-b777-a7bcb48c305e Ancestors: EToys-pre.141 Remove use of ColorTheme. =============== Diff against EToys-pre.141 =============== Item was changed: ----- Method: EToyGenericDialogMorph>>defaultBorderColor (in category 'initialization') ----- defaultBorderColor "answer the default border color/fill style for the receiver" + ^ (Color r: 0.9 g: 0.801 b: 0.2)! - ^ ColorTheme current dialogBorderColor! Item was changed: ----- Method: EToyGenericDialogMorph>>defaultBorderWidth (in category 'initialization') ----- defaultBorderWidth "answer the default border width for the receiver" + ^ 2! - ^ ColorTheme current dialogBorderWidth! Item was changed: ----- Method: EToyGenericDialogMorph>>inAColumnForText: (in category 'as yet unclassified') ----- inAColumnForText: someMorphs ^ (self inAColumn: someMorphs) hResizing: #shrinkWrap; + color: (Color r: 0.85 g: 0.9 b: 1); + borderColor: (Color r: 0.6 g: 0.7 b: 1); + borderWidth: 1; - color: ColorTheme current dialogTextBoxColor; - borderColor: ColorTheme current dialogTextBoxBorderColor; - borderWidth: ColorTheme current dialogButtonBorderWidth; useRoundedCorners! Item was changed: ----- Method: EToyProjectRenamerMorph>>cancelButton (in category 'as yet unclassified') ----- cancelButton ^ self buttonNamed: 'Cancel' action: #doCancel + color: Color lightRed - color: ColorTheme current cancelColor help: 'Cancel this Publish operation.'! Item was changed: ----- Method: EToyProjectRenamerMorph>>defaultColor (in category 'initialization') ----- defaultColor "answer the default color/fill style for the receiver" + ^ (Color r: 1 g: 0.85 b: 0.975)! - ^ ColorTheme current dialogColor! Item was changed: ----- Method: EToyProjectRenamerMorph>>okButton (in category 'as yet unclassified') ----- okButton ^ self buttonNamed: 'OK' action: #doOK + color: Color lightGreen - color: ColorTheme current okColor help: 'Change my name and continue publishing.'! Item was changed: ----- Method: EtoyLoginMorph>>cancelButton (in category 'building') ----- cancelButton ^ self buttonNamed: 'Cancel' action: #doCancel + color: Color lightRed - color: ColorTheme current cancelColor help: 'Cancel this login operation.'! Item was changed: ----- Method: EtoyLoginMorph>>okButton (in category 'building') ----- okButton ^ self buttonNamed: 'OK' action: #doOK + color: Color lightGreen - color:ColorTheme current okColor help: 'Login into Squeak'! From commits at source.squeak.org Wed Aug 24 08:56:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 08:56:47 2016 Subject: [squeak-dev] The Trunk: 60Deprecated-mt.2.mcz Message-ID: Marcel Taeumel uploaded a new version of 60Deprecated to project The Trunk: http://source.squeak.org/trunk/60Deprecated-mt.2.mcz ==================== Summary ==================== Name: 60Deprecated-mt.2 Author: mt Time: 24 August 2016, 10:56:36.491003 am UUID: c81bd3c9-12fe-134d-ab3f-a442d7a01853 Ancestors: 60Deprecated-mt.1 Deprecate ColorTheme. =============== Diff against 60Deprecated-mt.1 =============== Item was added: + SystemOrganization addCategory: #'60Deprecated-System-Support'! Item was added: + Object subclass: #ColorTheme + instanceVariableNames: '' + classVariableNames: 'Current' + poolDictionaries: '' + category: '60Deprecated-System-Support'! Item was added: + ----- Method: ColorTheme class>>apply (in category 'applying') ----- + apply + ^self new apply! Item was added: + ----- Method: ColorTheme class>>applyTheme: (in category 'applying') ----- + applyTheme: aThemeClass + aThemeClass new apply! Item was added: + ----- Method: ColorTheme class>>current (in category 'accessing') ----- + current + ^ Current + ifNil: [self defaultTheme apply]! Item was added: + ----- Method: ColorTheme class>>current: (in category 'accessing') ----- + current: aColorTheme + Current := aColorTheme! Item was added: + ----- Method: ColorTheme class>>defaultTheme (in category 'accessing') ----- + defaultTheme + ^ self new.! Item was added: + ----- Method: ColorTheme>>apply (in category 'applying') ----- + apply + "apply the receiver as the current theme" + BalloonMorph balloonColor: self balloonColor. + + Preferences setParameter: #defaultWorldColor to: self defaultWorldColor. + + Preferences insertionPointColor: self insertionPointColor. + Preferences keyboardFocusColor: self keyboardFocusColor. + Preferences textHighlightColor: self textHighlightColor. + + Preferences setParameter: #menuTitleColor to: self menuTitleColor. + Preferences setParameter: #menuTitleBorderColor to: self menuTitleBorderColor. + Preferences setParameter: #menuTitleBorderWidth to: self menuTitleBorderWidth. + Preferences setParameter: #menuColor to: self menuColor. + Preferences setParameter: #menuBorderColor to: self menuBorderColor. + Preferences setParameter: #menuLineColor to: self menuLineColor. + Preferences setParameter: #menuBorderWidth to: self menuBorderWidth. + Preferences setParameter: #menuSelectionColor to: self menuSelectionColor. + + SystemProgressMorph reset. + + self class current: self. + ! Item was added: + ----- Method: ColorTheme>>balloonColor (in category 'theme') ----- + balloonColor + ^ TranslucentColor + r: 0.92 + g: 0.92 + b: 0.706 + alpha: 0.75! Item was added: + ----- Method: ColorTheme>>cancelColor (in category 'theme') ----- + cancelColor + ^ Color lightRed! Item was added: + ----- Method: ColorTheme>>defaultWorldColor (in category 'theme') ----- + defaultWorldColor + ^ Color blue muchLighter! Item was added: + ----- Method: ColorTheme>>dialog3DTitles (in category 'theme - dialogs') ----- + dialog3DTitles + ^ true! Item was added: + ----- Method: ColorTheme>>dialogBorderColor (in category 'theme - dialogs') ----- + dialogBorderColor + ^ Color fromArray: #(0.355 0.516 1.0 )! Item was added: + ----- Method: ColorTheme>>dialogBorderWidth (in category 'theme - dialogs') ----- + dialogBorderWidth + ^ 4! Item was added: + ----- Method: ColorTheme>>dialogButtonBorderWidth (in category 'theme - dialogs') ----- + dialogButtonBorderWidth + ^ 0! Item was added: + ----- Method: ColorTheme>>dialogColor (in category 'theme - dialogs') ----- + dialogColor + ^ Color paleYellow! Item was added: + ----- Method: ColorTheme>>dialogPaneBorderColor (in category 'theme - dialogs') ----- + dialogPaneBorderColor + ^ Color black + ! Item was added: + ----- Method: ColorTheme>>dialogPaneBorderWidth (in category 'theme - dialogs') ----- + dialogPaneBorderWidth + ^ 0! Item was added: + ----- Method: ColorTheme>>dialogPaneRampOrColor (in category 'theme - dialogs') ----- + dialogPaneRampOrColor + ^ {0.0 -> (Color r: 0.742 g: 0.871 b: 1.0). + 1.0 -> (Color r: 0.516 g: 0.645 b: 1.0)}! Item was added: + ----- Method: ColorTheme>>dialogRampOrColor (in category 'theme - dialogs') ----- + dialogRampOrColor + ^ {0.0 -> (Color r: 0.516 g: 0.645 b: 1.0). + 1.0 -> (Color r: 0.742 g: 0.871 b: 1.0)}! Item was added: + ----- Method: ColorTheme>>dialogTextBoxBorderColor (in category 'theme - dialogs') ----- + dialogTextBoxBorderColor + ^ Color black! Item was added: + ----- Method: ColorTheme>>dialogTextBoxColor (in category 'theme - dialogs') ----- + dialogTextBoxColor + ^ Color white! Item was added: + ----- Method: ColorTheme>>disabledColor (in category 'theme') ----- + disabledColor + ^ Color lightGray! Item was added: + ----- Method: ColorTheme>>dockingBarAutoGradient (in category 'theme - dockingbar') ----- + dockingBarAutoGradient + ^ true! Item was added: + ----- Method: ColorTheme>>dockingBarColor (in category 'theme - dockingbar') ----- + dockingBarColor + ^ Color r: 0.6 g: 0.7 b: 1! Item was added: + ----- Method: ColorTheme>>dockingBarGradientRamp (in category 'theme - dockingbar') ----- + dockingBarGradientRamp + ^ { 0.0 -> Color white. + 1.0 -> (Color r: 0.6 g: 0.7 b: 1) }! Item was added: + ----- Method: ColorTheme>>helpColor (in category 'theme') ----- + helpColor + ^ Color lightGreen! Item was added: + ----- Method: ColorTheme>>insertionPointColor (in category 'theme') ----- + insertionPointColor + ^ Color red! Item was added: + ----- Method: ColorTheme>>keyboardFocusColor (in category 'theme') ----- + keyboardFocusColor + ^ Color r: 0.6 g: 1 b: 1! Item was added: + ----- Method: ColorTheme>>menuBorderColor (in category 'theme - menus') ----- + menuBorderColor + ^ Color r: 0.2 g: 0.3 b: 0.9! Item was added: + ----- Method: ColorTheme>>menuBorderWidth (in category 'theme - menus') ----- + menuBorderWidth + ^ 2! Item was added: + ----- Method: ColorTheme>>menuColor (in category 'theme - menus') ----- + menuColor + ^ Color r: 0.85 g: 0.9 b: 1! Item was added: + ----- Method: ColorTheme>>menuLineColor (in category 'theme - menus') ----- + menuLineColor + ^ Color r: 0.6 g: 0.7 b: 1! Item was added: + ----- Method: ColorTheme>>menuSelectionColor (in category 'theme - menus') ----- + menuSelectionColor + ^ Color r: 0.2 g: 0.3 b: 0.9! Item was added: + ----- Method: ColorTheme>>menuTitleBorderColor (in category 'theme - menus') ----- + menuTitleBorderColor + ^ Color r: 0.6 g: 0.7 b: 1! Item was added: + ----- Method: ColorTheme>>menuTitleBorderWidth (in category 'theme - menus') ----- + menuTitleBorderWidth + ^ 6! Item was added: + ----- Method: ColorTheme>>menuTitleColor (in category 'theme - menus') ----- + menuTitleColor + ^ Color r: 0.6 g: 0.7 b: 1! Item was added: + ----- Method: ColorTheme>>okColor (in category 'theme') ----- + okColor + ^ Color lightGreen! Item was added: + ----- Method: ColorTheme>>textHighlightColor (in category 'theme') ----- + textHighlightColor + ^ Color blue muchLighter alpha: 0.7! From commits at source.squeak.org Wed Aug 24 08:59:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 08:59:42 2016 Subject: [squeak-dev] The Trunk: Squeak-Version-mt.4725.mcz Message-ID: Marcel Taeumel uploaded a new version of Squeak-Version to project The Trunk: http://source.squeak.org/trunk/Squeak-Version-mt.4725.mcz ==================== Summary ==================== Name: Squeak-Version-mt.4725 Author: mt Time: 24 August 2016, 10:59:33.537101 am UUID: 256a077d-992c-e247-92b9-99f6bb4fe299 Ancestors: Squeak-Version-mt.4716 Unload package 'SmallLand' because we have now UserInterfaceTheme instead of ColorTheme. =============== Diff against Squeak-Version-mt.4716 =============== Item was changed: + (PackageInfo named: 'Squeak-Version') postscript: '(MCPackage named: ''311Deprecated'') unload. + (MCPackage named: ''SmallLand'') unload.'! - (PackageInfo named: 'Squeak-Version') postscript: '(MCPackage named: ''311Deprecated'') unload.'! From edgardec2005 at gmail.com Wed Aug 24 10:28:52 2016 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Wed Aug 24 10:29:00 2016 Subject: [squeak-dev] Squeak 5.1 bugs Message-ID: > We are happy to announce the release of Squeak 5.1! > > Visit the Website [1], read the release notes in the image or outside [2], and > try it out for yourself [3][4]! > > Thank you all for the contributions! :-) > > Happy birthday Squeak! It has been (almost) 20 years!!! [5] > > Best, > Marcel > > [1] http://www.squeak.org/ > [2] > https://github.com/squeak-smalltalk/squeak-app/blob/master/release-notes/5.1 > [3] http://files.squeak.org/5.1/ > [4] http://try.squeak.org/ (to be updated soonish) > [5] http://files.squeak.org/docs/OOPSLA.Squeak.html > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: > http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160823/40 > 9d5f4b/attachment.htm I away of Squeak , but like people don't have negative experiencies. Command B on a class name do not more open a Browser on the selected class. If you try to do a new project , the debugger pops and you see: MessageNotUnderstood: UndefinedObject>>boundingBox 24 August 2016 6:12:55.014047 am VM: Mac OS - Smalltalk Image: Squeak5.1 [latest update: #16548] SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /Users/edgar/Documents/ElementsSqueak/Work/Squeak5.1-16548-32bit-All-in-One/ Squeak5.1-16548-32bit-All-in-One.app/Contents/Resources Trusted Dir /Users/edgar/Library/Application Support/Squeak/ Untrusted Dir /Users/edgar/Documents/Squeak/ UndefinedObject(Object)>>doesNotUnderstand: #boundingBox Receiver: nil Arguments and temporary variables: aMessage: boundingBox exception: MessageNotUnderstood: UndefinedObject>>boundingBox resumeValue: nil Receiver's instance variables: nil PaintBoxMorph class>>localeChanged Receiver: PaintBoxMorph Arguments and temporary variables: caption: Form(34x9x1) Receiver's instance variables: superclass: ImageMorph methodDict: a MethodDictionary(#action->(PaintBoxMorph>>#action "a CompiledMethod...etc... format: 65558 instanceVariables: #('action' 'tool' 'currentCursor' 'thumbnail' 'currentColor'...etc... organization: ('actions' action actionCursor brush:action:nib:evt: brushable clear:with:evt:...etc... subclasses: nil name: #PaintBoxMorph classPool: a Dictionary(#ColorChart->nil #ImageLibrary->nil #Prototype->nil #RecentColors...etc... sharedPools: nil environment: Smalltalk category: #'MorphicExtras-Support' [] in Locale class>>localeChanged Receiver: Locale Arguments and temporary variables: b: PaintBoxMorph Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#determineLocale->(Locale>>#determineLocale "a CompiledMethod...etc... format: 65548 instanceVariables: #('id' 'shortDate' 'longDate' 'time' 'decimalSymbol' 'digitG...etc... organization: ('accessing' determineLocale determineLocaleID iconForNativeLanguage...etc... subclasses: nil name: #Locale classPool: a Dictionary(#Current->a Locale(en) #CurrentPlatform->a Locale(en) #KnownLocales...etc... sharedPools: nil environment: Smalltalk category: #'System-Localization' [] in SystemNavigation>>allBehaviorsDo: Receiver: a SystemNavigation Arguments and temporary variables: aBlock: PaintBoxMorph class: [closure] in Locale class>>localeChanged Receiver's instance variables: browserClass: Browser hierarchyBrowserClass: nil environment: Smalltalk [] in Environment>>allClassesAndTraitsDo: Receiver: Smalltalk Arguments and temporary variables: aBlock: #PaintBoxMorph key: PaintBoxMorph value: [closure] in SystemNavigation>>allBehaviorsDo: Receiver's instance variables: info: SmalltalkInfo declarations: an IdentityDictionary(size 2449) bindings: an IdentityDictionary(size 2449) undeclared: an IdentityDictionary(#MagmaUserError->nil #semaphore->nil ) policies: {a BindingPolicy} observers: an IdentitySet() [] in IdentityDictionary(Dictionary)>>keysAndValuesDo: Receiver: an IdentityDictionary(size 2449) Arguments and temporary variables: aBlock: #PaintBoxMorph=>PaintBoxMorph assoc: [closure] in Environment>>allClassesAndTraitsDo: Receiver's instance variables: tally: 2449 array: {#SystemVersionTest=>SystemVersionTest . #MCAddition=>MCAddition . #BalloonEngineConstants...etc... IdentityDictionary(Dictionary)>>associationsDo: Receiver: an IdentityDictionary(size 2449) Arguments and temporary variables: aBlock: [closure] in IdentityDictionary(Dictionary)>>keysAndValuesDo: element: #PaintBoxMorph=>PaintBoxMorph index: 1551 indexLimiT: 4787 Receiver's instance variables: tally: 2449 array: {#SystemVersionTest=>SystemVersionTest . #MCAddition=>MCAddition . #BalloonEngineConstants...etc... IdentityDictionary(Dictionary)>>keysAndValuesDo: Receiver: an IdentityDictionary(size 2449) Arguments and temporary variables: aBlock: [closure] in Environment>>allClassesAndTraitsDo: Receiver's instance variables: tally: 2449 array: {#SystemVersionTest=>SystemVersionTest . #MCAddition=>MCAddition . #BalloonEngineConstants...etc... Environment>>allClassesAndTraitsDo: Receiver: Smalltalk Arguments and temporary variables: aBlock: [closure] in SystemNavigation>>allBehaviorsDo: Receiver's instance variables: info: SmalltalkInfo declarations: an IdentityDictionary(size 2449) bindings: an IdentityDictionary(size 2449) undeclared: an IdentityDictionary(#MagmaUserError->nil #semaphore->nil ) policies: {a BindingPolicy} observers: an IdentitySet() SystemNavigation>>allBehaviorsDo: Receiver: a SystemNavigation Arguments and temporary variables: aBlock: [closure] in Locale class>>localeChanged Receiver's instance variables: browserClass: Browser hierarchyBrowserClass: nil environment: Smalltalk Locale class>>localeChanged Receiver: Locale Arguments and temporary variables: Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#determineLocale->(Locale>>#determineLocale "a CompiledMethod...etc... format: 65548 instanceVariables: #('id' 'shortDate' 'longDate' 'time' 'decimalSymbol' 'digitG...etc... organization: ('accessing' determineLocale determineLocaleID iconForNativeLanguage...etc... subclasses: nil name: #Locale classPool: a Dictionary(#Current->a Locale(en) #CurrentPlatform->a Locale(en) #KnownLocales...etc... sharedPools: nil environment: Smalltalk category: #'System-Localization' Locale class>>switchTo:gently: Receiver: Locale Arguments and temporary variables: locale: a Locale(en-English) gentlyFlag: false availableID: en Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#determineLocale->(Locale>>#determineLocale "a CompiledMethod...etc... format: 65548 instanceVariables: #('id' 'shortDate' 'longDate' 'time' 'decimalSymbol' 'digitG...etc... organization: ('accessing' determineLocale determineLocaleID iconForNativeLanguage...etc... subclasses: nil name: #Locale classPool: a Dictionary(#Current->a Locale(en) #CurrentPlatform->a Locale(en) #KnownLocales...etc... sharedPools: nil environment: Smalltalk category: #'System-Localization' Locale class>>switchTo: Receiver: Locale Arguments and temporary variables: locale: a Locale(en-English) Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#determineLocale->(Locale>>#determineLocale "a CompiledMethod...etc... format: 65548 instanceVariables: #('id' 'shortDate' 'longDate' 'time' 'decimalSymbol' 'digitG...etc... organization: ('accessing' determineLocale determineLocaleID iconForNativeLanguage...etc... subclasses: nil name: #Locale classPool: a Dictionary(#Current->a Locale(en) #CurrentPlatform->a Locale(en) #KnownLocales...etc... sharedPools: nil environment: Smalltalk category: #'System-Localization' Locale class>>switchToID: Receiver: Locale Arguments and temporary variables: localeID: en-English Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#determineLocale->(Locale>>#determineLocale "a CompiledMethod...etc... format: 65548 instanceVariables: #('id' 'shortDate' 'longDate' 'time' 'decimalSymbol' 'digitG...etc... organization: ('accessing' determineLocale determineLocaleID iconForNativeLanguage...etc... subclasses: nil name: #Locale classPool: a Dictionary(#Current->a Locale(en) #CurrentPlatform->a Locale(en) #KnownLocales...etc... sharedPools: nil environment: Smalltalk category: #'System-Localization' MorphicProject>>initialize Receiver: a MorphicProject (Unnamed) in a PasteUpMorph(3000849) [world] Arguments and temporary variables: Receiver's instance variables: dependents: nil world: a PasteUpMorph(3000849) [world] uiManager: nil changeSet: a ChangeSet named Unnamed transcript: a TranscriptStream parentProject: a MorphicProject (Unnamed1) in a PasteUpMorph(2434915) [world] previousProject: nil displayDepth: 32 viewSize: nil thumbnail: nil nextProject: nil projectParameters: an IdentityDictionary(#disabledGlobalFlapIDs->a Set('Paintin...etc... version: nil urlList: nil environment: nil lastDirectory: nil lastSavedAtSeconds: nil projectPreferenceFlagDictionary: an IdentityDictionary(#showSharedFlaps->true #showWorldMainDockingBar...etc... resourceManager: nil uiProcess: nil MorphicProject class(Behavior)>>new Receiver: MorphicProject Arguments and temporary variables: Receiver's instance variables: superclass: Project methodDict: a MethodDictionary(#addDeferredUIMessage:->(MorphicProject>>#addDef...etc... format: 65556 instanceVariables: #('uiProcess') organization: ('scheduling' addDeferredUIMessage: interruptName:) ('display' invalidate...etc... subclasses: nil name: #MorphicProject classPool: a Dictionary(#DefaultFill->a SolidFillStyle(Color darkGray) ) sharedPools: nil environment: Smalltalk category: #'Morphic-Support' TheWorldMainDockingBar>>newProject: Receiver: a TheWorldMainDockingBar Arguments and temporary variables: projectClass: MorphicProject newProject: nil Receiver's instance variables: a TheWorldMainDockingBar [] in MenuItemMorph>>invokeWithEvent: Receiver: a MenuItemMorph(2230243)'New MorphicProject' Arguments and temporary variables: < Receiver's instance variables: bounds: 177@36 corner: 302@50 owner: an UpdatingMenuMorph(845506) submorphs: #() fullBounds: 177@36 corner: 302@50 color: (Color r: 0.764 g: 0.776 b: 0.768) extension: a MorphExtension (550378) [balloonText] [other: (layoutProperties ...etc... font: a StrikeFont(Bitmap DejaVu Sans 9 14) emphasis: 0 contents: 'New MorphicProject' hasFocus: false isEnabled: true subMenu: nil isSelected: false target: a TheWorldMainDockingBar selector: #newProject: arguments: {MorphicProject} icon: nil BlockClosure>>ensure: Receiver: [closure] in MenuItemMorph>>invokeWithEvent: Arguments and temporary variables: aBlock: [closure] in CursorWithMask(Cursor)>>showWhile: complete: nil returnValue: nil Receiver's instance variables: outerContext: MenuItemMorph>>invokeWithEvent: startpc: 152 numArgs: 0 --- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #boundingBox PaintBoxMorph class>>localeChanged [] in Locale class>>localeChanged [] in SystemNavigation>>allBehaviorsDo: [] in Environment>>allClassesAndTraitsDo: [] in IdentityDictionary(Dictionary)>>keysAndValuesDo: IdentityDictionary(Dictionary)>>associationsDo: IdentityDictionary(Dictionary)>>keysAndValuesDo: Environment>>allClassesAndTraitsDo: SystemNavigation>>allBehaviorsDo: Locale class>>localeChanged Locale class>>switchTo:gently: Locale class>>switchTo: Locale class>>switchToID: MorphicProject>>initialize MorphicProject class(Behavior)>>new TheWorldMainDockingBar>>newProject: [] in MenuItemMorph>>invokeWithEvent: BlockClosure>>ensure: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CursorWithMask(Cursor)>>showWhile: MenuItemMorph>>invokeWithEvent: MenuItemMorph>>mouseUp: MenuItemMorph>>handleMouseUp: MouseButtonEvent>>sentTo: MenuItemMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: MenuItemMorph(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: UpdatingMenuMorph(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>dispatchEvent:with: UpdatingMenuMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>doProcessingForFocusEvent:with: MorphicEventDispatcher>>dispatchFocusEventFully:with: UpdatingMenuMorph(MenuMorph)>>processFocusEvent:using: UpdatingMenuMorph(Morph)>>processFocusEvent: [] in [] in [] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>ensure: MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: [] in [] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>ensure: HandMorph>>becomeActiveDuring: [] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>ensure: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle -- and more not shown -- Lucky us the cure is simple. All you need is type PaintBoxMorph colorChar in a Workspace and presto. I try to follow Chris Muller how to export and import old projects > Hi Eliot, the Ma Serializer has been able to serialize Squeak projects > since the 3.x days. > > Load the (head) version of "MaBase" from SqueakMap. Then: > > MaObjectSerializer new > fileOut: yourProject > toFileNamed: fileNameString > in: someFileDirectory > > You can then file it in using: > > MaObjectSerializer fileIn: (someFileDirectory entryAt: fileNameString) > > If you look at MaObjectSerializer>>#setUpPreAndPostProcessing, you can > see I have pre/post hooks for saving instances of Projects. I have > not tested it in a while, but I know it DID work... > > HTH. ? Still no luck, but keep trying for made FunSqueak 5.1 Congrats for good work to all people and still I have hope on Squeak Edgar @morplenauta From leves at caesar.elte.hu Wed Aug 24 10:29:50 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 24 10:29:53 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: On Wed, 24 Aug 2016, Ben Coman wrote: > On Wed, Aug 24, 2016 at 2:34 AM, Levente Uzonyi wrote: >> You have to #yield explicitly if you want your process to be preempted. >> Otherwise, processes with the same or lower priority will never run. > > Just to be pedantic ;) IIUC... #yield does not allow lower priority > processes to run. For that you need to #wait, #suspend or be waiting > on a #critical: etc. That's correct. Levente > > cheers -ben > >> It's not a Semaphore change, but a VM setting. >> >> Levente >> >> >> On Tue, 23 Aug 2016, Ben Coman wrote: >> >>> On Tue, Aug 23, 2016 at 5:26 PM, marcel.taeumel >>> wrote: >>>> >>>> Chris Muller-3 wrote >>>>> >>>>> Morphic is designed to run in one Process, so you shouldn't need any >>>>> multi-process coordination because you should only be doing drawing in >>>>> the UI process. Right? >>>>> >>>>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >>>> >>>> >>>>> marcel.taeumel@ >>>> >>>> >>>>> > wrote: >>>>>> >>>>>> Hi, there. >>>>>> >>>>>> Take this Morph here: >>>>>> >>>>>> initialize >>>>>> super initialize. >>>>>> semaphore := Semaphore forMutualExclusion. >>>>>> >>>>>> step >>>>>> semaphore critical: [ [] repeat ]. >>>>>> >>>>>> drawOn: aCanvas >>>>>> semaphore critical: [super drawOn: aCanvas]. >>>>>> >>>>>> If you create such a morph and open it in the world, the UI process >>>>>> will >>>>>> freeze because of that endless loop in the step method. Okay. The >>>>>> tricky >>>>>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>>>>> for >>>>>> the same semaphore that is currently used in the morph's step. You will >>>>>> not >>>>>> see a debugger appear. The freshly spawned UI process will block right >>>>>> awai. >>>>>> The well known big red cross/box does not appear because there is no >>>>>> place >>>>>> to detect this situation. >>>>>> >>>>>> An easy fix would be to tell the application developer to use >>>>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>>>> necessary. >>>>>> >>>>>> However, can there be a way for Morphic to detect such issues and flag >>>>>> that >>>>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>>>> toValue: >>>>>> true") Could there be a notification for the Morphic framework to look >>>>>> out >>>>>> for such as WaitOnCriticalSection to flag that morph as bad? Could that >>>>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>>>> >>>>>> If yes, Morphic could draw its world like this (pseudo code!): >>>>>> ... >>>>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>>>> true.] >>>>>> ... >>>>>> >>>>>> Morphic would be more robust. >>>>>> >>>>>> Best, >>>>>> Marcel >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>> >>>> Hi Chris, hi Bert, >>>> >>>> if you need an example, well, Etoys/Kedama makes those things in the >>>> latest >>>> Trunk version. ;-) >>>> >>>> It is not the point whether applications should do this or not but our >>>> recently changed semantics of semaphores might render your image unusable >>>> because of unusual application code. >>> >>> >>> I'm curious what was the change in Semaphore semantics? >>> >>> cheers -ben >>> >>>> I see an opportunity to improve >>>> Morphics robustness and help users debug their applications without image >>>> freeze/lock out. >>>> >>>> So, I want to discuss here, whether there could be a Notification sent >>>> whenever an object/process starts waiting on a semaphore. :-) >>> >>> >>> >> > > From bert at freudenbergs.de Wed Aug 24 10:43:46 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Aug 24 10:43:50 2016 Subject: [squeak-dev] [5.1] DataStream bug (MessageNotUnderstood: UndefinedObject>>instSize) Message-ID: Skipped content of type multipart/alternative-------------- next part -------------- A non-text attachment was scrubbed... Name: SqueakDebug.log Type: application/octet-stream Size: 9214 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/6ebf67c4/SqueakDebug.obj From bert at freudenbergs.de Wed Aug 24 10:51:57 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Aug 24 10:52:00 2016 Subject: [squeak-dev] Loading trunk updates in 5.1 Message-ID: ... shows lots of merge dialogs. We need to merge the 5.1 specific versions back into trunk, I guess? - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/e3f2353a/attachment.htm From bert at freudenbergs.de Wed Aug 24 11:02:30 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Aug 24 11:02:33 2016 Subject: [squeak-dev] Monticello broken (was: [5.1] DataStream bug) Message-ID: This happens for me on every MC operation, when it is trying to store a local copy in the package cache. The files get written but are 0 bytes (probably due to aborting the dialog). Later this results in a broken ZIP error (EOCD not found). - Bert - On Wed, Aug 24, 2016 at 12:43 PM, Bert Freudenberg wrote: > This appears to happen a lot in 5.1, e.g. the first time you compare a > package in Monticello: > > UndefinedObject(Object)>>doesNotUnderstand: #instSize > nil(Object)>>storeDataOn: > DataStream>>writeInstance: > DataStream>>nextPut: > > Anybody else seeing it? > > - Bert - > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/fb9e5045/attachment.htm From leves at caesar.elte.hu Wed Aug 24 11:06:32 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 24 11:06:35 2016 Subject: [squeak-dev] Monticello broken (was: [5.1] DataStream bug) In-Reply-To: References: Message-ID: A few years ago there was a VM bug causing this. Which VM do you use? Levente On Wed, 24 Aug 2016, Bert Freudenberg wrote: > This happens for me on every MC operation, when it is trying to store a local copy in the package cache. The files get written but are 0 bytes (probably due to aborting the dialog). Later this results in a > broken ZIP error (EOCD not found). > - Bert - > > On Wed, Aug 24, 2016 at 12:43 PM, Bert Freudenberg wrote: > This appears to happen a lot in 5.1, e.g. the first time you compare a package in Monticello: > UndefinedObject(Object)>>doesNotUnderstand: #instSize > nil(Object)>>storeDataOn: > DataStream>>writeInstance: > DataStream>>nextPut: > > Anybody else seeing it? > > - Bert - > > > > From bert at freudenbergs.de Wed Aug 24 11:09:29 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Aug 24 11:09:32 2016 Subject: [squeak-dev] Monticello broken (was: [5.1] DataStream bug) In-Reply-To: References: Message-ID: 5 class ==> nil That's the problem. WTF? Happens on multiple VMs I tried. - Bert - On Wed, Aug 24, 2016 at 1:06 PM, Levente Uzonyi wrote: > A few years ago there was a VM bug causing this. Which VM do you use? > > Levente > > > On Wed, 24 Aug 2016, Bert Freudenberg wrote: > > This happens for me on every MC operation, when it is trying to store a >> local copy in the package cache. The files get written but are 0 bytes >> (probably due to aborting the dialog). Later this results in a >> broken ZIP error (EOCD not found). >> - Bert - >> >> On Wed, Aug 24, 2016 at 12:43 PM, Bert Freudenberg >> wrote: >> This appears to happen a lot in 5.1, e.g. the first time you >> compare a package in Monticello: >> UndefinedObject(Object)>>doesNotUnderstand: #instSize >> nil(Object)>>storeDataOn: >> DataStream>>writeInstance: >> DataStream>>nextPut: >> >> Anybody else seeing it? >> >> - Bert - >> >> >> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/ea40da60/attachment.htm From bert at freudenbergs.de Wed Aug 24 11:13:00 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Aug 24 11:13:02 2016 Subject: [solved] Re: [squeak-dev] Monticello broken (was: [5.1] DataStream bug) Message-ID: Okay, must be a problem in my image. I downloaded a fresh 5.1 and it's okay there. - Bert - On Wed, Aug 24, 2016 at 1:09 PM, Bert Freudenberg wrote: > 5 class > ==> nil > > That's the problem. WTF? Happens on multiple VMs I tried. > > - Bert - > > On Wed, Aug 24, 2016 at 1:06 PM, Levente Uzonyi > wrote: > >> A few years ago there was a VM bug causing this. Which VM do you use? >> >> Levente >> >> >> On Wed, 24 Aug 2016, Bert Freudenberg wrote: >> >> This happens for me on every MC operation, when it is trying to store a >>> local copy in the package cache. The files get written but are 0 bytes >>> (probably due to aborting the dialog). Later this results in a >>> broken ZIP error (EOCD not found). >>> - Bert - >>> >>> On Wed, Aug 24, 2016 at 12:43 PM, Bert Freudenberg >>> wrote: >>> This appears to happen a lot in 5.1, e.g. the first time you >>> compare a package in Monticello: >>> UndefinedObject(Object)>>doesNotUnderstand: #instSize >>> nil(Object)>>storeDataOn: >>> DataStream>>writeInstance: >>> DataStream>>nextPut: >>> >>> Anybody else seeing it? >>> >>> - Bert - >>> >>> >>> >>> >>> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/12e75cc1/attachment.htm From leves at caesar.elte.hu Wed Aug 24 11:14:47 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 24 11:14:50 2016 Subject: [squeak-dev] Monticello broken (was: [5.1] DataStream bug) In-Reply-To: References: Message-ID: Doesn't happen here on cogspur64linuxht 5.0-201607150008. Levente On Wed, 24 Aug 2016, Bert Freudenberg wrote: > 5 class > ==> nil > > That's the problem. WTF? Happens on multiple VMs I tried. > > - Bert - > > On Wed, Aug 24, 2016 at 1:06 PM, Levente Uzonyi wrote: > A few years ago there was a VM bug causing this. Which VM do you use? > > Levente > > On Wed, 24 Aug 2016, Bert Freudenberg wrote: > > This happens for me on every MC operation, when it is trying to store a local copy in the package cache. The files get written but are 0 bytes (probably due to aborting the dialog). > Later this results in a > broken ZIP error (EOCD not found). > - Bert - > > On Wed, Aug 24, 2016 at 12:43 PM, Bert Freudenberg wrote: > ? ? ? This appears to happen a lot in 5.1, e.g. the first time you compare a package in Monticello: > UndefinedObject(Object)>>doesNotUnderstand: #instSize > nil(Object)>>storeDataOn: > DataStream>>writeInstance: > DataStream>>nextPut: > > Anybody else seeing it? > > - Bert - > > > > > > > > From Marcel.Taeumel at hpi.de Wed Aug 24 11:25:06 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 11:26:37 2016 Subject: [squeak-dev] Re: Loading trunk updates in 5.1 In-Reply-To: References: Message-ID: <1472037906394-4912473.post@n4.nabble.com> Bert Freudenberg wrote > ... shows lots of merge dialogs. We need to merge the 5.1 specific > versions > back into trunk, I guess? > > - Bert - I did copy some MCZ but made some other changes twice. No need to copy MCZ at the moment. All changes in 5.1 are already in trunk. If in doubt, hit "accept". Best, marcel -- View this message in context: http://forum.world.st/Loading-trunk-updates-in-5-1-tp4912465p4912473.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Aug 24 11:33:44 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 11:35:16 2016 Subject: [squeak-dev] Struggling with Update Maps Message-ID: <1472038424359-4912474.post@n4.nabble.com> Hey, there. "update-mt.389.mcm" removes "311Deprecated". "update-mt.390.mcm" removes "SmallLand". This seems to work fine in a foreign, updated image. In the the that created those update maps, however, those packages seem to return on update. :-/ I suspect that there is some kind of bug when processing the update maps... Best, Marcel -- View this message in context: http://forum.world.st/Struggling-with-Update-Maps-tp4912474.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 24 11:43:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 11:43:15 2016 Subject: [squeak-dev] The Trunk: Tools-mt.723.mcz Message-ID: Marcel Taeumel uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-mt.723.mcz ==================== Summary ==================== Name: Tools-mt.723 Author: mt Time: 24 August 2016, 1:42:52.759718 pm UUID: c4e682b7-40df-cb44-935c-ff41fb24046f Ancestors: Tools-mt.722 Simple MVC update to use UI theme colors for menus. =============== Diff against Tools-mt.722 =============== Item was changed: ----- Method: PopUpMenu>>computeForm (in category 'private') ----- computeForm "Compute and answer a Form to be displayed for this menu." | borderInset paraForm menuForm inside | borderInset := 4@4. + paraForm := ((DisplayText text: labelString asText textStyle: MenuStyle) + foregroundColor: (self userInterfaceTheme textColor ifNil: [Color black]) + backgroundColor: (self userInterfaceTheme color ifNil: [Color white])) form. - paraForm := (DisplayText text: labelString asText textStyle: MenuStyle) form. menuForm := Form extent: paraForm extent + (borderInset * 2) depth: paraForm depth. menuForm fill: (0 @ 0 extent: menuForm extent) rule: Form over + fillColor: (self userInterfaceTheme color ifNil: [Color white]). + menuForm + border: menuForm boundingBox + width: 2 + fillColor: (self userInterfaceTheme borderColor ifNil: [Color black]). + - fillColor: Color white. - menuForm borderWidth: 2. paraForm displayOn: menuForm at: borderInset. lineArray == nil ifFalse: [lineArray do: [ :line | + menuForm + fill: (4 @ ((line * font height) + borderInset y) + extent: (menuForm width - 8 @ 1)) + rule: Form over + fillColor: (self userInterfaceTheme lineColor ifNil: [Color black])]]. - menuForm fillBlack: (4 @ ((line * font height) + borderInset y) - extent: (menuForm width - 8 @ 1))]]. frame := Quadrangle new. frame region: menuForm boundingBox. frame borderWidth: 4. inside := frame inside. marker := inside topLeft extent: (inside width @ MenuStyle lineGrid). selection := 1. ^ form := menuForm ! Item was changed: ----- Method: PopUpMenu>>displayAt:withCaption:during: (in category 'displaying') ----- displayAt: aPoint withCaption: captionOrNil during: aBlock "Display the receiver just to the right of aPoint while aBlock is evaluated. If the receiver is forced off screen, display it just to the right." | delta savedArea captionForm captionSave outerFrame captionText tFrame frameSaveLoc captionBox | marker ifNil: [self computeForm]. frame := frame align: marker leftCenter with: aPoint + (2@0). outerFrame := frame. captionOrNil notNil ifTrue: [captionText := (DisplayText text: captionOrNil asText textStyle: MenuStyle copy centered) + foregroundColor: (self userInterfaceTheme textColor ifNil: [Color black]) + backgroundColor: (self userInterfaceTheme color ifNil: [Color white]). - foregroundColor: Color black - backgroundColor: Color white. tFrame := captionText boundingBox insetBy: -2. outerFrame := frame merge: (tFrame align: tFrame bottomCenter with: frame topCenter + (0@2))]. delta := outerFrame amountToTranslateWithin: Display boundingBox. frame right > Display boundingBox right ifTrue: [delta := 0 - frame width @ delta y]. frame := frame translateBy: delta. captionOrNil notNil ifTrue: [captionForm := captionText form. captionBox := captionForm boundingBox expandBy: 4. captionBox := captionBox align: captionBox bottomCenter with: frame topCenter + (0@2). captionSave := Form fromDisplay: captionBox. + Display border: captionBox width: 4 fillColor: (self userInterfaceTheme color ifNil: [Color white]). + Display border: captionBox width: 2 fillColor: (self userInterfaceTheme textColor ifNil: [Color black]). - Display border: captionBox width: 4 fillColor: Color white. - Display border: captionBox width: 2 fillColor: Color black. captionForm displayAt: captionBox topLeft + 4]. marker := marker align: marker leftCenter with: aPoint + delta + (2@0). savedArea := Form fromDisplay: frame. self menuForm displayOn: Display at: (frameSaveLoc := frame topLeft). selection ~= 0 ifTrue: [Display reverse: marker]. Cursor normal showWhile: aBlock. savedArea displayOn: Display at: frameSaveLoc. captionOrNil notNil ifTrue: [captionSave displayOn: Display at: captionBox topLeft]! From commits at source.squeak.org Wed Aug 24 11:44:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 11:44:04 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-MVC-mt.47.mcz Message-ID: Marcel Taeumel uploaded a new version of ToolBuilder-MVC to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-MVC-mt.47.mcz ==================== Summary ==================== Name: ToolBuilder-MVC-mt.47 Author: mt Time: 24 August 2016, 1:43:54.539718 pm UUID: 3631ae7d-063c-f649-acbd-4e5a455f3d7c Ancestors: ToolBuilder-MVC-mt.46 Fixes drawing bug in panels and spacers in MVC. =============== Diff against ToolBuilder-MVC-mt.46 =============== Item was changed: ----- Method: MVCToolBuilder>>buildPluggablePanel: (in category 'widgets required') ----- buildPluggablePanel: aSpec | widget children | widget := View new model: aSpec model. + widget + borderWidth: 1; + backgroundColor: nil; + foregroundColor: nil. + - widget borderWidth: 1. self register: widget id: aSpec name. children := aSpec children. children isSymbol ifTrue:[ "@@@@ FIXME: PluggablePanes need to remember their getChildrenSelector" "widget getChildrenSelector: children. widget update: children." children := #(). ]. self setFrame: aSpec frame in: widget. self buildAll: children in: widget. parent ifNotNil:[parent addSubView: widget]. self setLayout: aSpec layout in: widget. ^widget! Item was changed: ----- Method: MVCToolBuilder>>buildPluggableSpacer: (in category 'widgets required') ----- buildPluggableSpacer: aSpec | widget | widget := View new. self register: widget id: aSpec name. widget borderWidth: 0. + widget backgroundColor: nil. + widget foregroundColor: nil. - widget backgroundColor: (aSpec color ifNil: [Color transparent]). widget window: (widget window topLeft extent: aSpec extent). self setFrame: aSpec frame in: widget. parent ifNotNil:[parent addSubView: widget]. ^widget! From commits at source.squeak.org Wed Aug 24 11:45:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 11:45:48 2016 Subject: [squeak-dev] The Trunk: ST80-mt.218.mcz Message-ID: Marcel Taeumel uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-mt.218.mcz ==================== Summary ==================== Name: ST80-mt.218 Author: mt Time: 24 August 2016, 1:45:33.502718 pm UUID: 847f8a18-1aca-8940-871d-6d83553b92f7 Ancestors: ST80-mt.217 Simple MVC update to use UI theme colors for buttons, text fields, lists, and windows. =============== Diff against ST80-mt.217 =============== Item was changed: ----- Method: PluggableButtonView>>label: (in category 'accessing') ----- label: aStringOrDisplayObject "Label this button with the given String or DisplayObject." + | fontToUse | + fontToUse := self userInterfaceTheme font ifNil: [TextStyle defaultFont]. ((aStringOrDisplayObject isKindOf: Paragraph) or: [aStringOrDisplayObject isForm]) ifTrue: [label := aStringOrDisplayObject] + ifFalse: [label := (Paragraph withText: (aStringOrDisplayObject asText + addAttribute: (TextFontReference toFont: fontToUse)))]. - ifFalse: [label := aStringOrDisplayObject asParagraph]. self centerLabel. ! Item was added: + ----- Method: StandardSystemView>>defaultBackgroundColor (in category 'initialize-release') ----- + defaultBackgroundColor + + ^ model + ifNil: [Color white] + ifNotNil: [:m | m windowColorToUse]! Item was added: + ----- Method: StandardSystemView>>defaultForegroundColor (in category 'initialize-release') ----- + defaultForegroundColor + + ^ (self userInterfaceTheme borderColorModifier ifNil: [ [:c | c adjustBrightness: -0.5] ]) value: self defaultBackgroundColor! Item was removed: - ----- Method: StandardSystemView>>model: (in category 'initialize-release') ----- - model: aModel - "Set the receiver's model. For a Standard System View, we also at this time get the default background color set up. 7/30/96 sw" - super model: aModel. - self setDefaultBackgroundColor! Item was added: + ----- Method: View>>defaultBackgroundColor (in category 'initialize-release') ----- + defaultBackgroundColor + + ^ self userInterfaceTheme color! Item was added: + ----- Method: View>>defaultForegroundColor (in category 'initialize-release') ----- + defaultForegroundColor + + ^ self userInterfaceTheme borderColor! Item was changed: ----- Method: View>>model:controller: (in category 'controller access') ----- model: aModel controller: aController "Set the receiver's model to aModel, add the receiver to aModel's list of dependents, and set the receiver's controller to aController. Subsequent changes to aModel (see Model|change) will result in View|update: messages being sent to the receiver. #NoControllerAllowed for the value of aController indicates that no default controller is available; nil for the value of aController indicates that the default controller is to be used when needed. If aController is neither #NoControllerAllowed nor nil, its view is set to the receiver and its model is set to aModel." model ~~ nil & (model ~~ aModel) ifTrue: [model removeDependent: self]. aModel ~~ nil & (aModel ~~ model) ifTrue: [aModel addDependent: self]. model := aModel. aController ~~ nil ifTrue: [aController view: self. aController model: aModel]. + controller := aController. + + self setDefaultForegroundColor. + self setDefaultBackgroundColor.! - controller := aController! Item was changed: ----- Method: View>>setDefaultBackgroundColor (in category 'initialize-release') ----- setDefaultBackgroundColor "Obtain the background color from the receiver's model. The preferences make sure whether this is a colorful or uniform look." + self backgroundColor: self defaultBackgroundColor! - self backgroundColor: model windowColorToUse! Item was added: + ----- Method: View>>setDefaultForegroundColor (in category 'initialize-release') ----- + setDefaultForegroundColor + + self foregroundColor: self defaultForegroundColor! From commits at source.squeak.org Wed Aug 24 11:47:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 11:47:21 2016 Subject: [squeak-dev] The Trunk: System-mt.909.mcz Message-ID: Marcel Taeumel uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-mt.909.mcz ==================== Summary ==================== Name: System-mt.909 Author: mt Time: 24 August 2016, 1:46:49.298718 pm UUID: 45340af2-d996-df46-bb18-7ccfdd38854b Ancestors: System-mt.908 For MVC, add simple mappings for important settings in UI themes (and all which derive from the Squeak standard theme). =============== Diff against System-mt.908 =============== Item was added: + ----- Method: SqueakTheme class>>addMVC: (in category 'instance creation') ----- + addMVC: theme + " + self create apply. + " + theme + derive: #color for: #ListView from: #PluggableListMorph; + derive: #borderColor for: #ListView from: #PluggableListMorph at: #textColor; + + derive: #color for: #StringHolderView from: #PluggableTextMorph; + derive: #borderColor for: #StringHolderView from: #PluggableTextMorph at: #textColor; + + derive: #color for: #PluggableButtonView from: #PluggableButtonMorph; + derive: #borderColor for: #PluggableButtonView from: #PluggableButtonMorph at: #textColor; + derive: #font for: #PluggableButtonView from: #PluggableButtonMorph; + + derive: #color for: #PopUpMenu from: #MenuMorph; + derive: #borderColor for: #PopUpMenu from: #MenuMorph; + derive: #textColor for: #PopUpMenu from: #MenuItemMorph; + derive: #lineColor for: #PopUpMenu from: #MenuMorph at: #borderColor; + + set: #borderColorModifier for: #StandardSystemView to: [ [:c | c adjustBrightness: -0.5] ].! Item was changed: ----- Method: SqueakTheme class>>create (in category 'instance creation') ----- create "This is the default theme for Squeak. self create apply. " ^ (self named: 'Squeak') in: [:theme | "General morph stuff." theme set: #keyboardFocusColor for: #Morph to: (TranslucentColor r: 0.3 g: 0.5 b: 0.5 alpha: 0.5); set: #keyboardFocusWidth for: #Morph to: 3; set: #softShadowColor for: #Morph to: (Color black alpha: 0.01); set: #softShadowOffset for: #Morph to: (10@8 corner: 10@12); set: #hardShadowColor for: #Morph to: (Color black alpha: 0.5); set: #hardShadowOffset for: #Morph to: 1@1. theme set: #background for: #MorphicProject to: self linenblue. self addFonts: theme; addWindowColors: theme; addSyntaxHighlighting: theme; addMenusAndDockingBars: theme; addDialogs: theme; addButtons: theme; addScrollables: theme; + addToolColors: theme; + addMVC: theme. - addToolColors: theme. theme]! From Marcel.Taeumel at hpi.de Wed Aug 24 11:50:38 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 11:52:09 2016 Subject: [squeak-dev] Re: Loading trunk updates in 5.1 In-Reply-To: <1472037906394-4912473.post@n4.nabble.com> References: <1472037906394-4912473.post@n4.nabble.com> Message-ID: <1472039438083-4912479.post@n4.nabble.com> marcel.taeumel wrote > > Bert Freudenberg wrote >> ... shows lots of merge dialogs. We need to merge the 5.1 specific >> versions >> back into trunk, I guess? >> >> - Bert - > I did copy some MCZ but made some other changes twice. No need to copy MCZ > at the moment. All changes in 5.1 are already in trunk. If in doubt, hit > "accept". > > Best, > marcel I double-checked. There were 3 merge dialogs for these three methods: ScrollBar >> #scrollPageInit: View >> #setDefaultBackgroundColor ReleaseBuilder class >> #initialize When converting a 5.1 image to Trunk, just accept the incoming changes. Best, Marcel -- View this message in context: http://forum.world.st/Loading-trunk-updates-in-5-1-tp4912465p4912479.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From edgardec2005 at gmail.com Wed Aug 24 11:55:42 2016 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Wed Aug 24 11:55:50 2016 Subject: [squeak-dev] Squeak 5.1 bugs Message-ID: https://youtu.be/aemzhKWckhY As not only complain :=) By the way , if you do previous project the image show an emergency evaluator and freeze Edgar @morplenauta From Marcel.Taeumel at hpi.de Wed Aug 24 12:09:18 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 12:10:49 2016 Subject: [squeak-dev] Re: Squeak 5.1 bugs In-Reply-To: References: Message-ID: <1472040558155-4912482.post@n4.nabble.com> Edgar J. De Cleene-3 wrote > https://youtu.be/aemzhKWckhY > > As not only complain :=) > > By the way , if you do previous project the image show an emergency > evaluator and freeze > > > Edgar > @morplenauta Hi Edgar, can you give more information? I cannot reproduce that issue. Best, Marcel -- View this message in context: http://forum.world.st/Squeak-5-1-bugs-tp4912461p4912482.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Aug 24 12:16:24 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 12:17:55 2016 Subject: [squeak-dev] Re: Struggling with Update Maps In-Reply-To: <1472038424359-4912474.post@n4.nabble.com> References: <1472038424359-4912474.post@n4.nabble.com> Message-ID: <1472040984391-4912483.post@n4.nabble.com> marcel.taeumel wrote > Hey, there. > > "update-mt.389.mcm" removes "311Deprecated". > "update-mt.390.mcm" removes "SmallLand". > > This seems to work fine in a foreign, updated image. In the the that > created those update maps, however, those packages seem to return on > update. :-/ I suspect that there is some kind of bug when processing the > update maps... > > Best, > Marcel Here is a thought: - The system seems to remember that the latest update config was "update-mt.387.mcm" - It starts processing "update-mt.388.mcm" (although I did create and upload it) loading "311Deprecated" and "SmallLand" again. - It starts processing "update-mt.389.mcm" (although I did create and upload it) not finding "311Deprecated" there. - It starts processing "update-mt.390.mcm" (although I did create and upload it) not finding "SmallLand" there. However, the #postLoad scripts in SqueakVersion where not executed again and hence I end up having "311Deprecated" and "SmallLand" in the image again. :-/ I see two ways to fix this: - If I create a new update config, remember that for the next update in the image. - Re-execute that post-load scripts again if possible I prefer the first alternative. Best, Marcel -- View this message in context: http://forum.world.st/Struggling-with-Update-Maps-tp4912474p4912483.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From commits at source.squeak.org Wed Aug 24 12:28:06 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 12:28:07 2016 Subject: [squeak-dev] The Inbox: MonticelloConfigurations-mt.146.mcz Message-ID: A new version of MonticelloConfigurations was added to project The Inbox: http://source.squeak.org/inbox/MonticelloConfigurations-mt.146.mcz ==================== Summary ==================== Name: MonticelloConfigurations-mt.146 Author: mt Time: 24 August 2016, 2:28:04.078881 pm UUID: 7d66728c-5f7b-4f47-af00-48118cb12f37 Ancestors: MonticelloConfigurations-mt.145 After storing a new configuration, update the last update map to avoid reloading old packages and run into an inconsistent package state. =============== Diff against MonticelloConfigurations-mt.145 =============== Item was changed: ----- Method: MCConfigurationBrowser>>store (in category 'actions') ----- store (self checkRepositories and: [self checkDependencies]) ifFalse: [^self]. self pickName ifNotNil: [:name | self configuration name: name. self pickRepository ifNotNil: [:repo | + repo storeVersion: self configuration. + + "Do not try to reload this configuration on the next update." + MCMcmUpdater default lastUpdateMap + at: repo description + put: self configuration name asMCVersionName versionNumber. + ]].! - repo storeVersion: self configuration]].! From Marcel.Taeumel at hpi.de Wed Aug 24 12:27:41 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 12:29:12 2016 Subject: [squeak-dev] Re: Struggling with Update Maps In-Reply-To: <1472040984391-4912483.post@n4.nabble.com> References: <1472038424359-4912474.post@n4.nabble.com> <1472040984391-4912483.post@n4.nabble.com> Message-ID: <1472041661889-4912487.post@n4.nabble.com> marcel.taeumel wrote > > marcel.taeumel wrote >> Hey, there. >> >> "update-mt.389.mcm" removes "311Deprecated". >> "update-mt.390.mcm" removes "SmallLand". >> >> This seems to work fine in a foreign, updated image. In the the that >> created those update maps, however, those packages seem to return on >> update. :-/ I suspect that there is some kind of bug when processing the >> update maps... >> >> Best, >> Marcel > Here is a thought: > - The system seems to remember that the latest update config was > "update-mt.387.mcm" > - It starts processing "update-mt.388.mcm" (although I did create and > upload it) loading "311Deprecated" and "SmallLand" again. > - It starts processing "update-mt.389.mcm" (although I did create and > upload it) not finding "311Deprecated" > there. > - It starts processing "update-mt.390.mcm" (although I did create and > upload it) not finding "SmallLand" there. > > However, the #postLoad scripts in SqueakVersion where not executed again > and hence I end up having "311Deprecated" and "SmallLand" in the image > again. :-/ > > I see two ways to fix this: > - If I create a new update config, remember that for the next update in > the image. > - Re-execute that post-load scripts again if possible > > I prefer the first alternative. > > Best, > Marcel Could this work: http://forum.world.st/The-Inbox-MonticelloConfigurations-mt-146-mcz-tp4912486.html ? Best, Marcel -- View this message in context: http://forum.world.st/Struggling-with-Update-Maps-tp4912474p4912487.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From edgardec2005 at gmail.com Wed Aug 24 12:45:42 2016 From: edgardec2005 at gmail.com (Edgar De Cleene) Date: Wed Aug 24 12:45:48 2016 Subject: [squeak-dev] Re: Squeak 5.1 bugs In-Reply-To: <1472040558155-4912482.post@n4.nabble.com> References: <1472040558155-4912482.post@n4.nabble.com> Message-ID: <710A1CE2-25CF-4E2F-98E0-3E6E010B5293@gmail.com> Hi Marcel As I said, try to build FunSqueak 5.1. Steps I do Download All-In-One Unzip Open in Mac First bug is when in the menu try to create a new Project, solved as i said Second bug or maybe change from earlier versions, command B in a class name do not open a Browser. Then in the new project i try to have MorphicGames as you see in the youtube video With some bugs of mine solved, the MorphicGames is working as you see in the video When you try to go to first project (the welcome window in dark) , a emergency evaluator raise. Later Ioday test in Windows and Linux to see , must go now > On Aug 24, 2016, at 09:09, marcel.taeumel wrote: > > Edgar J. De Cleene-3 wrote >> https://youtu.be/aemzhKWckhY >> >> As not only complain :=) >> >> By the way , if you do previous project the image show an emergency >> evaluator and freeze >> >> >> Edgar >> @morplenauta > > Hi Edgar, > > can you give more information? I cannot reproduce that issue. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Squeak-5-1-bugs-tp4912461p4912482.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From edgardec2005 at gmail.com Wed Aug 24 13:07:36 2016 From: edgardec2005 at gmail.com (Edgar De Cleene) Date: Wed Aug 24 13:07:41 2016 Subject: [squeak-dev] Squeak 5.1 bugs In-Reply-To: <1472040558155-4912482.post@n4.nabble.com> References: <1472040558155-4912482.post@n4.nabble.com> Message-ID: <16E90EB2-B6FC-46CF-9AD8-63112A0F80B2@gmail.com> Appollogize. Just download again to my laptop and none of the bugs show You can create new project and go back to previous and command B works as always. No idea why my old iMac behave crazy, but investigate later and do all again in Windows and Linux. Best Edgar > On Aug 24, 2016, at 09:09, marcel.taeumel wrote: > > Edgar J. De Cleene-3 wrote >> https://youtu.be/aemzhKWckhY >> >> As not only complain :=) >> >> By the way , if you do previous project the image show an emergency >> evaluator and freeze >> >> >> Edgar >> @morplenauta > > Hi Edgar, > > can you give more information? I cannot reproduce that issue. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Squeak-5-1-bugs-tp4912461p4912482.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From ma.chris.m at gmail.com Wed Aug 24 16:09:33 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Wed Aug 24 16:10:20 2016 Subject: [squeak-dev] where does source.squeak.org get its title? Message-ID: Can anyone please help me figure where the heck SqueakSource gets its title text? (see picture) This is the last thing needed to upgrade our code repository server. Months of work is completed, but I'm stuck at this last step for the last couple of days. In our production source.squeak.org image, there is one ByteString instance with the value 'Squeak Development' but when I chasePointers its an empty list.. Sigh... Seaside magic. Completely opaque!! Can anyone give me a pointer? -------------- next part -------------- A non-text attachment was scrubbed... Name: Squeak-Development-Green.png Type: image/png Size: 47894 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/7dd03473/Squeak-Development-Green-0001.png From asqueaker at gmail.com Wed Aug 24 16:21:39 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 24 16:22:22 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: <1471944392511-4912307.post@n4.nabble.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: Hi Marcel, if you are talking about introducing some kind of code to guard against someone mis-using Morphic, then, yes, it *is* a relevant point ot the discussion. You can render your image just as unusable with String new become: nil but we don't want to guard against that.. If Etoys or Kedama are doing that, shouldn't they be changed to use WorldState addDeferredUIMessage:? That's the SharedQueue designed to let apps with background processes append operations to be handled by the UI Process.. On Tue, Aug 23, 2016 at 4:26 AM, marcel.taeumel wrote: > Chris Muller-3 wrote >> Morphic is designed to run in one Process, so you shouldn't need any >> multi-process coordination because you should only be doing drawing in >> the UI process. Right? >> >> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < > >> marcel.taeumel@ > >> > wrote: >>> Hi, there. >>> >>> Take this Morph here: >>> >>> initialize >>> super initialize. >>> semaphore := Semaphore forMutualExclusion. >>> >>> step >>> semaphore critical: [ [] repeat ]. >>> >>> drawOn: aCanvas >>> semaphore critical: [super drawOn: aCanvas]. >>> >>> If you create such a morph and open it in the world, the UI process will >>> freeze because of that endless loop in the step method. Okay. The tricky >>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>> for >>> the same semaphore that is currently used in the morph's step. You will >>> not >>> see a debugger appear. The freshly spawned UI process will block right >>> awai. >>> The well known big red cross/box does not appear because there is no >>> place >>> to detect this situation. >>> >>> An easy fix would be to tell the application developer to use >>> #critical:ifLocked: in that drawing code. If that semaphore is really >>> necessary. >>> >>> However, can there be a way for Morphic to detect such issues and flag >>> that >>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>> toValue: >>> true") Could there be a notification for the Morphic framework to look >>> out >>> for such as WaitOnCriticalSection to flag that morph as bad? Could that >>> primitive 86 send such a notification efficiently? Just once? ^__^ >>> >>> If yes, Morphic could draw its world like this (pseudo code!): >>> ... >>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>> true.] >>> ... >>> >>> Morphic would be more robust. >>> >>> Best, >>> Marcel >>> >>> >>> >>> >>> >>> > > Hi Chris, hi Bert, > > if you need an example, well, Etoys/Kedama makes those things in the latest > Trunk version. ;-) > > It is not the point whether applications should do this or not but our > recently changed semantics of semaphores might render your image unusable > because of unusual application code. I see an opportunity to improve > Morphics robustness and help users debug their applications without image > freeze/lock out. > > So, I want to discuss here, whether there could be a Notification sent > whenever an object/process starts waiting on a semaphore. :-) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912307.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From asqueaker at gmail.com Wed Aug 24 16:23:03 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 24 16:23:47 2016 Subject: [squeak-dev] [5.1] DataStream bug (MessageNotUnderstood: UndefinedObject>>instSize) In-Reply-To: References: Message-ID: It may be related to serialization / materialization of Character objects... On Wed, Aug 24, 2016 at 5:43 AM, Bert Freudenberg wrote: > This appears to happen a lot in 5.1, e.g. the first time you compare a > package in Monticello: > > UndefinedObject(Object)>>doesNotUnderstand: #instSize > nil(Object)>>storeDataOn: > DataStream>>writeInstance: > DataStream>>nextPut: > > Anybody else seeing it? > > - Bert - > > > From Marcel.Taeumel at hpi.de Wed Aug 24 16:58:00 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 16:59:32 2016 Subject: [squeak-dev] Re: where does source.squeak.org get its title? In-Reply-To: References: Message-ID: <1472057880211-4912507.post@n4.nabble.com> Chris Muller-4 wrote > Can anyone please help me figure where the heck SqueakSource gets its > title text? (see picture) > > This is the last thing needed to upgrade our code repository server. > Months of work is completed, but I'm stuck at this last step for the > last couple of days. > > In our production source.squeak.org image, there is one ByteString > instance with the value 'Squeak Development' but when I chasePointers > its an empty list.. > > Sigh... Seaside magic. Completely opaque!! Can anyone give me a pointer? > Hi Chris, > > this is a pre-rendered picture, right? At least on the rendered Website... > Maybe you are looking for a resource, a form? > > Best, > Marcel > > > > Squeak-Development-Green.png (64K) > <http://forum.world.st/attachment/4912504/0/Squeak-Development-Green.png> -- View this message in context: http://forum.world.st/where-does-source-squeak-org-get-its-title-tp4912504p4912507.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Aug 24 17:01:44 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 17:03:17 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: <1472058104916-4912509.post@n4.nabble.com> Chris Muller-3 wrote > Hi Marcel, if you are talking about introducing some kind of code to > guard against someone mis-using Morphic, then, yes, it *is* a relevant > point ot the discussion. You can render your image just as unusable > with > > String new become: nil > > but we don't want to guard against that.. If Etoys or Kedama are > doing that, shouldn't they be changed to use WorldState > addDeferredUIMessage:? That's the SharedQueue designed to let apps > with background processes append operations to be handled by the UI > Process.. > > On Tue, Aug 23, 2016 at 4:26 AM, marcel.taeumel < > Marcel.Taeumel@ > > wrote: >> Chris Muller-3 wrote >>> Morphic is designed to run in one Process, so you shouldn't need any >>> multi-process coordination because you should only be doing drawing in >>> the UI process. Right? >>> >>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >> >>> marcel.taeumel@ >> >>> > wrote: >>>> Hi, there. >>>> >>>> Take this Morph here: >>>> >>>> initialize >>>> super initialize. >>>> semaphore := Semaphore forMutualExclusion. >>>> >>>> step >>>> semaphore critical: [ [] repeat ]. >>>> >>>> drawOn: aCanvas >>>> semaphore critical: [super drawOn: aCanvas]. >>>> >>>> If you create such a morph and open it in the world, the UI process >>>> will >>>> freeze because of that endless loop in the step method. Okay. The >>>> tricky >>>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>>> for >>>> the same semaphore that is currently used in the morph's step. You will >>>> not >>>> see a debugger appear. The freshly spawned UI process will block right >>>> awai. >>>> The well known big red cross/box does not appear because there is no >>>> place >>>> to detect this situation. >>>> >>>> An easy fix would be to tell the application developer to use >>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>> necessary. >>>> >>>> However, can there be a way for Morphic to detect such issues and flag >>>> that >>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>> toValue: >>>> true") Could there be a notification for the Morphic framework to look >>>> out >>>> for such as WaitOnCriticalSection to flag that morph as bad? Could that >>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>> >>>> If yes, Morphic could draw its world like this (pseudo code!): >>>> ... >>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>> true.] >>>> ... >>>> >>>> Morphic would be more robust. >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> >>>> >>>> >> >> Hi Chris, hi Bert, >> >> if you need an example, well, Etoys/Kedama makes those things in the >> latest >> Trunk version. ;-) >> >> It is not the point whether applications should do this or not but our >> recently changed semantics of semaphores might render your image unusable >> because of unusual application code. I see an opportunity to improve >> Morphics robustness and help users debug their applications without image >> freeze/lock out. >> >> So, I want to discuss here, whether there could be a Notification sent >> whenever an object/process starts waiting on a semaphore. :-) >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912307.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> Hi Chris, hehe, interesting comparison. However, waiting on a semaphore is not so obviously "dumb" as is "String become: nil." If this could be a chance to make Morphic more robust without any maintenance or performance overhead, we should do it. Best, Marcel -- View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912509.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Wed Aug 24 17:13:49 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Wed Aug 24 17:15:23 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: <1472058104916-4912509.post@n4.nabble.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <1472058104916-4912509.post@n4.nabble.com> Message-ID: <1472058829178-4912510.post@n4.nabble.com> marcel.taeumel wrote > > Chris Muller-3 wrote >> Hi Marcel, if you are talking about introducing some kind of code to >> guard against someone mis-using Morphic, then, yes, it *is* a relevant >> point ot the discussion. You can render your image just as unusable >> with >> >> String new become: nil >> >> but we don't want to guard against that.. If Etoys or Kedama are >> doing that, shouldn't they be changed to use WorldState >> addDeferredUIMessage:? That's the SharedQueue designed to let apps >> with background processes append operations to be handled by the UI >> Process.. >> >> On Tue, Aug 23, 2016 at 4:26 AM, marcel.taeumel < >> Marcel.Taeumel@ >> > wrote: >>> Chris Muller-3 wrote >>>> Morphic is designed to run in one Process, so you shouldn't need any >>>> multi-process coordination because you should only be doing drawing in >>>> the UI process. Right? >>>> >>>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >>> >>>> marcel.taeumel@ >>> >>>> > wrote: >>>>> Hi, there. >>>>> >>>>> Take this Morph here: >>>>> >>>>> initialize >>>>> super initialize. >>>>> semaphore := Semaphore forMutualExclusion. >>>>> >>>>> step >>>>> semaphore critical: [ [] repeat ]. >>>>> >>>>> drawOn: aCanvas >>>>> semaphore critical: [super drawOn: aCanvas]. >>>>> >>>>> If you create such a morph and open it in the world, the UI process >>>>> will >>>>> freeze because of that endless loop in the step method. Okay. The >>>>> tricky >>>>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>>>> for >>>>> the same semaphore that is currently used in the morph's step. You >>>>> will >>>>> not >>>>> see a debugger appear. The freshly spawned UI process will block right >>>>> awai. >>>>> The well known big red cross/box does not appear because there is no >>>>> place >>>>> to detect this situation. >>>>> >>>>> An easy fix would be to tell the application developer to use >>>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>>> necessary. >>>>> >>>>> However, can there be a way for Morphic to detect such issues and flag >>>>> that >>>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>>> toValue: >>>>> true") Could there be a notification for the Morphic framework to look >>>>> out >>>>> for such as WaitOnCriticalSection to flag that morph as bad? Could >>>>> that >>>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>>> >>>>> If yes, Morphic could draw its world like this (pseudo code!): >>>>> ... >>>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>>> true.] >>>>> ... >>>>> >>>>> Morphic would be more robust. >>>>> >>>>> Best, >>>>> Marcel >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>> >>> Hi Chris, hi Bert, >>> >>> if you need an example, well, Etoys/Kedama makes those things in the >>> latest >>> Trunk version. ;-) >>> >>> It is not the point whether applications should do this or not but our >>> recently changed semantics of semaphores might render your image >>> unusable >>> because of unusual application code. I see an opportunity to improve >>> Morphics robustness and help users debug their applications without >>> image >>> freeze/lock out. >>> >>> So, I want to discuss here, whether there could be a Notification sent >>> whenever an object/process starts waiting on a semaphore. :-) >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: >>> http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912307.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>> > Hi Chris, > > hehe, interesting comparison. However, waiting on a semaphore is not so > obviously "dumb" as is "String become: nil." If this could be a chance to > make Morphic more robust without any maintenance or performance overhead, > we should do it. > > Best, > Marcel Of course, I made that example here very clear and simple for everybody to think about. In bigger projects, however, such code might not look this obvious. The semaphore-wait may just be slipped into drawing code by accident. We can agree that there might usually be no need to wait on semaphores in drawing code. Sure, we never make any mistakes. ;-P We are good programmers. Haha, that's a classic. :-) I regard exception handling as being cheap. Performance-wise. Frameworks with a plentitude of features have to robust wherever possible. We just cannot always point the finger on the application developer and say: "It's just your fault. You are using the environment/framework wrong." Again: No, waiting on a semaphore in drawing code does absolutely NOT compare to "String new become: nil" because using #become: as a strong sent of meta-programming on it while semaphores do not. Well, this is just my opinion. :-) Best, Marcel -- View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912510.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From asqueaker at gmail.com Wed Aug 24 18:30:21 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 24 18:31:04 2016 Subject: [squeak-dev] Re: where does source.squeak.org get its title? In-Reply-To: <1472057880211-4912507.post@n4.nabble.com> References: <1472057880211-4912507.post@n4.nabble.com> Message-ID: I think I finally found it... SSFrame class>>#formLogo. Whew! Maybe.. this is the standard blue "SqueakSource" banner.. And, yes, its a Form. Thanks. On Wed, Aug 24, 2016 at 11:58 AM, marcel.taeumel wrote: > Chris Muller-4 wrote >> Can anyone please help me figure where the heck SqueakSource gets its >> title text? (see picture) >> >> This is the last thing needed to upgrade our code repository server. >> Months of work is completed, but I'm stuck at this last step for the >> last couple of days. >> >> In our production source.squeak.org image, there is one ByteString >> instance with the value 'Squeak Development' but when I chasePointers >> its an empty list.. >> >> Sigh... Seaside magic. Completely opaque!! Can anyone give me a pointer? >> Hi Chris, >> >> this is a pre-rendered picture, right? At least on the rendered Website... >> Maybe you are looking for a resource, a form? >> >> Best, >> Marcel >> >> >> >> Squeak-Development-Green.png (64K) >> <http://forum.world.st/attachment/4912504/0/Squeak-Development-Green.png> > > > > > > -- > View this message in context: http://forum.world.st/where-does-source-squeak-org-get-its-title-tp4912504p4912507.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From joseph.alotta at gmail.com Wed Aug 24 18:33:57 2016 From: joseph.alotta at gmail.com (Joseph Alotta) Date: Wed Aug 24 18:34:01 2016 Subject: [squeak-dev] 5.1 buttons overhang on big display Message-ID: <3EC44AA7-2964-4063-88E0-24996AD41BDE@gmail.com> A non-text attachment was scrubbed... Name: ss.jpeg Type: image/jpeg Size: 45113 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/e7833127/ss.jpeg From leves at caesar.elte.hu Wed Aug 24 18:55:27 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 24 18:55:32 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: <1472058829178-4912510.post@n4.nabble.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <1472058104916-4912509.post@n4.nabble.com> <1472058829178-4912510.post@n4.nabble.com> Message-ID: On Wed, 24 Aug 2016, marcel.taeumel wrote: > marcel.taeumel wrote >> >> Chris Muller-3 wrote >>> Hi Marcel, if you are talking about introducing some kind of code to >>> guard against someone mis-using Morphic, then, yes, it *is* a relevant >>> point ot the discussion. You can render your image just as unusable >>> with >>> >>> String new become: nil >>> >>> but we don't want to guard against that.. If Etoys or Kedama are >>> doing that, shouldn't they be changed to use WorldState >>> addDeferredUIMessage:? That's the SharedQueue designed to let apps >>> with background processes append operations to be handled by the UI >>> Process.. >>> >>> On Tue, Aug 23, 2016 at 4:26 AM, marcel.taeumel < > >>> Marcel.Taeumel@ > >>> > wrote: >>>> Chris Muller-3 wrote >>>>> Morphic is designed to run in one Process, so you shouldn't need any >>>>> multi-process coordination because you should only be doing drawing in >>>>> the UI process. Right? >>>>> >>>>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >>>> >>>>> marcel.taeumel@ >>>> >>>>> > wrote: >>>>>> Hi, there. >>>>>> >>>>>> Take this Morph here: >>>>>> >>>>>> initialize >>>>>> super initialize. >>>>>> semaphore := Semaphore forMutualExclusion. >>>>>> >>>>>> step >>>>>> semaphore critical: [ [] repeat ]. >>>>>> >>>>>> drawOn: aCanvas >>>>>> semaphore critical: [super drawOn: aCanvas]. >>>>>> >>>>>> If you create such a morph and open it in the world, the UI process >>>>>> will >>>>>> freeze because of that endless loop in the step method. Okay. The >>>>>> tricky >>>>>> thing is, that you cannot use [CMD]+[.] because the drawing code waits >>>>>> for >>>>>> the same semaphore that is currently used in the morph's step. You >>>>>> will >>>>>> not >>>>>> see a debugger appear. The freshly spawned UI process will block right >>>>>> awai. >>>>>> The well known big red cross/box does not appear because there is no >>>>>> place >>>>>> to detect this situation. >>>>>> >>>>>> An easy fix would be to tell the application developer to use >>>>>> #critical:ifLocked: in that drawing code. If that semaphore is really >>>>>> necessary. >>>>>> >>>>>> However, can there be a way for Morphic to detect such issues and flag >>>>>> that >>>>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>>>> toValue: >>>>>> true") Could there be a notification for the Morphic framework to look >>>>>> out >>>>>> for such as WaitOnCriticalSection to flag that morph as bad? Could >>>>>> that >>>>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>>>> >>>>>> If yes, Morphic could draw its world like this (pseudo code!): >>>>>> ... >>>>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>>>> true.] >>>>>> ... >>>>>> >>>>>> Morphic would be more robust. >>>>>> >>>>>> Best, >>>>>> Marcel >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>> >>>> Hi Chris, hi Bert, >>>> >>>> if you need an example, well, Etoys/Kedama makes those things in the >>>> latest >>>> Trunk version. ;-) >>>> >>>> It is not the point whether applications should do this or not but our >>>> recently changed semantics of semaphores might render your image >>>> unusable >>>> because of unusual application code. I see an opportunity to improve >>>> Morphics robustness and help users debug their applications without >>>> image >>>> freeze/lock out. >>>> >>>> So, I want to discuss here, whether there could be a Notification sent >>>> whenever an object/process starts waiting on a semaphore. :-) >>>> >>>> Best, >>>> Marcel >>>> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912307.html >>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>> >> Hi Chris, >> >> hehe, interesting comparison. However, waiting on a semaphore is not so >> obviously "dumb" as is "String become: nil." If this could be a chance to >> make Morphic more robust without any maintenance or performance overhead, >> we should do it. >> >> Best, >> Marcel > > Of course, I made that example here very clear and simple for everybody to > think about. In bigger projects, however, such code might not look this > obvious. The semaphore-wait may just be slipped into drawing code by > accident. We can agree that there might usually be no need to wait on > semaphores in drawing code. Sure, we never make any mistakes. ;-P We are > good programmers. Haha, that's a classic. :-) > > I regard exception handling as being cheap. Performance-wise. Frameworks > with a plentitude of features have to robust wherever possible. We just > cannot always point the finger on the application developer and say: "It's > just your fault. You are using the environment/framework wrong." Exception handling, especially in Cog/Spur, is expensive. Frames have to be created, marked, walked. Levente > > Again: No, waiting on a semaphore in drawing code does absolutely NOT > compare to "String new become: nil" because using #become: as a strong sent > of meta-programming on it while semaphores do not. Well, this is just my > opinion. :-) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912510.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From casimiro.barreto at gmail.com Wed Aug 24 20:41:03 2016 From: casimiro.barreto at gmail.com (Casimiro - GMAIL) Date: Wed Aug 24 20:41:10 2016 Subject: [squeak-dev] Squeak 5.1 is still incapable of loading seaside Message-ID: <3a397eae-bb68-b0d4-8fbc-a24d51d58ffd@gmail.com> Skipped content of type multipart/mixed-------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: OpenPGP digital signature Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/6e8f2bbc/signature.pgp From lewis at mail.msen.com Wed Aug 24 21:31:17 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Aug 24 21:31:23 2016 Subject: [squeak-dev] Re: where does source.squeak.org get its title? In-Reply-To: References: <1472057880211-4912507.post@n4.nabble.com> Message-ID: <20160824213117.GA84474@shell.msen.com> On Wed, Aug 24, 2016 at 01:30:21PM -0500, Chris Muller wrote: > > On Wed, Aug 24, 2016 at 11:58 AM, marcel.taeumel wrote: > > Chris Muller-4 wrote > >> Can anyone please help me figure where the heck SqueakSource gets its > >> title text? (see picture) > >> > >> This is the last thing needed to upgrade our code repository server. > >> Months of work is completed, but I'm stuck at this last step for the > >> last couple of days. > >> > >> In our production source.squeak.org image, there is one ByteString > >> instance with the value 'Squeak Development' but when I chasePointers > >> its an empty list.. > >> > >> Sigh... Seaside magic. Completely opaque!! Can anyone give me a pointer? > >> Hi Chris, > >> > >> this is a pre-rendered picture, right? At least on the rendered Website... > >> Maybe you are looking for a resource, a form? > >> > >> Best, > >> Marcel > >> > >> > >> > >> Squeak-Development-Green.png (64K) > >> <http://forum.world.st/attachment/4912504/0/Squeak-Development-Green.png> > > > > I think I finally found it... SSFrame class>>#formLogo. > > Whew! Maybe.. this is the standard blue "SqueakSource" banner.. > > And, yes, its a Form. > > Thanks. > Hi Chris, I see you already found the answer, but for what it's worth, here is a copy of the workspace that I left in the squeaksource.com image as a reminder of how to change the logo. This is from the time when I imported the squeaksource.com repository from its ancient 3.11 based image into a copy of the (then) latest and greatest source.squeak.org image so that both would be running on the same image and squeaksource versions. After I did that I had to change the logo back to the squeaksource.com logo (pretty much the reverse of the problem you had here). The squeaksource.com image has a number of workspaces like this to keep track of how it came to be. Whenever we update the source.squeak.org and squeaksource.com images to some newer version of the image and VM, those workspaces will hopefully provide some background to help with the update. Dave -------------- next part -------------- Background: The header banner at the top of the SqueakSource web page is a graphic that is activated by the style sheet. It is stored in class instance variable Logo in class SSGenericFrame. The original logo from the SCG image was stored as a byte array in that image, but was not transferred to the newer image. I exported the byte array from the old image, saving it in a file called SSPageHeaderBytes.jpg, then loaded it into the newer image. "Update the header logo" SSFrame makeLogo: 'SSPageHeaderBytes.jpg'. The style sheet is cached in the style instance variable of the active SSFrame instance, which can be cleared without restarting the image. "Allow it to be activated" SSFrame allInstances do: [:e | e instVarAt: 3 put: nil]. From ma.chris.m at gmail.com Wed Aug 24 21:33:27 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Wed Aug 24 21:34:11 2016 Subject: [squeak-dev] How to use larger font in a TextMorph? Message-ID: The halos which used to open the font chooser now only present a ListChooser, so I can't seem to select a particular font size or emphasis using the halos. From lewis at mail.msen.com Wed Aug 24 21:39:25 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Aug 24 21:39:28 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> Message-ID: <20160824213925.GB84474@shell.msen.com> On Wed, Aug 24, 2016 at 11:21:39AM -0500, Chris Muller wrote: > Hi Marcel, if you are talking about introducing some kind of code to > guard against someone mis-using Morphic, then, yes, it *is* a relevant > point ot the discussion. You can render your image just as unusable > with > > String new become: nil > > but we don't want to guard against that.. If Etoys or Kedama are > doing that, shouldn't they be changed to use WorldState > addDeferredUIMessage:? That's the SharedQueue designed to let apps > with background processes append operations to be handled by the UI > Process.. It is good style to use Project current addDeferredUIMessage: rather than WorldState addDeferredUIMessage: Of course we are talking about Morphic here, but still ... Dave From lewis at mail.msen.com Wed Aug 24 21:48:18 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Wed Aug 24 21:48:22 2016 Subject: [squeak-dev] Squeak 5.1 is still incapable of loading seaside In-Reply-To: <3a397eae-bb68-b0d4-8fbc-a24d51d58ffd@gmail.com> References: <3a397eae-bb68-b0d4-8fbc-a24d51d58ffd@gmail.com> Message-ID: <20160824214818.GC84474@shell.msen.com> On Wed, Aug 24, 2016 at 05:41:03PM -0300, Casimiro - GMAIL wrote: > It breaks due to greaseInteger... some fix on the horizon???? > IIRC, the Seaside development team has invited us (the Squeak community) to participate in the necessary grease development for the compatibility layer. I don't know if anyone has stepped forward to do this, at least not recently. This seems like a really worthwhile thing to do, and I would expect that the scope of work is not really very large. Is anyone interested in doing this? Or better yet, is anyone already doing something about it and able to give a status update? Dave From asqueaker at gmail.com Wed Aug 24 21:49:11 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 24 21:49:54 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: <20160824213925.GB84474@shell.msen.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <20160824213925.GB84474@shell.msen.com> Message-ID: Okay, that's fine, my broader point just wondering whether that existing mechanism is sufficient for Marcel's multi-Process situation, or whether there really is a need to introduce yet another one into Morphic. We know it has to be syncrhonized anyway at the bottom, right? -- its not going to be multitasking in multiple drawing primitives simultaneously, the synchronization must occur at a higher level, and there is an existing higher-level mechanism to do that.. On Wed, Aug 24, 2016 at 4:39 PM, David T. Lewis wrote: > On Wed, Aug 24, 2016 at 11:21:39AM -0500, Chris Muller wrote: >> Hi Marcel, if you are talking about introducing some kind of code to >> guard against someone mis-using Morphic, then, yes, it *is* a relevant >> point ot the discussion. You can render your image just as unusable >> with >> >> String new become: nil >> >> but we don't want to guard against that.. If Etoys or Kedama are >> doing that, shouldn't they be changed to use WorldState >> addDeferredUIMessage:? That's the SharedQueue designed to let apps >> with background processes append operations to be handled by the UI >> Process.. > > It is good style to use Project current addDeferredUIMessage: rather > than WorldState addDeferredUIMessage: > > Of course we are talking about Morphic here, but still ... > > Dave > > From asqueaker at gmail.com Wed Aug 24 21:50:18 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 24 21:51:01 2016 Subject: [squeak-dev] Squeak 5.1 is still incapable of loading seaside In-Reply-To: <20160824214818.GC84474@shell.msen.com> References: <3a397eae-bb68-b0d4-8fbc-a24d51d58ffd@gmail.com> <20160824214818.GC84474@shell.msen.com> Message-ID: I just loaded Seaside 3.2.0 into Squeak 5.1 via SqueakMap with no visible problems... On Wed, Aug 24, 2016 at 4:48 PM, David T. Lewis wrote: > On Wed, Aug 24, 2016 at 05:41:03PM -0300, Casimiro - GMAIL wrote: >> It breaks due to greaseInteger... some fix on the horizon???? >> > > IIRC, the Seaside development team has invited us (the Squeak community) > to participate in the necessary grease development for the compatibility > layer. I don't know if anyone has stepped forward to do this, at least > not recently. > > This seems like a really worthwhile thing to do, and I would expect that > the scope of work is not really very large. Is anyone interested in doing > this? Or better yet, is anyone already doing something about it and able > to give a status update? > > Dave > > From commits at source.squeak.org Wed Aug 24 21:55:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 24 21:55:05 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160824215504.19996.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068709.html Name: 51Deprecated-mt.47 Ancestors: 51Deprecated-mt.46 Reduce use of deprecated API. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068710.html Name: 60Deprecated-mt.1 Ancestors: Deprecate project-parameter style preferences for menu visuals. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068711.html Name: Nebraska-mt.43 Ancestors: Nebraska-mt.42 Reduced use of deprecated API. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068712.html Name: Tools-mt.721 Ancestors: Tools-mt.720 Reduce use of deprecated API. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068713.html Name: PreferenceBrowser-mt.77 Ancestors: PreferenceBrowser-mt.76 Reduced use of deprecated API. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068714.html Name: Morphic-mt.1297 Ancestors: Morphic-mt.1296 Reduced use of deprecated API. Custom UI theme colors for halo morph and its rubber selection. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068715.html Name: System-mt.907 Ancestors: System-mt.906 Deprecate project-parameter preference for menu colors etc. Provide UI theme colors for halo and rubber selection. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068716.html Name: Monticello-mt.648 Ancestors: Monticello-mt.647 Due to updated trait composition string, fix requirements code. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068717.html Name: Squeak-Version-mt.4716 Ancestors: Squeak-Version-kfr.4713 Unload package '311Deprecated'. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068718.html Name: Tools-mt.722 Ancestors: Tools-mt.721 Remove use of ColorTheme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068719.html Name: System-mt.908 Ancestors: System-mt.907 Deprecate ColorTheme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068720.html Name: MorphicExtras-mt.184 Ancestors: MorphicExtras-mt.183 Remove use of ColorTheme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068721.html Name: Morphic-mt.1298 Ancestors: Morphic-mt.1297 Remove use of ColorTheme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068722.html Name: EToys-mt.142 Ancestors: EToys-pre.141 Remove use of ColorTheme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068723.html Name: 60Deprecated-mt.2 Ancestors: 60Deprecated-mt.1 Deprecate ColorTheme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068724.html Name: Squeak-Version-mt.4725 Ancestors: Squeak-Version-mt.4716 Unload package 'SmallLand' because we have now UserInterfaceTheme instead of ColorTheme. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068725.html Name: Tools-mt.723 Ancestors: Tools-mt.722 Simple MVC update to use UI theme colors for menus. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068726.html Name: ToolBuilder-MVC-mt.47 Ancestors: ToolBuilder-MVC-mt.46 Fixes drawing bug in panels and spacers in MVC. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068727.html Name: ST80-mt.218 Ancestors: ST80-mt.217 Simple MVC update to use UI theme colors for buttons, text fields, lists, and windows. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068728.html Name: System-mt.909 Ancestors: System-mt.908 For MVC, add simple mappings for important settings in UI themes (and all which derive from the Squeak standard theme). ============================================= From brasspen at gmail.com Wed Aug 24 22:09:26 2016 From: brasspen at gmail.com (Chris Cunnington) Date: Wed Aug 24 22:09:30 2016 Subject: [squeak-dev] Re: where does source.squeak.org get its title? Message-ID: <2c66d5b0-1401-943e-69a5-8bd3d3e72484@gmail.com> I think this is meant to be addressed in the web browser. source.squeak.org/config >> login >> Config page >> files >> Configure >> SSFooLibrary >> configure >> Logo.jpg or mimeLogo.jpg. Links for "remove", "rename", "write to disk", "close", "choose file" and "add". Chris >I think I finally found it... SSFrame class>>#formLogo. >Whew! Maybe.. this is the standard blue "SqueakSource" banner.. >And, yes, its a Form. >Thanks. On Wed, Aug 24, 2016 at 11:58 AM, marcel.taeumel > wrote: >/Chris Muller-4 wrote />>/Can anyone please help me figure where the heck SqueakSource gets its />>/title text? (see picture) />>//>>/This is the last thing needed to upgrade our code repository server. />>/Months of work is completed, but I'm stuck at this last step for the />>/last couple of days. />>//>>/In our production source.squeak.org image, there is one ByteString />>/instance with the value 'Squeak Development' but when I chasePointers />>/its an empty list.. />>//>>/Sigh... Seaside magic. Completely opaque!! Can anyone give me a pointer? />>/Hi Chris, />>//>>/this is a pre-rendered picture, right? At least on the rendered Website... />>/Maybe you are looking for a resource, a form? />>//>>/Best, />>/Marcel />>//>>//>>//>>/Squeak-Development-Green.png (64K) />>/<http://forum.world.st/attachment/4912504/0/Squeak-Development-Green.png> /> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/40fee53b/attachment.htm From lists at fniephaus.com Wed Aug 24 22:27:14 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Aug 24 22:27:27 2016 Subject: [squeak-dev] Squeak 5.1 is still incapable of loading seaside In-Reply-To: References: <3a397eae-bb68-b0d4-8fbc-a24d51d58ffd@gmail.com> <20160824214818.GC84474@shell.msen.com> Message-ID: On Wed, Aug 24, 2016 at 11:51 PM Chris Muller wrote: > I just loaded Seaside 3.2.0 into Squeak 5.1 via SqueakMap with no > visible problems... > The Seaside project also has a mirror on GitHub which is tested by TravisCI. According to that, all tests are passing in a Squeak-5.1 image: https://travis-ci.org/SeasideSt/Seaside Fabio > > On Wed, Aug 24, 2016 at 4:48 PM, David T. Lewis > wrote: > > On Wed, Aug 24, 2016 at 05:41:03PM -0300, Casimiro - GMAIL wrote: > >> It breaks due to greaseInteger... some fix on the horizon???? > >> > > > > IIRC, the Seaside development team has invited us (the Squeak community) > > to participate in the necessary grease development for the compatibility > > layer. I don't know if anyone has stepped forward to do this, at least > > not recently. > > > > This seems like a really worthwhile thing to do, and I would expect that > > the scope of work is not really very large. Is anyone interested in doing > > this? Or better yet, is anyone already doing something about it and able > > to give a status update? > > > > Dave > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/72540885/attachment.htm From gettimothy at zoho.com Wed Aug 24 22:51:27 2016 From: gettimothy at zoho.com (gettimothy) Date: Wed Aug 24 22:51:31 2016 Subject: [squeak-dev] Nice job on the 5.1 release Message-ID: <156bec045fa.f6f0d0a05365.5887050855603466975@zoho.com> Thank you all who did the work. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160824/bce75338/attachment.htm From Marcel.Taeumel at hpi.de Thu Aug 25 07:01:37 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 25 07:03:14 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <20160824213925.GB84474@shell.msen.com> Message-ID: <1472108497964-4912551.post@n4.nabble.com> Chris Muller-3 wrote > Okay, that's fine, my broader point just wondering whether that > existing mechanism is sufficient for Marcel's multi-Process situation, > or whether there really is a need to introduce yet another one into > Morphic. > > We know it has to be syncrhonized anyway at the bottom, right? -- its > not going to be multitasking in multiple drawing primitives > simultaneously, the synchronization must occur at a higher level, and > there is an existing higher-level mechanism to do that.. > > On Wed, Aug 24, 2016 at 4:39 PM, David T. Lewis < > lewis@.msen > > wrote: >> On Wed, Aug 24, 2016 at 11:21:39AM -0500, Chris Muller wrote: >>> Hi Marcel, if you are talking about introducing some kind of code to >>> guard against someone mis-using Morphic, then, yes, it *is* a relevant >>> point ot the discussion. You can render your image just as unusable >>> with >>> >>> String new become: nil >>> >>> but we don't want to guard against that.. If Etoys or Kedama are >>> doing that, shouldn't they be changed to use WorldState >>> addDeferredUIMessage:? That's the SharedQueue designed to let apps >>> with background processes append operations to be handled by the UI >>> Process.. >> >> It is good style to use Project current addDeferredUIMessage: rather >> than WorldState addDeferredUIMessage: >> >> Of course we are talking about Morphic here, but still ... >> >> Dave >> >> Okay, that just leaves the job to an additional watcher process. Self did that, too. Best, Marcel -- View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912551.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Aug 25 07:05:51 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 25 07:07:29 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <1472058104916-4912509.post@n4.nabble.com> <1472058829178-4912510.post@n4.nabble.com> Message-ID: <1472108751856-4912555.post@n4.nabble.com> Levente Uzonyi wrote > On Wed, 24 Aug 2016, marcel.taeumel wrote: > >> marcel.taeumel wrote >>> >>> Chris Muller-3 wrote >>>> Hi Marcel, if you are talking about introducing some kind of code to >>>> guard against someone mis-using Morphic, then, yes, it *is* a relevant >>>> point ot the discussion. You can render your image just as unusable >>>> with >>>> >>>> String new become: nil >>>> >>>> but we don't want to guard against that.. If Etoys or Kedama are >>>> doing that, shouldn't they be changed to use WorldState >>>> addDeferredUIMessage:? That's the SharedQueue designed to let apps >>>> with background processes append operations to be handled by the UI >>>> Process.. >>>> >>>> On Tue, Aug 23, 2016 at 4:26 AM, marcel.taeumel < >> >>>> Marcel.Taeumel@ >> >>>> > wrote: >>>>> Chris Muller-3 wrote >>>>>> Morphic is designed to run in one Process, so you shouldn't need any >>>>>> multi-process coordination because you should only be doing drawing >>>>>> in >>>>>> the UI process. Right? >>>>>> >>>>>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >>>>> >>>>>> marcel.taeumel@ >>>>> >>>>>> > wrote: >>>>>>> Hi, there. >>>>>>> >>>>>>> Take this Morph here: >>>>>>> >>>>>>> initialize >>>>>>> super initialize. >>>>>>> semaphore := Semaphore forMutualExclusion. >>>>>>> >>>>>>> step >>>>>>> semaphore critical: [ [] repeat ]. >>>>>>> >>>>>>> drawOn: aCanvas >>>>>>> semaphore critical: [super drawOn: aCanvas]. >>>>>>> >>>>>>> If you create such a morph and open it in the world, the UI process >>>>>>> will >>>>>>> freeze because of that endless loop in the step method. Okay. The >>>>>>> tricky >>>>>>> thing is, that you cannot use [CMD]+[.] because the drawing code >>>>>>> waits >>>>>>> for >>>>>>> the same semaphore that is currently used in the morph's step. You >>>>>>> will >>>>>>> not >>>>>>> see a debugger appear. The freshly spawned UI process will block >>>>>>> right >>>>>>> awai. >>>>>>> The well known big red cross/box does not appear because there is no >>>>>>> place >>>>>>> to detect this situation. >>>>>>> >>>>>>> An easy fix would be to tell the application developer to use >>>>>>> #critical:ifLocked: in that drawing code. If that semaphore is >>>>>>> really >>>>>>> necessary. >>>>>>> >>>>>>> However, can there be a way for Morphic to detect such issues and >>>>>>> flag >>>>>>> that >>>>>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>>>>> toValue: >>>>>>> true") Could there be a notification for the Morphic framework to >>>>>>> look >>>>>>> out >>>>>>> for such as WaitOnCriticalSection to flag that morph as bad? Could >>>>>>> that >>>>>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>>>>> >>>>>>> If yes, Morphic could draw its world like this (pseudo code!): >>>>>>> ... >>>>>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>>>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>>>>> true.] >>>>>>> ... >>>>>>> >>>>>>> Morphic would be more robust. >>>>>>> >>>>>>> Best, >>>>>>> Marcel >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> >>>>> Hi Chris, hi Bert, >>>>> >>>>> if you need an example, well, Etoys/Kedama makes those things in the >>>>> latest >>>>> Trunk version. ;-) >>>>> >>>>> It is not the point whether applications should do this or not but our >>>>> recently changed semantics of semaphores might render your image >>>>> unusable >>>>> because of unusual application code. I see an opportunity to improve >>>>> Morphics robustness and help users debug their applications without >>>>> image >>>>> freeze/lock out. >>>>> >>>>> So, I want to discuss here, whether there could be a Notification sent >>>>> whenever an object/process starts waiting on a semaphore. :-) >>>>> >>>>> Best, >>>>> Marcel >>>>> >>>>> >>>>> >>>>> -- >>>>> View this message in context: >>>>> http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912307.html >>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>>> >>> Hi Chris, >>> >>> hehe, interesting comparison. However, waiting on a semaphore is not so >>> obviously "dumb" as is "String become: nil." If this could be a chance >>> to >>> make Morphic more robust without any maintenance or performance >>> overhead, >>> we should do it. >>> >>> Best, >>> Marcel >> >> Of course, I made that example here very clear and simple for everybody >> to >> think about. In bigger projects, however, such code might not look this >> obvious. The semaphore-wait may just be slipped into drawing code by >> accident. We can agree that there might usually be no need to wait on >> semaphores in drawing code. Sure, we never make any mistakes. ;-P We are >> good programmers. Haha, that's a classic. :-) >> >> I regard exception handling as being cheap. Performance-wise. Frameworks >> with a plentitude of features have to robust wherever possible. We just >> cannot always point the finger on the application developer and say: >> "It's >> just your fault. You are using the environment/framework wrong." > > Exception handling, especially in Cog/Spur, is expensive. Frames have to > be created, marked, walked. > > Levente > >> >> Again: No, waiting on a semaphore in drawing code does absolutely NOT >> compare to "String new become: nil" because using #become: as a strong >> sent >> of meta-programming on it while semaphores do not. Well, this is just my >> opinion. :-) >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: >> http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912510.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Hi Levente, with "expensive" you mean "not optimized", right? I am asking because we use our exception mechanism for accessing source code and I also know about a game that used Notifications as a core communication concept in a game. :-) --> CurrentReadOnlySourceFiles Best, Marcel -- View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912555.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Aug 25 07:07:32 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 25 07:09:09 2016 Subject: [squeak-dev] Re: 5.1 buttons overhang on big display In-Reply-To: <3EC44AA7-2964-4063-88E0-24996AD41BDE@gmail.com> References: <3EC44AA7-2964-4063-88E0-24996AD41BDE@gmail.com> Message-ID: <1472108852932-4912556.post@n4.nabble.com> Joseph Alotta wrote > ss.jpeg (60K) <http://forum.world.st/attachment/4912513/0/ss.jpeg> Hi Joseph, yeah, that PreferenceBrowser is still to be rewritten to use ToolBuilder only. The behavior of that button row should be similar to the one in the browsers. Best, Marcel -- View this message in context: http://forum.world.st/5-1-buttons-overhang-on-big-display-tp4912513p4912556.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bert at freudenbergs.de Thu Aug 25 10:04:45 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Aug 25 10:04:48 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: <1472108751856-4912555.post@n4.nabble.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <1472058104916-4912509.post@n4.nabble.com> <1472058829178-4912510.post@n4.nabble.com> <1472108751856-4912555.post@n4.nabble.com> Message-ID: Marcel, if we could think of a good way to detect the lockup we should definitely add it. Raising a signal every time a process waits on a semaphore is definitely not a good way. Having a watchdog process monitoring the UI process sounds a lot better. But maybe there are other ideas. If we had a concrete proposal this might become a more fruitful discussion :) - Bert - On Thu, Aug 25, 2016 at 9:05 AM, marcel.taeumel wrote: > Hi Levente, > > with "expensive" you mean "not optimized", right? I am asking because we > use > our exception mechanism for accessing source code and I also know about a > game that used Notifications as a core communication concept in a game. :-) > > --> CurrentReadOnlySourceFiles > > Best, > Marcel > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160825/0ac579a3/attachment.htm From bert at freudenbergs.de Thu Aug 25 10:25:22 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Aug 25 10:25:25 2016 Subject: [squeak-dev] [5.1] DataStream bug (MessageNotUnderstood: UndefinedObject>>instSize) In-Reply-To: References: Message-ID: No, it's a only problem in the specific image I was using, not in the actual release image: 0 class ==> SmallInteger 1 class ==> nil All odd SmallInts answer nil when asked for their class ... I'll show this to Eliot later (we're all in Prague for ESUG right now). - Bert - On Wed, Aug 24, 2016 at 6:23 PM, Chris Muller wrote: > It may be related to serialization / materialization of Character > objects... > > On Wed, Aug 24, 2016 at 5:43 AM, Bert Freudenberg > wrote: > > This appears to happen a lot in 5.1, e.g. the first time you compare a > > package in Monticello: > > > > UndefinedObject(Object)>>doesNotUnderstand: #instSize > > nil(Object)>>storeDataOn: > > DataStream>>writeInstance: > > DataStream>>nextPut: > > > > Anybody else seeing it? > > > > - Bert - > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160825/72409551/attachment.htm From Marcel.Taeumel at hpi.de Thu Aug 25 11:31:09 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 25 11:32:47 2016 Subject: [squeak-dev] Re: How to use larger font in a TextMorph? In-Reply-To: References: Message-ID: <1472124669403-4912598.post@n4.nabble.com> Chris Muller-4 wrote > The halos which used to open the font chooser now only present a > ListChooser, so I can't seem to select a particular font size or > emphasis using the halos. Hi Chris, the way the user can change font, style, and emphasis via the halo of a TextMorph did not change. I confirmed it with Squeak 4.5. You have this: There are three halo buttons: font, style, or emphasis change. The left one shows the font chooser, the middle one a list chooser and the right one also a list chooser. Please take a quick look at some previous Squeak image on your own machine. ;-) Best, Marcel -- View this message in context: http://forum.world.st/How-to-use-larger-font-in-a-TextMorph-tp4912519p4912598.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From bert at freudenbergs.de Thu Aug 25 12:18:57 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Aug 25 12:18:59 2016 Subject: [squeak-dev] [5.1] DataStream bug (MessageNotUnderstood: UndefinedObject>>instSize) In-Reply-To: References: Message-ID: On Thu, Aug 25, 2016 at 12:25 PM, Bert Freudenberg wrote: > No, it's a only problem in the specific image I was using, not in the > actual release image: > > 0 class > ==> SmallInteger > > 1 class > ==> nil > > All odd SmallInts answer nil when asked for their class ... I'll show this > to Eliot later (we're all in Prague for ESUG right now). > Yep, Eliot recognized the issue immediately. In Spur, all classes are held in a table indexed by the class's identity hash. SqueakJS doesn't need that table (it uses direct class pointers) so it generates it when storing the image. This worked fine, except that the SmallInteger class needs to be put in two slots of the class table: 1 (which is its hash) and 3. I fixed this in SqueakJS now so all is good. This has to do with the special class lookup for immediate objects. For them, Spur simply masks the tag bits, and uses the value as index into the class table. In 32 bits we have two tag bits, but both 2r01 and 2r11 are used for SmallIntegers. Character uses 2r10, which is why Character's hash has to be 2. All regular objects use tag bits 2r00. - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160825/bb24f180/attachment.htm From bert at freudenbergs.de Thu Aug 25 12:37:12 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Aug 25 12:37:15 2016 Subject: [squeak-dev] Re: Struggling with Update Maps In-Reply-To: <1472040984391-4912483.post@n4.nabble.com> References: <1472038424359-4912474.post@n4.nabble.com> <1472040984391-4912483.post@n4.nabble.com> Message-ID: On Wed, Aug 24, 2016 at 2:16 PM, marcel.taeumel wrote: > marcel.taeumel wrote > > Hey, there. > > > > "update-mt.389.mcm" removes "311Deprecated". > > "update-mt.390.mcm" removes "SmallLand". > > > > This seems to work fine in a foreign, updated image. In the the that > > created those update maps, however, those packages seem to return on > > update. :-/ I suspect that there is some kind of bug when processing the > > update maps... > > > > Best, > > Marcel > > Here is a thought: > - The system seems to remember that the latest update config was > "update-mt.387.mcm" > - It starts processing "update-mt.388.mcm" (although I did create and > upload > it) loading "311Deprecated" and "SmallLand" again. > - It starts processing "update-mt.389.mcm" (although I did create and > upload > it) not finding "311Deprecated" > there. > - It starts processing "update-mt.390.mcm" (although I did create and > upload > it) not finding "SmallLand" there. > > However, the #postLoad scripts in SqueakVersion where not executed again > and > hence I end up having "311Deprecated" and "SmallLand" in the image again. > :-/ > > I see two ways to fix this: > - If I create a new update config, remember that for the next update in the > image. > - Re-execute that post-load scripts again if possible > > I prefer the first alternative. Third alternative: delete the packages manually. I would not like my image to be set to any update map I publish. We occasionally have to fix an older update map to work around update problems. This happens way more often than the problem of removing a package from the update map. Actually, what I would do is publishing the update map and *not* saving my image but restarting it to test that everything works. - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160825/86c74f11/attachment.htm From bert at freudenbergs.de Thu Aug 25 12:42:38 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Thu Aug 25 12:42:45 2016 Subject: [squeak-dev] Re: Loading trunk updates in 5.1 In-Reply-To: <1472039438083-4912479.post@n4.nabble.com> References: <1472037906394-4912473.post@n4.nabble.com> <1472039438083-4912479.post@n4.nabble.com> Message-ID: I know how to deal with the merge dialogs, it's not a problem *for me*. I know how to manually change the ancestry so it looks like a clean package again after merging. But not everybody does, and I wouldn't expect them to. The point of having a simple "update" button is that it pretty much "just works". It it is a problem for someone downloading the release image and trying to switch to trunk. There shouldn't be any unnecessary merge dialogs. (another problem is that in the release image not all packages are clean) - Bert - On Wed, Aug 24, 2016 at 1:50 PM, marcel.taeumel wrote: > marcel.taeumel wrote > > > > Bert Freudenberg wrote > >> ... shows lots of merge dialogs. We need to merge the 5.1 specific > >> versions > >> back into trunk, I guess? > >> > >> - Bert - > > I did copy some MCZ but made some other changes twice. No need to copy > MCZ > > at the moment. All changes in 5.1 are already in trunk. If in doubt, hit > > "accept". > > > > Best, > > marcel > > I double-checked. There were 3 merge dialogs for these three methods: > > ScrollBar >> #scrollPageInit: > View >> #setDefaultBackgroundColor > ReleaseBuilder class >> #initialize > > When converting a 5.1 image to Trunk, just accept the incoming changes. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Loading- > trunk-updates-in-5-1-tp4912465p4912479.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160825/620cec78/attachment-0001.htm From hannes.hirzel at gmail.com Thu Aug 25 13:12:18 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Thu Aug 25 13:12:20 2016 Subject: [squeak-dev] [5.1] How to (re)-establish isolated projects ? Message-ID: Hello The class comment of class 'Project' (Squeak 3.8 [1]) mentions isolated projects. In 5.1 this is no longer the case but a method #isolatedProject still exists (in class ChangeSet). In an isolated project, all new global variables (including new classes) are stored in the project-local environment, and all changes to preexisting classes are revoked when you leave the project. Is this mechanism superseeded by the still imcomplete Environments approach [2]? In Squeak 5.1 Environment allInstances gives {Smalltalk} [3] How can I use an additional Environment in a subclass of MorphicProject to get a similar effect. Colin Putney writes after he had fixed project saving and loading [4] It should also work for multi-environment images, if we create UI for setting the "current" environment, or actually make use of the "environment" instance variable in Project. Regards Hannes [1] http://wiki.squeak.org/squeak/1020 ; version 'Last updated at 12:05 pm UTC on 16 January 2006' [2] http://wiki.squeak.org/squeak/6220 [3] SystemDictionary is no longer used SystemDictionary allInstances #() [4] http://wiki.squeak.org/squeak/6218 From Marcel.Taeumel at hpi.de Thu Aug 25 13:14:36 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 25 13:16:15 2016 Subject: [squeak-dev] Re: Loading trunk updates in 5.1 In-Reply-To: References: <1472037906394-4912473.post@n4.nabble.com> <1472039438083-4912479.post@n4.nabble.com> Message-ID: <1472130876423-4912618.post@n4.nabble.com> Bert Freudenberg wrote > I know how to deal with the merge dialogs, it's not a problem *for me*. I > know how to manually change the ancestry so it looks like a clean package > again after merging. But not everybody does, and I wouldn't expect them > to. > The point of having a simple "update" button is that it pretty much "just > works". > > It it is a problem for someone downloading the release image and trying to > switch to trunk. There shouldn't be any unnecessary merge dialogs. > > (another problem is that in the release image not all packages are clean) > > - Bert - > > > On Wed, Aug 24, 2016 at 1:50 PM, marcel.taeumel < > Marcel.Taeumel@ > > > wrote: > >> marcel.taeumel wrote >> > >> > Bert Freudenberg wrote >> >> ... shows lots of merge dialogs. We need to merge the 5.1 specific >> >> versions >> >> back into trunk, I guess? >> >> >> >> - Bert - >> > I did copy some MCZ but made some other changes twice. No need to copy >> MCZ >> > at the moment. All changes in 5.1 are already in trunk. If in doubt, >> hit >> > "accept". >> > >> > Best, >> > marcel >> >> I double-checked. There were 3 merge dialogs for these three methods: >> >> ScrollBar >> #scrollPageInit: >> View >> #setDefaultBackgroundColor >> ReleaseBuilder class >> #initialize >> >> When converting a 5.1 image to Trunk, just accept the incoming changes. >> >> Best, >> Marcel >> >> >> >> -- >> View this message in context: http://forum.world.st/Loading- >> trunk-updates-in-5-1-tp4912465p4912479.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> Hi Bert, I didn't think of using a release image and switching to trunk as being a task for normal users to do. Especially, since you mentioned that merge dialogs are too hard for them, so is to find the right places in the image to re-configure the update stream for Trunk. There is no simple button click for that either. I am a little bit confused about our target user group here. The packages are as clean as they can be at the moment given the troubles of broken code, build automation, and hot fixes to make it work at all. 311Deprecated -> Is marked dirty because there is an issue with the print-string of trait definitions. CommandLine -> Is marked dirty because of the hot fix we need on Travis. See https://github.com/squeak-smalltalk/squeak-app/blob/master/prepare_image.st line 13 to 15. This could be fixed by using separate update scripts for each release target. System -> Is marked dirty because there is some unclear side-effect when setting the preferences, which keeps on compiling methods automatically even if those methods are already present. Best, Marcel -- View this message in context: http://forum.world.st/Loading-trunk-updates-in-5-1-tp4912465p4912618.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From Marcel.Taeumel at hpi.de Thu Aug 25 13:16:33 2016 From: Marcel.Taeumel at hpi.de (marcel.taeumel) Date: Thu Aug 25 13:18:12 2016 Subject: [squeak-dev] Re: Struggling with Update Maps In-Reply-To: References: <1472038424359-4912474.post@n4.nabble.com> <1472040984391-4912483.post@n4.nabble.com> Message-ID: <1472130993447-4912620.post@n4.nabble.com> Bert Freudenberg wrote > On Wed, Aug 24, 2016 at 2:16 PM, marcel.taeumel < > Marcel.Taeumel@ > > > wrote: > >> marcel.taeumel wrote >> > Hey, there. >> > >> > "update-mt.389.mcm" removes "311Deprecated". >> > "update-mt.390.mcm" removes "SmallLand". >> > >> > This seems to work fine in a foreign, updated image. In the the that >> > created those update maps, however, those packages seem to return on >> > update. :-/ I suspect that there is some kind of bug when processing >> the >> > update maps... >> > >> > Best, >> > Marcel >> >> Here is a thought: >> - The system seems to remember that the latest update config was >> "update-mt.387.mcm" >> - It starts processing "update-mt.388.mcm" (although I did create and >> upload >> it) loading "311Deprecated" and "SmallLand" again. >> - It starts processing "update-mt.389.mcm" (although I did create and >> upload >> it) not finding "311Deprecated" >> there. >> - It starts processing "update-mt.390.mcm" (although I did create and >> upload >> it) not finding "SmallLand" there. >> >> However, the #postLoad scripts in SqueakVersion where not executed again >> and >> hence I end up having "311Deprecated" and "SmallLand" in the image again. >> :-/ >> >> I see two ways to fix this: >> - If I create a new update config, remember that for the next update in >> the >> image. >> - Re-execute that post-load scripts again if possible >> >> I prefer the first alternative. > > > Third alternative: delete the packages manually. > > I would not like my image to be set to any update map I publish. We > occasionally have to fix an older update map to work around update > problems. This happens way more often than the problem of removing a > package from the update map. Actually, what I would do is publishing the > update map and *not* saving my image but restarting it to test that > everything works. > > - Bert - Hi Bert, I did that some time ago until that "accidential" save happened too often. Now I have a seprate try-out image. Still, there is this inconsistency with the execution of postLoad-Scripts and the processing of update maps at the moment. Best, Marcel -- View this message in context: http://forum.world.st/Struggling-with-Update-Maps-tp4912474p4912620.html Sent from the Squeak - Dev mailing list archive at Nabble.com. From dram.wang at gmail.com Thu Aug 25 14:05:32 2016 From: dram.wang at gmail.com (Xin Wang) Date: Thu Aug 25 14:05:34 2016 Subject: [squeak-dev] Default file encoding in File List when reading and editing files Message-ID: Hi all, I found that `FileList >>defaultEncoderFor:` is `Latin1TextConverter`, which is inconsistent with the encoding used when save contents into file in `Workspace`, which I think is `UTF8TextConverter`. Can we make them consistent? Finally, congratulations for a wonderful release, Squeak 5.1 is really cool. -- Xin Wang -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160825/797eeee9/attachment.htm From asqueaker at gmail.com Thu Aug 25 17:50:07 2016 From: asqueaker at gmail.com (Chris Muller) Date: Thu Aug 25 17:50:51 2016 Subject: [squeak-dev] Re: How to use larger font in a TextMorph? In-Reply-To: <1472124669403-4912598.post@n4.nabble.com> References: <1472124669403-4912598.post@n4.nabble.com> Message-ID: I'm not sure what happened, it seems to be working again. If I see it again I'll be sure to isolate it better. On Thu, Aug 25, 2016 at 6:31 AM, marcel.taeumel wrote: > Chris Muller-4 wrote >> The halos which used to open the font chooser now only present a >> ListChooser, so I can't seem to select a particular font size or >> emphasis using the halos. > > Hi Chris, > > the way the user can change font, style, and emphasis via the halo of a > TextMorph did not change. I confirmed it with Squeak 4.5. You have this: > > > > There are three halo buttons: font, style, or emphasis change. The left one > shows the font chooser, the middle one a list chooser and the right one also > a list chooser. > > Please take a quick look at some previous Squeak image on your own machine. > ;-) > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/How-to-use-larger-font-in-a-TextMorph-tp4912519p4912598.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > From leves at caesar.elte.hu Thu Aug 25 21:24:34 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Thu Aug 25 21:24:39 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: <1472108751856-4912555.post@n4.nabble.com> References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <1472058104916-4912509.post@n4.nabble.com> <1472058829178-4912510.post@n4.nabble.com> <1472108751856-4912555.post@n4.nabble.com> Message-ID: On Thu, 25 Aug 2016, marcel.taeumel wrote: > Levente Uzonyi wrote >> On Wed, 24 Aug 2016, marcel.taeumel wrote: >> >>> marcel.taeumel wrote >>>> >>>> Chris Muller-3 wrote >>>>> Hi Marcel, if you are talking about introducing some kind of code to >>>>> guard against someone mis-using Morphic, then, yes, it *is* a relevant >>>>> point ot the discussion. You can render your image just as unusable >>>>> with >>>>> >>>>> String new become: nil >>>>> >>>>> but we don't want to guard against that.. If Etoys or Kedama are >>>>> doing that, shouldn't they be changed to use WorldState >>>>> addDeferredUIMessage:? That's the SharedQueue designed to let apps >>>>> with background processes append operations to be handled by the UI >>>>> Process.. >>>>> >>>>> On Tue, Aug 23, 2016 at 4:26 AM, marcel.taeumel < >>> >>>>> Marcel.Taeumel@ >>> >>>>> > wrote: >>>>>> Chris Muller-3 wrote >>>>>>> Morphic is designed to run in one Process, so you shouldn't need any >>>>>>> multi-process coordination because you should only be doing drawing >>>>>>> in >>>>>>> the UI process. Right? >>>>>>> >>>>>>> On Mon, Aug 22, 2016 at 9:51 AM, Marcel Taeumel < >>>>>> >>>>>>> marcel.taeumel@ >>>>>> >>>>>>> > wrote: >>>>>>>> Hi, there. >>>>>>>> >>>>>>>> Take this Morph here: >>>>>>>> >>>>>>>> initialize >>>>>>>> super initialize. >>>>>>>> semaphore := Semaphore forMutualExclusion. >>>>>>>> >>>>>>>> step >>>>>>>> semaphore critical: [ [] repeat ]. >>>>>>>> >>>>>>>> drawOn: aCanvas >>>>>>>> semaphore critical: [super drawOn: aCanvas]. >>>>>>>> >>>>>>>> If you create such a morph and open it in the world, the UI process >>>>>>>> will >>>>>>>> freeze because of that endless loop in the step method. Okay. The >>>>>>>> tricky >>>>>>>> thing is, that you cannot use [CMD]+[.] because the drawing code >>>>>>>> waits >>>>>>>> for >>>>>>>> the same semaphore that is currently used in the morph's step. You >>>>>>>> will >>>>>>>> not >>>>>>>> see a debugger appear. The freshly spawned UI process will block >>>>>>>> right >>>>>>>> awai. >>>>>>>> The well known big red cross/box does not appear because there is no >>>>>>>> place >>>>>>>> to detect this situation. >>>>>>>> >>>>>>>> An easy fix would be to tell the application developer to use >>>>>>>> #critical:ifLocked: in that drawing code. If that semaphore is >>>>>>>> really >>>>>>>> necessary. >>>>>>>> >>>>>>>> However, can there be a way for Morphic to detect such issues and >>>>>>>> flag >>>>>>>> that >>>>>>>> Morph for the big red box? (i.e. "morph setProperty: #errorOnDraw >>>>>>>> toValue: >>>>>>>> true") Could there be a notification for the Morphic framework to >>>>>>>> look >>>>>>>> out >>>>>>>> for such as WaitOnCriticalSection to flag that morph as bad? Could >>>>>>>> that >>>>>>>> primitive 86 send such a notification efficiently? Just once? ^__^ >>>>>>>> >>>>>>>> If yes, Morphic could draw its world like this (pseudo code!): >>>>>>>> ... >>>>>>>> [aWorld displayWorld] on: WaitOnCriticalSection do: [:err | >>>>>>>> err "..." findBadMorph "..." setProperty: #errorOnDraw toValue: >>>>>>>> true.] >>>>>>>> ... >>>>>>>> >>>>>>>> Morphic would be more robust. >>>>>>>> >>>>>>>> Best, >>>>>>>> Marcel >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>> >>>>>> Hi Chris, hi Bert, >>>>>> >>>>>> if you need an example, well, Etoys/Kedama makes those things in the >>>>>> latest >>>>>> Trunk version. ;-) >>>>>> >>>>>> It is not the point whether applications should do this or not but our >>>>>> recently changed semantics of semaphores might render your image >>>>>> unusable >>>>>> because of unusual application code. I see an opportunity to improve >>>>>> Morphics robustness and help users debug their applications without >>>>>> image >>>>>> freeze/lock out. >>>>>> >>>>>> So, I want to discuss here, whether there could be a Notification sent >>>>>> whenever an object/process starts waiting on a semaphore. :-) >>>>>> >>>>>> Best, >>>>>> Marcel >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> View this message in context: >>>>>> http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912307.html >>>>>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>>>>> >>>> Hi Chris, >>>> >>>> hehe, interesting comparison. However, waiting on a semaphore is not so >>>> obviously "dumb" as is "String become: nil." If this could be a chance >>>> to >>>> make Morphic more robust without any maintenance or performance >>>> overhead, >>>> we should do it. >>>> >>>> Best, >>>> Marcel >>> >>> Of course, I made that example here very clear and simple for everybody >>> to >>> think about. In bigger projects, however, such code might not look this >>> obvious. The semaphore-wait may just be slipped into drawing code by >>> accident. We can agree that there might usually be no need to wait on >>> semaphores in drawing code. Sure, we never make any mistakes. ;-P We are >>> good programmers. Haha, that's a classic. :-) >>> >>> I regard exception handling as being cheap. Performance-wise. Frameworks >>> with a plentitude of features have to robust wherever possible. We just >>> cannot always point the finger on the application developer and say: >>> "It's >>> just your fault. You are using the environment/framework wrong." >> >> Exception handling, especially in Cog/Spur, is expensive. Frames have to >> be created, marked, walked. >> >> Levente >> >>> >>> Again: No, waiting on a semaphore in drawing code does absolutely NOT >>> compare to "String new become: nil" because using #become: as a strong >>> sent >>> of meta-programming on it while semaphores do not. Well, this is just my >>> opinion. :-) >>> >>> Best, >>> Marcel >>> >>> >>> >>> -- >>> View this message in context: >>> http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912510.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>> >>> > > Hi Levente, > > with "expensive" you mean "not optimized", right? I am asking because we use It may not cause noticable slowdown, especially on a fast machine, but it has a rather high overhead compared to not using it. The better the JIT gets, the higher the overhead will be. I vaguely remember that in javascript it can be up to 2000 times slower. > our exception mechanism for accessing source code and I also know about a > game that used Notifications as a core communication concept in a game. :-) > > --> CurrentReadOnlySourceFiles I wanted to change CurrentReadOnlySourceFiles to be a ProcessLocalVariable when they got added to the Trunk, but it's not an easy thing to do, especially through the updater. Levente > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/Using-Semaphores-in-drawing-code-tp4912213p4912555.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > From btc at openinworld.com Fri Aug 26 06:12:32 2016 From: btc at openinworld.com (Ben Coman) Date: Fri Aug 26 06:12:56 2016 Subject: [squeak-dev] Re: Using Semaphores in drawing code In-Reply-To: References: <95cbfa2f-e5a5-4049-8696-64e855e8a132@getmailbird.com> <1471944392511-4912307.post@n4.nabble.com> <1472058104916-4912509.post@n4.nabble.com> <1472058829178-4912510.post@n4.nabble.com> <1472108751856-4912555.post@n4.nabble.com> Message-ID: On Thu, Aug 25, 2016 at 6:04 PM, Bert Freudenberg wrote: > Marcel, > > if we could think of a good way to detect the lockup we should definitely > add it. > > Raising a signal every time a process waits on a semaphore is definitely not > a good way. > > Having a watchdog process monitoring the UI process sounds a lot better. But > maybe there are other ideas. > > If we had a concrete proposal this might become a more fruitful discussion > :) > > - Bert - >From my industrial automation experience, we'll often set up cross-monitoring watchdogs between two PLCs [1] in different parts of the plant, one setting a bit to 1 and the other setting a bit to 0. If either sees this watchdog-toggle not change for a defined period, a problem is identified with the other. In Squeak's case, the Morphic UI process would cross monitor the watchdog process in case it terminates for some reason. When the watchdog process notices a problem, I guess it would: a. check if the process is on a Semaphore wait queue and remove it b. inject an Exception into the UI process that would operate something like #terminate, but walk the stack back to an appropriate handler and then continue. This could cover more than being blocked on Semaphores, and also scenarios where a long running calculation gets out of control, and also some newcomer errors like "[true] whileTrue" in the Workspace. Although sometimes you want a long running calculation executed from the Workspace. So my questions are: 1. Where would be a good place for the watchdog-toggle variable to live? 2. How can one process inject an Exception into another process? [1] https://en.wikipedia.org/wiki/Programmable_logic_controller. cheers -ben > > On Thu, Aug 25, 2016 at 9:05 AM, marcel.taeumel > wrote: >> >> Hi Levente, >> >> with "expensive" you mean "not optimized", right? I am asking because we >> use >> our exception mechanism for accessing source code and I also know about a >> game that used Notifications as a core communication concept in a game. >> :-) >> >> --> CurrentReadOnlySourceFiles >> >> Best, >> Marcel > > > > From vaidasd at gmail.com Fri Aug 26 10:46:40 2016 From: vaidasd at gmail.com (=?UTF-8?Q?Vaidotas_Did=C5=BEbalis?=) Date: Fri Aug 26 10:47:25 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken Message-ID: Hello, Project saving is broken. When trying to save Morphic project to disk on 64bit image on Windows user is locked in the loop of popping up emergency evaluator, you have to kill Squeak as a OS process. See the docking bar, the second menu item is the Project menu. We need to add this to the known Issues session of the 5.1 release notes at least. This bug was pushed with Environments package since 4.5. Is anyone uses Environments? Can they be removed? Why Environments is not loadable package? regards, Vaidotas -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160826/6fcbdcb4/attachment.htm From herbertkoenig at gmx.net Fri Aug 26 11:14:58 2016 From: herbertkoenig at gmx.net (Herbert =?UTF-8?B?S8O2bmln?=) Date: Fri Aug 26 11:15:04 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: Message-ID: <20160826131458.42cc5dc3@herpi5> Hi Vaidotas, according to the end of http://wiki.squeak.org/squeak/6218 this is now a VM problem. The image side shold have been solved. From older discussions I remember that environments are too deeply entangled with the guts of Squeak that it's not feasible to remove them again. And then some people may use them. Cheers, Herbert Am Fri, 26 Aug 2016 13:46:40 +0300 schrieb Vaidotas Did?balis : > Hello, > Project saving is broken. When trying to save Morphic project to disk > on 64bit image on Windows user is locked in the loop of popping up > emergency evaluator, you have to kill Squeak as a OS process. See the > docking bar, the second menu item is the Project menu. We need to add > this to the known Issues session of the 5.1 release notes at least. > This bug was pushed with Environments package since 4.5. Is anyone > uses Environments? Can they be removed? Why Environments is not > loadable package? regards, > Vaidotas From edgardec2005 at gmail.com Fri Aug 26 11:32:27 2016 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Fri Aug 26 11:32:38 2016 Subject: [squeak-dev] Kedama Lives !! Message-ID: https://youtu.be/oErpLSeWp-o Edgar @morplenauta From hannes.hirzel at gmail.com Fri Aug 26 12:16:03 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Aug 26 12:16:15 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: <20160826131458.42cc5dc3@herpi5> References: <20160826131458.42cc5dc3@herpi5> Message-ID: Hello Vaidotas It can confirm that Project saving worked again in Squeak 4.6 in December 2015 with the fixes applied done by Colin Putney[1]. I did some tests then. The 64bit image is experimental. I just tested Project saving in Squeak 5.1 (32bit image) in MSWindows and on Linux. It does not work either. So we need to wait for a VM update. Regards Hannes [1] http://wiki.squeak.org/squeak/6218 With these four changes, it's possible to save and load projects in a Squeak 4.6 image. It doesn't work in a trunk image, however. The Spur VM crashes when saving a project. I've reported that on the VM list. It also fails to load an image segment - looks like the primitive for that isn't quite finished in Spur. On 8/26/16, Herbert K?nig wrote: > Hi Vaidotas, > > according to the end of > http://wiki.squeak.org/squeak/6218 > this is now a VM problem. The image side shold have been solved. > > From older discussions I remember that environments are too deeply > entangled with the guts of Squeak that it's not feasible to remove them > again. > > And then some people may use them. > > Cheers, > > Herbert > > Am Fri, 26 Aug 2016 13:46:40 +0300 > schrieb Vaidotas Did?balis : > >> Hello, >> Project saving is broken. When trying to save Morphic project to disk >> on 64bit image on Windows user is locked in the loop of popping up >> emergency evaluator, you have to kill Squeak as a OS process. See the >> docking bar, the second menu item is the Project menu. We need to add >> this to the known Issues session of the 5.1 release notes at least. >> This bug was pushed with Environments package since 4.5. Is anyone >> uses Environments? Can they be removed? Why Environments is not >> loadable package? regards, >> Vaidotas > > > From hannes.hirzel at gmail.com Fri Aug 26 12:20:30 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Aug 26 12:20:33 2016 Subject: [squeak-dev] Kedama Lives !! In-Reply-To: References: Message-ID: Hello Edgar Nice! It seems to be StarSqueak. (Kedama is the Etoys version). How did you get it installed? --Hannes On 8/26/16, Edgar J. De Cleene wrote: > https://youtu.be/oErpLSeWp-o > > > Edgar > @morplenauta > > > > From herbertkoenig at gmx.net Fri Aug 26 12:22:56 2016 From: herbertkoenig at gmx.net (Herbert =?UTF-8?B?S8O2bmln?=) Date: Fri Aug 26 12:23:00 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> Message-ID: <20160826142256.6e548319@herpi5> Hi Hannes, any tips how to get at that image and what VM to use? I still use 4.4 for development and later versions just for deployment. Thanks, Herbert Am Fri, 26 Aug 2016 13:16:03 +0100 schrieb "H. Hirzel" : > Hello Vaidotas > > It can confirm that Project saving worked again in Squeak 4.6 in > December 2015 with the fixes applied done by Colin Putney[1]. I did > some tests then. > > The 64bit image is experimental. > > I just tested Project saving in Squeak 5.1 (32bit image) in MSWindows > and on Linux. It does not work either. So we need to wait for a VM > update. > > Regards > Hannes > > [1] http://wiki.squeak.org/squeak/6218 > > With these four changes, it's possible to save and load projects in a > Squeak 4.6 image. It doesn't work in a trunk image, however. The Spur > VM crashes when saving a project. I've reported that on the VM list. > It also fails to load an image segment - looks like the primitive for > that isn't quite finished in Spur. > > > On 8/26/16, Herbert K?nig wrote: > > Hi Vaidotas, > > > > according to the end of > > http://wiki.squeak.org/squeak/6218 > > this is now a VM problem. The image side shold have been solved. > > > > From older discussions I remember that environments are too deeply > > entangled with the guts of Squeak that it's not feasible to remove > > them again. > > > > And then some people may use them. > > > > Cheers, > > > > Herbert > > > > Am Fri, 26 Aug 2016 13:46:40 +0300 > > schrieb Vaidotas Did?balis : > > > >> Hello, > >> Project saving is broken. When trying to save Morphic project to > >> disk on 64bit image on Windows user is locked in the loop of > >> popping up emergency evaluator, you have to kill Squeak as a OS > >> process. See the docking bar, the second menu item is the Project > >> menu. We need to add this to the known Issues session of the 5.1 > >> release notes at least. This bug was pushed with Environments > >> package since 4.5. Is anyone uses Environments? Can they be > >> removed? Why Environments is not loadable package? regards, > >> Vaidotas > > > > > > > From hannes.hirzel at gmail.com Fri Aug 26 12:43:06 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Aug 26 12:43:08 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: <20160826142256.6e548319@herpi5> References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> Message-ID: Hallo Herbert I am currently using the 5.1 release for development. I think it was 4 fixes in the Inbox and I just filed them in an Squeak 4.6 image (updated from the Squeak 4.6 all-in-one-release) in December 2015 http://forum.world.st/The-Trunk-System-cwp-781-mcz-td4864083.html http://forum.world.st/The-Trunk-System-cwp-782-mcz-td4864086.html http://forum.world.st/The-Inbox-Morphic-cwp-1055-mcz-td4864087.html http://forum.world.st/The-Inbox-Morphic-jmg-1055-mcz-td4864091.html It this is not sufficient give me some time to dig out that 4.6 image from the archive and try to recover what I did. --Hannes On 8/26/16, Herbert K?nig wrote: > Hi Hannes, > > any tips how to get at that image and what VM to use? I still use 4.4 > for development and later versions just for deployment. > > Thanks, > > Herbert > > Am Fri, 26 Aug 2016 13:16:03 +0100 > schrieb "H. Hirzel" : > >> Hello Vaidotas >> >> It can confirm that Project saving worked again in Squeak 4.6 in >> December 2015 with the fixes applied done by Colin Putney[1]. I did >> some tests then. >> >> The 64bit image is experimental. >> >> I just tested Project saving in Squeak 5.1 (32bit image) in MSWindows >> and on Linux. It does not work either. So we need to wait for a VM >> update. >> >> Regards >> Hannes >> >> [1] http://wiki.squeak.org/squeak/6218 >> >> With these four changes, it's possible to save and load projects in a >> Squeak 4.6 image. It doesn't work in a trunk image, however. The Spur >> VM crashes when saving a project. I've reported that on the VM list. >> It also fails to load an image segment - looks like the primitive for >> that isn't quite finished in Spur. >> >> >> On 8/26/16, Herbert K?nig wrote: >> > Hi Vaidotas, >> > >> > according to the end of >> > http://wiki.squeak.org/squeak/6218 >> > this is now a VM problem. The image side shold have been solved. >> > >> > From older discussions I remember that environments are too deeply >> > entangled with the guts of Squeak that it's not feasible to remove >> > them again. >> > >> > And then some people may use them. >> > >> > Cheers, >> > >> > Herbert >> > >> > Am Fri, 26 Aug 2016 13:46:40 +0300 >> > schrieb Vaidotas Did?balis : >> > >> >> Hello, >> >> Project saving is broken. When trying to save Morphic project to >> >> disk on 64bit image on Windows user is locked in the loop of >> >> popping up emergency evaluator, you have to kill Squeak as a OS >> >> process. See the docking bar, the second menu item is the Project >> >> menu. We need to add this to the known Issues session of the 5.1 >> >> release notes at least. This bug was pushed with Environments >> >> package since 4.5. Is anyone uses Environments? Can they be >> >> removed? Why Environments is not loadable package? regards, >> >> Vaidotas >> > >> > >> > >> > > > > From vaidasd at gmail.com Fri Aug 26 13:03:54 2016 From: vaidasd at gmail.com (=?UTF-8?Q?Vaidotas_Did=C5=BEbalis?=) Date: Fri Aug 26 13:04:37 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> Message-ID: On Fri, Aug 26, 2016 at 3:43 PM, H. Hirzel wrote: > Hallo Herbert > > I am currently using the 5.1 release for development. > > I think it was > > 4 fixes in the Inbox and I just filed them in an Squeak 4.6 image > (updated from the Squeak 4.6 all-in-one-release) in December 2015 > > http://forum.world.st/The-Trunk-System-cwp-781-mcz-td4864083.html > http://forum.world.st/The-Trunk-System-cwp-782-mcz-td4864086.html > http://forum.world.st/The-Inbox-Morphic-cwp-1055-mcz-td4864087.html > http://forum.world.st/The-Inbox-Morphic-jmg-1055-mcz-td4864091.html > > It this is not sufficient give me some time to dig out that 4.6 image > from the archive and try to recover what I did. > > --Hannes > > Thank you all for clarification. Last two links containt broken links to mcz files... -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160826/db09200a/attachment.htm From hannes.hirzel at gmail.com Fri Aug 26 13:25:56 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Aug 26 13:25:58 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> Message-ID: You may get the files within Squeak directly from the Inbox (in a Monticello Browser). H. On 8/26/16, Vaidotas Did?balis wrote: > On Fri, Aug 26, 2016 at 3:43 PM, H. Hirzel wrote: > >> Hallo Herbert >> >> I am currently using the 5.1 release for development. >> >> I think it was >> >> 4 fixes in the Inbox and I just filed them in an Squeak 4.6 image >> (updated from the Squeak 4.6 all-in-one-release) in December 2015 >> >> http://forum.world.st/The-Trunk-System-cwp-781-mcz-td4864083.html >> http://forum.world.st/The-Trunk-System-cwp-782-mcz-td4864086.html >> http://forum.world.st/The-Inbox-Morphic-cwp-1055-mcz-td4864087.html >> http://forum.world.st/The-Inbox-Morphic-jmg-1055-mcz-td4864091.html >> >> It this is not sufficient give me some time to dig out that 4.6 image >> from the archive and try to recover what I did. >> >> --Hannes >> >> Thank you all for clarification. Last two links containt broken links to > mcz files... > From hannes.hirzel at gmail.com Fri Aug 26 13:26:30 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Aug 26 13:26:36 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> Message-ID: Or redo the changes based on what you see in the mails ... :-) On 8/26/16, H. Hirzel wrote: > You may get the files within Squeak directly from the Inbox (in a > Monticello Browser). > > H. > > On 8/26/16, Vaidotas Did?balis wrote: >> On Fri, Aug 26, 2016 at 3:43 PM, H. Hirzel >> wrote: >> >>> Hallo Herbert >>> >>> I am currently using the 5.1 release for development. >>> >>> I think it was >>> >>> 4 fixes in the Inbox and I just filed them in an Squeak 4.6 image >>> (updated from the Squeak 4.6 all-in-one-release) in December 2015 >>> >>> http://forum.world.st/The-Trunk-System-cwp-781-mcz-td4864083.html >>> http://forum.world.st/The-Trunk-System-cwp-782-mcz-td4864086.html >>> http://forum.world.st/The-Inbox-Morphic-cwp-1055-mcz-td4864087.html >>> http://forum.world.st/The-Inbox-Morphic-jmg-1055-mcz-td4864091.html >>> >>> It this is not sufficient give me some time to dig out that 4.6 image >>> from the archive and try to recover what I did. >>> >>> --Hannes >>> >>> Thank you all for clarification. Last two links containt broken links to >> mcz files... >> > From herbertkoenig at gmx.net Fri Aug 26 13:40:23 2016 From: herbertkoenig at gmx.net (Herbert =?UTF-8?B?S8O2bmln?=) Date: Fri Aug 26 13:40:28 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> Message-ID: <20160826154023.46ca80bc@herpi5> Thanks Hannes, I'll let you know. A typical image of mine contains lots of projects with documentation and ideas I need to be able to save. Cheers, Herbert Am Fri, 26 Aug 2016 13:43:06 +0100 schrieb "H. Hirzel" : > Hallo Herbert > > I am currently using the 5.1 release for development. > > I think it was > > 4 fixes in the Inbox and I just filed them in an Squeak 4.6 image > (updated from the Squeak 4.6 all-in-one-release) in December 2015 > > http://forum.world.st/The-Trunk-System-cwp-781-mcz-td4864083.html > http://forum.world.st/The-Trunk-System-cwp-782-mcz-td4864086.html > http://forum.world.st/The-Inbox-Morphic-cwp-1055-mcz-td4864087.html > http://forum.world.st/The-Inbox-Morphic-jmg-1055-mcz-td4864091.html > > It this is not sufficient give me some time to dig out that 4.6 image > from the archive and try to recover what I did. > > --Hannes > > > On 8/26/16, Herbert K?nig wrote: > > Hi Hannes, > > > > any tips how to get at that image and what VM to use? I still use > > 4.4 for development and later versions just for deployment. > > > > Thanks, > > > > Herbert > > > > Am Fri, 26 Aug 2016 13:16:03 +0100 > > schrieb "H. Hirzel" : > > > >> Hello Vaidotas > >> > >> It can confirm that Project saving worked again in Squeak 4.6 in > >> December 2015 with the fixes applied done by Colin Putney[1]. I did > >> some tests then. > >> > >> The 64bit image is experimental. > >> > >> I just tested Project saving in Squeak 5.1 (32bit image) in > >> MSWindows and on Linux. It does not work either. So we need to > >> wait for a VM update. > >> > >> Regards > >> Hannes > >> > >> [1] http://wiki.squeak.org/squeak/6218 > >> > >> With these four changes, it's possible to save and load projects > >> in a Squeak 4.6 image. It doesn't work in a trunk image, however. > >> The Spur VM crashes when saving a project. I've reported that on > >> the VM list. It also fails to load an image segment - looks like > >> the primitive for that isn't quite finished in Spur. > >> > >> > >> On 8/26/16, Herbert K?nig wrote: > >> > Hi Vaidotas, > >> > > >> > according to the end of > >> > http://wiki.squeak.org/squeak/6218 > >> > this is now a VM problem. The image side shold have been solved. > >> > > >> > From older discussions I remember that environments are too > >> > deeply entangled with the guts of Squeak that it's not feasible > >> > to remove them again. > >> > > >> > And then some people may use them. > >> > > >> > Cheers, > >> > > >> > Herbert > >> > > >> > Am Fri, 26 Aug 2016 13:46:40 +0300 > >> > schrieb Vaidotas Did?balis : > >> > > >> >> Hello, > >> >> Project saving is broken. When trying to save Morphic project to > >> >> disk on 64bit image on Windows user is locked in the loop of > >> >> popping up emergency evaluator, you have to kill Squeak as a OS > >> >> process. See the docking bar, the second menu item is the > >> >> Project menu. We need to add this to the known Issues session > >> >> of the 5.1 release notes at least. This bug was pushed with > >> >> Environments package since 4.5. Is anyone uses Environments? > >> >> Can they be removed? Why Environments is not loadable package? > >> >> regards, Vaidotas > >> > > >> > > >> > > >> > > > > > > > > > From Yoshiki.Ohshima at acm.org Fri Aug 26 17:44:56 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Fri Aug 26 17:44:59 2016 Subject: [squeak-dev] context menu pop up behavior Message-ID: I don't follow all the conversation lately (sorry) but I've been bitten by a different context menu launching behavior in modern images. Let us say there is an item selected in a list (say in a browser), and then right click in the pane but not directly on the selected item. It used to be the case that the selection does not change but it pops up a context menu and the action I choose from the menu affects the originally selected item. Nowadays, it selects the different item and then pops up the menu for that new item. If you can point me to some past discussion (I'm pretty sure there was) on the list, or some other rationale, it'd be greatly appreciated. Thank you! -- -- Yoshiki From tim at rowledge.org Fri Aug 26 18:44:56 2016 From: tim at rowledge.org (tim Rowledge) Date: Fri Aug 26 18:45:02 2016 Subject: [squeak-dev] [ANN] Squeak 5.1 released; In-Reply-To: <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> References: <29d9ad39-70ad-40b5-bfbb-30e0d5c83bb1@getmailbird.com> <51fabaa5-e1df-c699-f093-740f9a87ea27@gmx.net> Message-ID: <4B2D692D-1377-40AB-BD7E-3F9B89136FC9@rowledge.org> > Am 23.08.2016 um 16:30 schrieb Marcel Taeumel: >> We are happy to announce the release of Squeak 5.1! >> >> Visit the Website [1], ? and click on the donate button. I?ve said it before and I guess I?ll say it plenty more times - > This is also a good time to mention the Magic Donate Button on squeak.org. > A lot of people have had a lot of fun using Squeak over the last 20 years. A non-trivial number have made a good deal of money from using it. Several companies have done well from it. Time to give back a bit. > > How about a personal dollar-a-year? How about a business dollar-a-day? For US based donors, the Squeak Foundation is a chapter of the Software Freedom Conservancy and thus donations are mostly tax-deductable ( see https://sfconservancy.org/donate/) so how about making it a dollar-33-a-day? > Right now we need to migrate the squeak website to new servers, which takes a fair bit of work. We really ought to at least make a symbolic payment to the brave people that do it for us. For that we need some money and the bank account is essentially empty. The donate button is just below the three quick-download buttons. Go on, go and click on it. You know you should. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful random insult:- His seat back is not in the full upright and locked position. From edgardec2005 at gmail.com Fri Aug 26 19:31:13 2016 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Fri Aug 26 19:31:25 2016 Subject: [squeak-dev] Kedama Lives !! In-Reply-To: Message-ID: Thanks to Stephanne Duccase who did a .mcz once I found in the dungeons and put into 4.6 and 5.1 without any trouble On 8/26/16, 9:20 AM, "H. Hirzel" wrote: > Hello Edgar > > Nice! It seems to be StarSqueak. (Kedama is the Etoys version). > > How did you get it installed? > > --Hannes From hannes.hirzel at gmail.com Fri Aug 26 19:48:32 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Fri Aug 26 19:48:36 2016 Subject: [squeak-dev] Kedama Lives !! In-Reply-To: References: Message-ID: An where do you find this mcz for StarSqueak? On 8/26/16, Edgar J. De Cleene wrote: > Thanks to Stephanne Duccase who did a .mcz once > I found in the dungeons and put into 4.6 and 5.1 without any trouble > > > On 8/26/16, 9:20 AM, "H. Hirzel" wrote: > >> Hello Edgar >> >> Nice! It seems to be StarSqueak. (Kedama is the Etoys version). >> >> How did you get it installed? >> >> --Hannes > > > > From asqueaker at gmail.com Fri Aug 26 20:40:17 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Aug 26 20:41:02 2016 Subject: [squeak-dev] context menu pop up behavior In-Reply-To: References: Message-ID: Hi Yoshiki, you may toggle this behavior with the "Menu request updates list/tree selection" preference. On Fri, Aug 26, 2016 at 12:44 PM, Yoshiki Ohshima wrote: > I don't follow all the conversation lately (sorry) but I've been > bitten by a different context menu launching behavior in modern > images. Let us say there is an item selected in a list (say in a > browser), and then right click in the pane but not directly on the > selected item. It used to be the case that the selection does not > change but it pops up a context menu and the action I choose from the > menu affects the originally selected item. Nowadays, it selects the > different item and then pops up the menu for that new item. > > If you can point me to some past discussion (I'm pretty sure there > was) on the list, or some other rationale, it'd be greatly > appreciated. > > Thank you! > > -- > -- Yoshiki > From asqueaker at gmail.com Fri Aug 26 20:41:28 2016 From: asqueaker at gmail.com (Chris Muller) Date: Fri Aug 26 20:42:11 2016 Subject: [squeak-dev] context menu pop up behavior In-Reply-To: References: Message-ID: circa April, 2015. On Fri, Aug 26, 2016 at 12:44 PM, Yoshiki Ohshima wrote: > I don't follow all the conversation lately (sorry) but I've been > bitten by a different context menu launching behavior in modern > images. Let us say there is an item selected in a list (say in a > browser), and then right click in the pane but not directly on the > selected item. It used to be the case that the selection does not > change but it pops up a context menu and the action I choose from the > menu affects the originally selected item. Nowadays, it selects the > different item and then pops up the menu for that new item. > > If you can point me to some past discussion (I'm pretty sure there > was) on the list, or some other rationale, it'd be greatly > appreciated. > > Thank you! > > -- > -- Yoshiki > From ma.chris.m at gmail.com Fri Aug 26 21:20:00 2016 From: ma.chris.m at gmail.com (Chris Muller) Date: Fri Aug 26 21:20:44 2016 Subject: [squeak-dev] [ANN] Personal SqueakSource Message-ID: I made a one-time setup script for Linux which sets up a headless SqueakSource server on localhost to start automatically on every boot, thus allowing the 'mc history' and 'mc origin' functions within the IDE to work for your own proprietary code, from any existing image. I've been using and refining it for the last couple of months, and have really come to like it because I get 'mc history' without having to install any extra code in those images, because its handled by the standard HTTP repository alredy existing in trunk. Installable from SqueakMap. Setup instructions here: http://wiki.squeak.org/squeak/6365 From Yoshiki.Ohshima at acm.org Fri Aug 26 22:10:47 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Fri Aug 26 22:10:50 2016 Subject: [squeak-dev] context menu pop up behavior In-Reply-To: References: Message-ID: Great. Thanks! This solves my problem. On Fri, Aug 26, 2016 at 1:40 PM, Chris Muller wrote: > Hi Yoshiki, you may toggle this behavior with the > > "Menu request updates list/tree selection" > > preference. > > On Fri, Aug 26, 2016 at 12:44 PM, Yoshiki Ohshima > wrote: >> I don't follow all the conversation lately (sorry) but I've been >> bitten by a different context menu launching behavior in modern >> images. Let us say there is an item selected in a list (say in a >> browser), and then right click in the pane but not directly on the >> selected item. It used to be the case that the selection does not >> change but it pops up a context menu and the action I choose from the >> menu affects the originally selected item. Nowadays, it selects the >> different item and then pops up the menu for that new item. >> >> If you can point me to some past discussion (I'm pretty sure there >> was) on the list, or some other rationale, it'd be greatly >> appreciated. >> >> Thank you! >> >> -- >> -- Yoshiki >> > -- -- Yoshiki From edgardec2005 at gmail.com Sat Aug 27 09:25:44 2016 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Sat Aug 27 09:25:51 2016 Subject: [squeak-dev] Manzana Message-ID: https://youtu.be/frrcdPhoN88 Edgar @morplenauta From herbertkoenig at gmx.net Sat Aug 27 12:04:27 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Sat Aug 27 12:04:29 2016 Subject: [squeak-dev] OSProcess crashes VM on 5.1 on Raspberry Pi Message-ID: Hi, on my Raspi A+ I run the 5.0 allInOne with OSProcess and CommandShell. I try to port to the shiny new 5.1. Very early in my app i do: ExternalUnixOSProcess command: 'pkill raspistill' ; raspistill not running. This gives me the attached crash dump. in 5.0 I used OSProcess-dtl.95 and CommandShell-dtl.76. After my first crash I updated to the latest I found on Squeaksource, 99 and 83 resp. On lines 238 and 261 the dump says Stack overflow. Any ideas how to proceed? Cheers, Herbert -------------- next part -------------- Segmentation fault Sat Aug 27 13:44:20 2016 /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/squeak Squeak VM version: 5.0-201608171728 Wed Aug 17 19:29:47 UTC 2016 gcc 4.9.2 [Production Spur VM] Built from: CoInterpreter VMMaker.oscog-cb.1919 uuid: 00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016 With: StackToRegisterMappingCogit VMMaker.oscog-cb.1919 uuid: 00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016 Revision: VM: 201608171728 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ Date: Wed Aug 17 10:28:01 2016 -0700 $ Plugins: 201608171728 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ Build host: Linux testing-gce-65a3e8a3-406d-4e8d-9606-fb64a9951919 3.19.0-66-generic #74~14.04.1-Ubuntu SMP Tue Jul 19 19:56:11 UTC 2016 armv7l GNU/Linux plugin path: /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/ [default: /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/] C stack backtrace & registers: r0 0x000422c0 r1 0x00000000 r2 0x00000016 r3 0xb5c81500 r4 0x000422c0 r5 0xb5cc377c r6 0xb5c8144c r7 0xb5c6dc20 r8 0x00207250 r9 0xbe8b26fc r10 0x13000000 fp 0xbe8a5984 ip 0xb5c81324 sp 0xbe8a58a0 lr 0xb6c53810 pc 0xb5c6cc2c *[0x0] [0x0] Smalltalk stack dump: 0xbe8b26fc I UnixOSProcessAccessor>forkAndExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: 0x23b74d0: a(n) UnixOSProcessAccessor 0xbe8b2778 I UnixProcess>processProxy:forkAndExec:arguments:environment:descriptors: 0x30ad748: a(n) UnixProcess 0xbe8b27ac I ExternalUnixOSProcess>forkChild 0xf33628: a(n) ExternalUnixOSProcess 0xbe8b27cc I ExternalUnixOSProcess class>forkAndExec:arguments:environment: 0x2df3310: a(n) ExternalUnixOSProcess class 0xbe8b27f8 I ExternalUnixOSProcess class>command: 0x2df3310: a(n) ExternalUnixOSProcess class 0xbe8b281c I PictureCompare>killTimelapse 0x34161b0: a(n) PictureCompare 0xbe8b2840 I PictureCompare>waitKillTimelapse 0x34161b0: a(n) PictureCompare 0xbe8b2884 I PictureCompare>analyzeCameraQuarter 0x34161b0: a(n) PictureCompare 0xbe8b289c M PictureCompare>(nil) 0x34161b0: a(n) PictureCompare 0xbe8b28c8 I Compiler>evaluateCue:ifFail: 0xe66008: a(n) Compiler 0xbe8b28f4 I Compiler>evaluateCue:ifFail:logged: 0xe66008: a(n) Compiler 0xbe8b2924 I Compiler>evaluate:in:to:notifying:ifFail:logged: 0xe66008: a(n) Compiler 0xbe8b295c M [] in SmalltalkEditor(TextEditor)>evaluateSelectionAndDo: 0x2dfbbb8: a(n) SmalltalkEditor 0xbe8b2978 M BlockClosure>on:do: 0xe661a0: a(n) BlockClosure 0xbe8af6d4 M SmalltalkEditor(TextEditor)>evaluateSelectionAndDo: 0x2dfbbb8: a(n) SmalltalkEditor 0xbe8af6f8 I SmalltalkEditor(TextEditor)>evaluateSelection 0x2dfbbb8: a(n) SmalltalkEditor 0xbe8af718 I SmalltalkEditor(TextEditor)>doIt 0x2dfbbb8: a(n) SmalltalkEditor 0xbe8af730 M SmalltalkEditor(TextEditor)>doIt: 0x2dfbbb8: a(n) SmalltalkEditor 0xbe8af75c I SmalltalkEditor(TextEditor)>dispatchOnKeyboardEvent: 0x2dfbbb8: a(n) SmalltalkEditor 0xbe8af780 I SmalltalkEditor(TextEditor)>keyStroke: 0x2dfbbb8: a(n) SmalltalkEditor 0xbe8af7a0 M [] in TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af7c4 M TextMorphForEditView(TextMorph)>handleInteraction:fromEvent: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af7ec I TextMorphForEditView>handleInteraction:fromEvent: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af814 M [] in TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af834 I StandardToolSet class>codeCompletionAround:textMorph:keyStroke: 0x1714200: a(n) StandardToolSet class 0xbe8af860 I ToolSet class>codeCompletionAround:textMorph:keyStroke: 0x170f7f8: a(n) ToolSet class 0xbe8af884 M TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af8ac I TextMorphForEditView>keyStroke: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af8d4 I TextMorphForEditView(Morph)>handleKeystroke: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af8fc I TextMorphForEditView(TextMorph)>handleKeystroke: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af918 M KeyboardEvent>sentTo: 0xe65d60: a(n) KeyboardEvent 0xbe8af938 M TextMorphForEditView(Morph)>handleEvent: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af954 M TextMorphForEditView(Morph)>handleFocusEvent: 0x341ffd8: a(n) TextMorphForEditView 0xbe8af978 M MorphicEventDispatcher>doHandlingForFocusEvent:with: 0xe657e8: a(n) MorphicEventDispatcher 0xbe8ae67c M MorphicEventDispatcher>dispatchFocusEvent:with: 0xe657e8: a(n) MorphicEventDispatcher 0xbe8ae69c M TextMorphForEditView(Morph)>processFocusEvent:using: 0x341ffd8: a(n) TextMorphForEditView 0xbe8ae6bc M TextMorphForEditView(Morph)>processFocusEvent: 0x341ffd8: a(n) TextMorphForEditView 0xbe8ae6e4 M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph 0xbe8ae704 M BlockClosure>ensure: 0xe65868: a(n) BlockClosure 0xbe8ae724 M KeyboardEvent(MorphicEvent)>becomeActiveDuring: 0xe65018: a(n) KeyboardEvent 0xbe8ae74c M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph 0xbe8ae76c M BlockClosure>ensure: 0xe65960: a(n) BlockClosure 0xbe8ae78c M HandMorph>becomeActiveDuring: 0x1c46458: a(n) HandMorph 0xbe8ae7b4 M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph 0xbe8ae7d4 M BlockClosure>ensure: 0xe65a58: a(n) BlockClosure 0xbe8ae7f4 M PasteUpMorph>becomeActiveDuring: 0x1838780: a(n) PasteUpMorph 0xbe8ae818 M HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph 0xbe8ae844 M HandMorph>sendEvent:focus:clear: 0x1c46458: a(n) HandMorph 0xbe8ae868 M HandMorph>sendKeyboardEvent: 0x1c46458: a(n) HandMorph 0xbe8ae888 M HandMorph>handleEvent: 0x1c46458: a(n) HandMorph 0xbe8ae8b4 M HandMorph>processEvents 0x1c46458: a(n) HandMorph 0xbe8ae8d0 M [] in WorldState>doOneCycleNowFor: 0x227ba70: a(n) WorldState 0xbe8ae8f4 M Array(SequenceableCollection)>do: 0x13cfa10: a(n) Array 0xbe8ae910 M WorldState>handsDo: 0x227ba70: a(n) WorldState 0xbe8ae930 M WorldState>doOneCycleNowFor: 0x227ba70: a(n) WorldState 0xbe8ae94c M WorldState>doOneCycleFor: 0x227ba70: a(n) WorldState 0xbe8ae968 M PasteUpMorph>doOneCycle 0x1838780: a(n) PasteUpMorph 0xbe8ae980 M [] in MorphicProject>spawnNewProcess 0x23ca268: a(n) MorphicProject 0x17c6208 s [] in BlockClosure>newProcess Most recent primitives scanBitLengths:into: scanBitLengths:into: scanBitLengths:into: scanBitLengths:into: scanBitLengths:into: scanBitLengths:into: scanBitLengths:into: scanBitLengths:into: scanBitLengths:into: bitPosition fixedBlockSizeFor:and: fixedBlockSizeFor:and: maxCode maxCode maxCode maxCode maxCode maxCode maxCode dynamicBlockSizeFor:and:using:and: dynamicBlockSizeFor:and:using:and: dynamicBlockSizeFor:and:using:and: + + bitLengthAt: bitLengthAt: at: at: at: at: at: at: at: at: at: nextBits:put: nextBits:put: at: nextBytePut: flushBits bitXor: growTo: growTo: growTo: growTo: growTo: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: size replaceFrom:to:with:startingAt: size size size initialPC size at: at: at: perform: size newMethod:header: at:put: at:put: at:put: literalAt: objectAt:put: objectAt:put: objectAt:put: at: at:put: at: at:put: at: at:put: withArgs:executeMethod: basicNew basicNew value basicNew size size size replaceFrom:to:with:startingAt: size replaceFrom:to:with:startingAt: value:value: value:value: value:value: indexOfAscii:inString:startingAt: value:value: value:value: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: basicNew getSystemAttribute: findFirstInString:inSet:startingAt: primOpen:writable: shallowCopy identityHash wait **StackOverflow** identityHash basicNew: at:put: basicNew new: signal species basicNew: printString printString printString primWrite:from:startingAt:count: nextPutAll: basicNew replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: = at: at: basicNew ~= getSystemAttribute: findFirstInString:inSet:startingAt: getSystemAttribute: findFirstInString:inSet:startingAt: primLookupEntryIn:name: at: at: at: at: at: basicNew getSystemAttribute: findFirstInString:inSet:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: indexOfAscii:inString:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: getSystemAttribute: findFirstInString:inSet:startingAt: fileNamed: identityHash wait **StackOverflow** identityHash basicNew: new: signal basicNew: primWrite:from:startingAt:count: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: indexOfAscii:inString:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: getSystemAttribute: findFirstInString:inSet:startingAt: primOpen:writable: identityHash wait **StackOverflow** identityHash basicNew: new: signal basicNew: primClose: wait remove:ifAbsent: \\ at: identityHash signal stringHash:initialHash: stringHash:initialHash: value: identityHash replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: value:value: = beginsWith: beginsWith: beginsWith: beginsWith: setPathName: getSystemAttribute: findFirstInString:inSet:startingAt: getSystemAttribute: findFirstInString:inSet:startingAt: directoryEntryForName: directoryEntryForName: directoryEntryForName: directoryEntryForName: directoryEntryForName: directoryEntryForName: basicNew getSystemAttribute: basicNew basicNew identityHash primGetCurrentWorkingDirectory value: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: value: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: primSizeOfPointer value: sizeOfPointer value value replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: replaceFrom:to:with:startingAt: new: collect: at: value:value: value:value: at: value:value: at: value:value: replaceFrom:to:with:startingAt: at: at: at: at: at: at: at: at: primGetCurrentWorkingDirectory compare:with:collated: primForkExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: stack page bytes 4096 available headroom 2788 minimum unused headroom 2996 (Segmentation fault) From timfelgentreff at gmail.com Sat Aug 27 13:04:24 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Sat Aug 27 13:04:38 2016 Subject: [squeak-dev] Kedama Lives !! In-Reply-To: References: Message-ID: Hi, we have updated Squeakland etoys to load in 5.1. This includes Kedama2. There is a alpha-quality package on files.squeak.org/etoys, the mczs currently live on swasource in the etoys-spur repository. Cheers, Tim H. Hirzel schrieb am Fr., 26. Aug. 2016, 21:48: > An where do you find this mcz for StarSqueak? > > On 8/26/16, Edgar J. De Cleene wrote: > > Thanks to Stephanne Duccase who did a .mcz once > > I found in the dungeons and put into 4.6 and 5.1 without any trouble > > > > > > On 8/26/16, 9:20 AM, "H. Hirzel" wrote: > > > >> Hello Edgar > >> > >> Nice! It seems to be StarSqueak. (Kedama is the Etoys version). > >> > >> How did you get it installed? > >> > >> --Hannes > > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160827/a5273949/attachment.htm From timfelgentreff at gmail.com Sat Aug 27 13:07:53 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Sat Aug 27 13:08:06 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: <20160826154023.46ca80bc@herpi5> References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> <20160826154023.46ca80bc@herpi5> Message-ID: Hi, in the process of updating Squeakland etoys to load in 5.1,we have also made the sexp format project saving and loading work again. This might be a VM independent way forward for storing projects. Regarding loading old projects, Bert has an experimental OldSegmentLoader that can load pre-Spur segments into 5.1 best, Tim Herbert K?nig schrieb am Fr., 26. Aug. 2016, 15:40: > Thanks Hannes, > > I'll let you know. > > A typical image of mine contains lots of projects with documentation > and ideas I need to be able to save. > > Cheers, > > Herbert > > Am Fri, 26 Aug 2016 13:43:06 +0100 > schrieb "H. Hirzel" : > > > Hallo Herbert > > > > I am currently using the 5.1 release for development. > > > > I think it was > > > > 4 fixes in the Inbox and I just filed them in an Squeak 4.6 image > > (updated from the Squeak 4.6 all-in-one-release) in December 2015 > > > > http://forum.world.st/The-Trunk-System-cwp-781-mcz-td4864083.html > > http://forum.world.st/The-Trunk-System-cwp-782-mcz-td4864086.html > > http://forum.world.st/The-Inbox-Morphic-cwp-1055-mcz-td4864087.html > > http://forum.world.st/The-Inbox-Morphic-jmg-1055-mcz-td4864091.html > > > > It this is not sufficient give me some time to dig out that 4.6 image > > from the archive and try to recover what I did. > > > > --Hannes > > > > > > On 8/26/16, Herbert K?nig wrote: > > > Hi Hannes, > > > > > > any tips how to get at that image and what VM to use? I still use > > > 4.4 for development and later versions just for deployment. > > > > > > Thanks, > > > > > > Herbert > > > > > > Am Fri, 26 Aug 2016 13:16:03 +0100 > > > schrieb "H. Hirzel" : > > > > > >> Hello Vaidotas > > >> > > >> It can confirm that Project saving worked again in Squeak 4.6 in > > >> December 2015 with the fixes applied done by Colin Putney[1]. I did > > >> some tests then. > > >> > > >> The 64bit image is experimental. > > >> > > >> I just tested Project saving in Squeak 5.1 (32bit image) in > > >> MSWindows and on Linux. It does not work either. So we need to > > >> wait for a VM update. > > >> > > >> Regards > > >> Hannes > > >> > > >> [1] http://wiki.squeak.org/squeak/6218 > > >> > > >> With these four changes, it's possible to save and load projects > > >> in a Squeak 4.6 image. It doesn't work in a trunk image, however. > > >> The Spur VM crashes when saving a project. I've reported that on > > >> the VM list. It also fails to load an image segment - looks like > > >> the primitive for that isn't quite finished in Spur. > > >> > > >> > > >> On 8/26/16, Herbert K?nig wrote: > > >> > Hi Vaidotas, > > >> > > > >> > according to the end of > > >> > http://wiki.squeak.org/squeak/6218 > > >> > this is now a VM problem. The image side shold have been solved. > > >> > > > >> > From older discussions I remember that environments are too > > >> > deeply entangled with the guts of Squeak that it's not feasible > > >> > to remove them again. > > >> > > > >> > And then some people may use them. > > >> > > > >> > Cheers, > > >> > > > >> > Herbert > > >> > > > >> > Am Fri, 26 Aug 2016 13:46:40 +0300 > > >> > schrieb Vaidotas Did?balis : > > >> > > > >> >> Hello, > > >> >> Project saving is broken. When trying to save Morphic project to > > >> >> disk on 64bit image on Windows user is locked in the loop of > > >> >> popping up emergency evaluator, you have to kill Squeak as a OS > > >> >> process. See the docking bar, the second menu item is the > > >> >> Project menu. We need to add this to the known Issues session > > >> >> of the 5.1 release notes at least. This bug was pushed with > > >> >> Environments package since 4.5. Is anyone uses Environments? > > >> >> Can they be removed? Why Environments is not loadable package? > > >> >> regards, Vaidotas > > >> > > > >> > > > >> > > > >> > > > > > > > > > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160827/3acfee8e/attachment.htm From karlramberg at gmail.com Sat Aug 27 13:24:44 2016 From: karlramberg at gmail.com (karl ramberg) Date: Sat Aug 27 13:24:48 2016 Subject: [squeak-dev] Kedama Lives !! In-Reply-To: References: Message-ID: On Sat, Aug 27, 2016 at 3:04 PM, Tim Felgentreff wrote: > Hi, > > we have updated Squeakland etoys to load in 5.1. This includes Kedama2. > There is a alpha-quality package on files.squeak.org/etoys, the mczs > currently live on swasource in the etoys-spur repository. > > Cheers, > Tim > Thats awsome :-) Best, Karl > > H. Hirzel schrieb am Fr., 26. Aug. 2016, 21:48: > >> An where do you find this mcz for StarSqueak? >> >> On 8/26/16, Edgar J. De Cleene wrote: >> > Thanks to Stephanne Duccase who did a .mcz once >> > I found in the dungeons and put into 4.6 and 5.1 without any trouble >> > >> > >> > On 8/26/16, 9:20 AM, "H. Hirzel" wrote: >> > >> >> Hello Edgar >> >> >> >> Nice! It seems to be StarSqueak. (Kedama is the Etoys version). >> >> >> >> How did you get it installed? >> >> >> >> --Hannes >> > >> > >> > >> > >> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160827/e916457a/attachment.htm From lewis at mail.msen.com Sat Aug 27 14:23:06 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sat Aug 27 14:23:11 2016 Subject: [squeak-dev] OSProcess crashes VM on 5.1 on Raspberry Pi In-Reply-To: References: Message-ID: <20160827142306.GA95391@shell.msen.com> The OSProcess plugin has been modified in the Cog/Spur VMs, and the modified version is broken. The solution is to use the unmodified version, which is VMConstruction-Plugins-OSProcessPlugin-dtl.40.mcz in the http://www.squeaksource.com/OSProcessPlugin repository. I am attaching a copy of the compiled OSProcess plugin from my Raspberry Pi. No guarantees, but if you unpack this and copy it to your VM directory, it should work. Dave On Sat, Aug 27, 2016 at 02:04:27PM +0200, Herbert K??nig wrote: > Hi, > > on my Raspi A+ I run the 5.0 allInOne with OSProcess and CommandShell. I > try to port to the shiny new 5.1. > > Very early in my app i do: > > ExternalUnixOSProcess command: 'pkill raspistill' ; raspistill not running. > > This gives me the attached crash dump. in 5.0 I used OSProcess-dtl.95 > and CommandShell-dtl.76. > > After my first crash I updated to the latest I found on Squeaksource, 99 > and 83 resp. > > On lines 238 and 261 the dump says Stack overflow. > > Any ideas how to proceed? > > Cheers, > > Herbert > > > > > Segmentation fault Sat Aug 27 13:44:20 2016 > > > /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/squeak > Squeak VM version: 5.0-201608171728 Wed Aug 17 19:29:47 UTC 2016 gcc 4.9.2 [Production Spur VM] > Built from: CoInterpreter VMMaker.oscog-cb.1919 uuid: 00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016 > With: StackToRegisterMappingCogit VMMaker.oscog-cb.1919 uuid: 00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016 > Revision: VM: 201608171728 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ Date: Wed Aug 17 10:28:01 2016 -0700 $ > Plugins: 201608171728 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ > Build host: Linux testing-gce-65a3e8a3-406d-4e8d-9606-fb64a9951919 3.19.0-66-generic #74~14.04.1-Ubuntu SMP Tue Jul 19 19:56:11 UTC 2016 armv7l GNU/Linux > plugin path: /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/ [default: /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/] > > > C stack backtrace & registers: > r0 0x000422c0 r1 0x00000000 r2 0x00000016 r3 0xb5c81500 > r4 0x000422c0 r5 0xb5cc377c r6 0xb5c8144c r7 0xb5c6dc20 > r8 0x00207250 r9 0xbe8b26fc r10 0x13000000 fp 0xbe8a5984 > ip 0xb5c81324 sp 0xbe8a58a0 lr 0xb6c53810 pc 0xb5c6cc2c > *[0x0] > [0x0] > > > Smalltalk stack dump: > 0xbe8b26fc I UnixOSProcessAccessor>forkAndExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: 0x23b74d0: a(n) UnixOSProcessAccessor > 0xbe8b2778 I UnixProcess>processProxy:forkAndExec:arguments:environment:descriptors: 0x30ad748: a(n) UnixProcess > 0xbe8b27ac I ExternalUnixOSProcess>forkChild 0xf33628: a(n) ExternalUnixOSProcess > 0xbe8b27cc I ExternalUnixOSProcess class>forkAndExec:arguments:environment: 0x2df3310: a(n) ExternalUnixOSProcess class > 0xbe8b27f8 I ExternalUnixOSProcess class>command: 0x2df3310: a(n) ExternalUnixOSProcess class > 0xbe8b281c I PictureCompare>killTimelapse 0x34161b0: a(n) PictureCompare > 0xbe8b2840 I PictureCompare>waitKillTimelapse 0x34161b0: a(n) PictureCompare > 0xbe8b2884 I PictureCompare>analyzeCameraQuarter 0x34161b0: a(n) PictureCompare > 0xbe8b289c M PictureCompare>(nil) 0x34161b0: a(n) PictureCompare > 0xbe8b28c8 I Compiler>evaluateCue:ifFail: 0xe66008: a(n) Compiler > 0xbe8b28f4 I Compiler>evaluateCue:ifFail:logged: 0xe66008: a(n) Compiler > 0xbe8b2924 I Compiler>evaluate:in:to:notifying:ifFail:logged: 0xe66008: a(n) Compiler > 0xbe8b295c M [] in SmalltalkEditor(TextEditor)>evaluateSelectionAndDo: 0x2dfbbb8: a(n) SmalltalkEditor > 0xbe8b2978 M BlockClosure>on:do: 0xe661a0: a(n) BlockClosure > 0xbe8af6d4 M SmalltalkEditor(TextEditor)>evaluateSelectionAndDo: 0x2dfbbb8: a(n) SmalltalkEditor > 0xbe8af6f8 I SmalltalkEditor(TextEditor)>evaluateSelection 0x2dfbbb8: a(n) SmalltalkEditor > 0xbe8af718 I SmalltalkEditor(TextEditor)>doIt 0x2dfbbb8: a(n) SmalltalkEditor > 0xbe8af730 M SmalltalkEditor(TextEditor)>doIt: 0x2dfbbb8: a(n) SmalltalkEditor > 0xbe8af75c I SmalltalkEditor(TextEditor)>dispatchOnKeyboardEvent: 0x2dfbbb8: a(n) SmalltalkEditor > 0xbe8af780 I SmalltalkEditor(TextEditor)>keyStroke: 0x2dfbbb8: a(n) SmalltalkEditor > 0xbe8af7a0 M [] in TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af7c4 M TextMorphForEditView(TextMorph)>handleInteraction:fromEvent: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af7ec I TextMorphForEditView>handleInteraction:fromEvent: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af814 M [] in TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af834 I StandardToolSet class>codeCompletionAround:textMorph:keyStroke: 0x1714200: a(n) StandardToolSet class > 0xbe8af860 I ToolSet class>codeCompletionAround:textMorph:keyStroke: 0x170f7f8: a(n) ToolSet class > 0xbe8af884 M TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af8ac I TextMorphForEditView>keyStroke: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af8d4 I TextMorphForEditView(Morph)>handleKeystroke: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af8fc I TextMorphForEditView(TextMorph)>handleKeystroke: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af918 M KeyboardEvent>sentTo: 0xe65d60: a(n) KeyboardEvent > 0xbe8af938 M TextMorphForEditView(Morph)>handleEvent: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af954 M TextMorphForEditView(Morph)>handleFocusEvent: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8af978 M MorphicEventDispatcher>doHandlingForFocusEvent:with: 0xe657e8: a(n) MorphicEventDispatcher > 0xbe8ae67c M MorphicEventDispatcher>dispatchFocusEvent:with: 0xe657e8: a(n) MorphicEventDispatcher > 0xbe8ae69c M TextMorphForEditView(Morph)>processFocusEvent:using: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8ae6bc M TextMorphForEditView(Morph)>processFocusEvent: 0x341ffd8: a(n) TextMorphForEditView > 0xbe8ae6e4 M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph > 0xbe8ae704 M BlockClosure>ensure: 0xe65868: a(n) BlockClosure > 0xbe8ae724 M KeyboardEvent(MorphicEvent)>becomeActiveDuring: 0xe65018: a(n) KeyboardEvent > 0xbe8ae74c M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph > 0xbe8ae76c M BlockClosure>ensure: 0xe65960: a(n) BlockClosure > 0xbe8ae78c M HandMorph>becomeActiveDuring: 0x1c46458: a(n) HandMorph > 0xbe8ae7b4 M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph > 0xbe8ae7d4 M BlockClosure>ensure: 0xe65a58: a(n) BlockClosure > 0xbe8ae7f4 M PasteUpMorph>becomeActiveDuring: 0x1838780: a(n) PasteUpMorph > 0xbe8ae818 M HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph > 0xbe8ae844 M HandMorph>sendEvent:focus:clear: 0x1c46458: a(n) HandMorph > 0xbe8ae868 M HandMorph>sendKeyboardEvent: 0x1c46458: a(n) HandMorph > 0xbe8ae888 M HandMorph>handleEvent: 0x1c46458: a(n) HandMorph > 0xbe8ae8b4 M HandMorph>processEvents 0x1c46458: a(n) HandMorph > 0xbe8ae8d0 M [] in WorldState>doOneCycleNowFor: 0x227ba70: a(n) WorldState > 0xbe8ae8f4 M Array(SequenceableCollection)>do: 0x13cfa10: a(n) Array > 0xbe8ae910 M WorldState>handsDo: 0x227ba70: a(n) WorldState > 0xbe8ae930 M WorldState>doOneCycleNowFor: 0x227ba70: a(n) WorldState > 0xbe8ae94c M WorldState>doOneCycleFor: 0x227ba70: a(n) WorldState > 0xbe8ae968 M PasteUpMorph>doOneCycle 0x1838780: a(n) PasteUpMorph > 0xbe8ae980 M [] in MorphicProject>spawnNewProcess 0x23ca268: a(n) MorphicProject > 0x17c6208 s [] in BlockClosure>newProcess > > Most recent primitives > scanBitLengths:into: > scanBitLengths:into: > scanBitLengths:into: > scanBitLengths:into: > scanBitLengths:into: > scanBitLengths:into: > scanBitLengths:into: > scanBitLengths:into: > scanBitLengths:into: > bitPosition > fixedBlockSizeFor:and: > fixedBlockSizeFor:and: > maxCode > maxCode > maxCode > maxCode > maxCode > maxCode > maxCode > dynamicBlockSizeFor:and:using:and: > dynamicBlockSizeFor:and:using:and: > dynamicBlockSizeFor:and:using:and: > + > + > bitLengthAt: > bitLengthAt: > at: > at: > at: > at: > at: > at: > at: > at: > at: > nextBits:put: > nextBits:put: > at: > nextBytePut: > flushBits > bitXor: > growTo: > growTo: > growTo: > growTo: > growTo: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > size > replaceFrom:to:with:startingAt: > size > size > size > initialPC > size > at: > at: > at: > perform: > size > newMethod:header: > at:put: > at:put: > at:put: > literalAt: > objectAt:put: > objectAt:put: > objectAt:put: > at: > at:put: > at: > at:put: > at: > at:put: > withArgs:executeMethod: > basicNew > basicNew > value > basicNew > size > size > size > replaceFrom:to:with:startingAt: > size > replaceFrom:to:with:startingAt: > value:value: > value:value: > value:value: > indexOfAscii:inString:startingAt: > value:value: > value:value: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > basicNew > getSystemAttribute: > findFirstInString:inSet:startingAt: > primOpen:writable: > shallowCopy > identityHash > wait > **StackOverflow** > identityHash > basicNew: > at:put: > basicNew > new: > signal > species > basicNew: > printString > printString > printString > primWrite:from:startingAt:count: > nextPutAll: > basicNew > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > = > at: > at: > basicNew > ~= > getSystemAttribute: > findFirstInString:inSet:startingAt: > getSystemAttribute: > findFirstInString:inSet:startingAt: > primLookupEntryIn:name: > at: > at: > at: > at: > at: > basicNew > getSystemAttribute: > findFirstInString:inSet:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > indexOfAscii:inString:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > getSystemAttribute: > findFirstInString:inSet:startingAt: > fileNamed: > identityHash > wait > **StackOverflow** > identityHash > basicNew: > new: > signal > basicNew: > primWrite:from:startingAt:count: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > indexOfAscii:inString:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > getSystemAttribute: > findFirstInString:inSet:startingAt: > primOpen:writable: > identityHash > wait > **StackOverflow** > identityHash > basicNew: > new: > signal > basicNew: > primClose: > wait > remove:ifAbsent: > \\ > at: > identityHash > signal > stringHash:initialHash: > stringHash:initialHash: > value: > identityHash > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > value:value: > = > beginsWith: > beginsWith: > beginsWith: > beginsWith: > setPathName: > getSystemAttribute: > findFirstInString:inSet:startingAt: > getSystemAttribute: > findFirstInString:inSet:startingAt: > directoryEntryForName: > directoryEntryForName: > directoryEntryForName: > directoryEntryForName: > directoryEntryForName: > directoryEntryForName: > basicNew > getSystemAttribute: > basicNew > basicNew > identityHash > primGetCurrentWorkingDirectory > value: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > value: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > primSizeOfPointer > value: > > sizeOfPointer > value > value > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > replaceFrom:to:with:startingAt: > new: > collect: > at: > value:value: > value:value: > at: > value:value: > at: > value:value: > replaceFrom:to:with:startingAt: > at: > at: > at: > at: > at: > at: > at: > at: > primGetCurrentWorkingDirectory > compare:with:collated: > primForkExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: > > stack page bytes 4096 available headroom 2788 minimum unused headroom 2996 > > (Segmentation fault) > -------------- next part -------------- A non-text attachment was scrubbed... Name: OSPP.tar.gz Type: application/octet-stream Size: 41884 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160827/167d6c92/OSPP.tar-0001.obj From commits at source.squeak.org Sat Aug 27 17:19:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 17:19:40 2016 Subject: [squeak-dev] The Trunk: WebClient-Core-ul.103.mcz Message-ID: Levente Uzonyi uploaded a new version of WebClient-Core to project The Trunk: http://source.squeak.org/trunk/WebClient-Core-ul.103.mcz ==================== Summary ==================== Name: WebClient-Core-ul.103 Author: ul Time: 27 August 2016, 7:18:54.795729 pm UUID: 5e538140-9049-473a-8ac0-f4b4383bb60d Ancestors: WebClient-Core-ul.102 - fixed WebSocket00 >> #close =============== Diff against WebClient-Core-ul.102 =============== Item was changed: ----- Method: WebSocket00>>close (in category 'running') ----- close "Request graceful close" + stream isConnected ifFalse: [ ^self ]. + stream + nextPut: (Character value: 255); + nextPut: (Character value: 0); + flush - stream isConnected ifTrue:[ - stream nextPut: (Character value: 255). - stream nextPutAll: (Character value: 0). - stream flush. - ]. ! From commits at source.squeak.org Sat Aug 27 17:20:28 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 17:20:30 2016 Subject: [squeak-dev] The Trunk: System-ul.910.mcz Message-ID: Levente Uzonyi uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-ul.910.mcz ==================== Summary ==================== Name: System-ul.910 Author: ul Time: 27 August 2016, 7:16:13.238315 pm UUID: b4b3e62f-d4f9-4531-a22b-6ed8acafadac Ancestors: System-mt.909 DeepCopier changes: - added #new: to create a new instance with a given initial capacity - avoid a block creation in #fixDependents =============== Diff against System-mt.909 =============== Item was added: + ----- Method: DeepCopier class>>new: (in category 'instance creation') ----- + new: requestedSize + + ^self basicNew initialize: requestedSize! Item was changed: ----- Method: DeepCopier>>fixDependents (in category 'like fullCopy') ----- fixDependents "They are not used much, but need to be right" DependentsFields associationsDo: [:pair | + pair value do: [ :dependent | + (references at: dependent ifAbsent: nil) ifNotNil: [ :newDependent | + (references at: pair key ifAbsent: [ pair key ]) + addDependent: newDependent ] ] ]! - pair value do: [:dep | - | newDep newModel | - newDep := references at: dep ifAbsent: [nil]. - newDep ifNotNil: [ - newModel := references at: pair key ifAbsent: [pair key]. - newModel addDependent: newDep]]]. - ! From commits at source.squeak.org Sat Aug 27 17:21:27 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 17:21:29 2016 Subject: [squeak-dev] The Trunk: Network-ul.183.mcz Message-ID: Levente Uzonyi uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-ul.183.mcz ==================== Summary ==================== Name: Network-ul.183 Author: ul Time: 27 August 2016, 7:06:50.616798 pm UUID: 12bf0b6e-cf75-400f-ad5f-03aaa9b6db57 Ancestors: Network-ul.182 Don't let #next:putAll:startingAt: roll back the receiver when the first argument is negative. =============== Diff against Network-ul.182 =============== Item was changed: ----- Method: SocketStream>>next:putAll:startingAt: (in category 'stream out') ----- next: n putAll: aCollection startingAt: startIndex "Put a String or a ByteArray onto the stream. Currently a large collection will allocate a large buffer. Warning: this does not work with WideString: they have to be converted first." + n > 0 ifFalse: [ ^aCollection ]. self adjustOutBuffer: n. outBuffer replaceFrom: outNextToWrite to: outNextToWrite + n - 1 with: aCollection startingAt: startIndex. outNextToWrite := outNextToWrite + n. self checkFlush. ^aCollection! From commits at source.squeak.org Sat Aug 27 17:21:52 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 17:21:55 2016 Subject: [squeak-dev] The Trunk: Multilingual-ul.216.mcz Message-ID: Levente Uzonyi uploaded a new version of Multilingual to project The Trunk: http://source.squeak.org/trunk/Multilingual-ul.216.mcz ==================== Summary ==================== Name: Multilingual-ul.216 Author: ul Time: 27 August 2016, 7:06:05.615071 pm UUID: a2be34e3-fc9a-4e8c-8f73-4ac710da8f30 Ancestors: Multilingual-tfel.215 Don't let #next:putAll:startingAt:toStream: roll back the receiver when the first argument is negative. This isn't mandatory with the current implementation if #next:putAll:startingAt: ignores negative counts. =============== Diff against Multilingual-tfel.215 =============== Item was changed: ----- Method: TextConverter>>next:putAll:startingAt:toStream: (in category 'conversion') ----- next: anInteger putAll: aString startingAt: startIndex toStream: aStream "Handle fast conversion if ByteString" | lastIndex nextIndex | + anInteger > 0 ifFalse: [ ^aString ]. + aStream isBinary ifTrue: [ + aStream basicNext: anInteger putAll: aString startingAt: startIndex. + ^aString ]. aString class == ByteString ifFalse: [ startIndex to: startIndex + anInteger - 1 do: [ :index | self nextPut: (aString at: index) toStream: aStream ]. ^aString ]. - aStream isBinary ifTrue: [ - aStream basicNext: anInteger putAll: aString startingAt: startIndex. - ^aString ]. lastIndex := startIndex. [ (nextIndex := ByteString findFirstInString: aString inSet: latin1Map startingAt: lastIndex) = 0 or: [ anInteger + startIndex <= nextIndex ] ] whileFalse: [ aStream basicNext: nextIndex - lastIndex putAll: aString startingAt: lastIndex; basicNextPutAll: (latin1Encodings at: (aString byteAt: nextIndex) + 1). lastIndex := nextIndex + 1 ]. aStream basicNext: anInteger - lastIndex + startIndex putAll: aString startingAt: lastIndex. ^aString! From commits at source.squeak.org Sat Aug 27 17:22:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 17:22:47 2016 Subject: [squeak-dev] The Trunk: Kernel-ul.1036.mcz Message-ID: Levente Uzonyi uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-ul.1036.mcz ==================== Summary ==================== Name: Kernel-ul.1036 Author: ul Time: 27 August 2016, 7:13:45.745043 pm UUID: e79df913-4b0c-4c66-8e84-58d823774d7e Ancestors: Kernel-mt.1035 Use #new: to create a a DeepCopier with a given initial capacity. =============== Diff against Kernel-mt.1035 =============== Item was changed: ----- Method: Object>>veryDeepCopy (in category 'copying') ----- veryDeepCopy "Do a complete tree copy using a dictionary. An object in the tree twice is only copied once. All references to the object in the copy of the tree will point to the new copy." | copier new | + copier := DeepCopier new: self initialDeepCopierSize. - copier := DeepCopier new initialize: self initialDeepCopierSize. new := self veryDeepCopyWith: copier. copier mapUniClasses. copier references associationsDo: [:assoc | assoc value veryDeepFixupWith: copier]. copier fixDependents. ^ new! Item was changed: ----- Method: Object>>veryDeepCopySibling (in category 'copying') ----- veryDeepCopySibling "Do a complete tree copy using a dictionary. Substitute a clone of oldPlayer for the root. Normally, a Player or non systemDefined object would have a new class. We do not want one this time. An object in the tree twice, is only copied once. All references to the object in the copy of the tree will point to the new copy." | copier new | + copier := DeepCopier new: self initialDeepCopierSize. - copier := DeepCopier new initialize: self initialDeepCopierSize. copier newUniClasses: false. new := self veryDeepCopyWith: copier. copier mapUniClasses. copier references associationsDo: [:assoc | assoc value veryDeepFixupWith: copier]. copier fixDependents. ^ new! From commits at source.squeak.org Sat Aug 27 17:23:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 17:23:22 2016 Subject: [squeak-dev] The Trunk: Files-ul.162.mcz Message-ID: Levente Uzonyi uploaded a new version of Files to project The Trunk: http://source.squeak.org/trunk/Files-ul.162.mcz ==================== Summary ==================== Name: Files-ul.162 Author: ul Time: 24 August 2016, 9:23:41.082845 pm UUID: 43f75097-2eb2-4c8f-b246-f1346ff30fef Ancestors: Files-cmm.161 Don't let #next:putAll:startingAt: roll back the receiver when the first argument is negative. =============== Diff against Files-cmm.161 =============== Item was changed: ----- Method: StandardFileStream>>next:putAll:startingAt: (in category 'read, write, position') ----- next: anInteger putAll: aString startingAt: startIndex "Store the next anInteger elements from the given collection." rwmode ifFalse: [^ self error: 'Cannot write a read-only file']. + anInteger > 0 ifFalse: [ ^aString ]. collection ifNotNil: [ position < readLimit ifTrue: [ self flushReadBuffer ] ]. self primWrite: fileID from: aString startingAt: startIndex count: anInteger. ^aString! From commits at source.squeak.org Sat Aug 27 17:23:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 17:23:41 2016 Subject: [squeak-dev] The Trunk: Compression-ul.49.mcz Message-ID: Levente Uzonyi uploaded a new version of Compression to project The Trunk: http://source.squeak.org/trunk/Compression-ul.49.mcz ==================== Summary ==================== Name: Compression-ul.49 Author: ul Time: 24 August 2016, 9:23:23.899054 pm UUID: a194073a-524e-4842-981e-cb4a433229e6 Ancestors: Compression-cmm.48 Don't let #next:putAll:startingAt: roll back the receiver when the first argument is negative. =============== Diff against Compression-cmm.48 =============== Item was changed: ----- Method: DeflateStream>>next:putAll:startingAt: (in category 'accessing') ----- next: bytesCount putAll: aCollection startingAt: startIndex + | start count max | + bytesCount > 0 ifFalse: [ ^aCollection ]. aCollection species = collection species ifFalse: [startIndex to: startIndex + bytesCount - 1 do: [:i | self nextPut: (aCollection at: i)]. ^aCollection]. start := startIndex. count := bytesCount. [count = 0] whileFalse:[ position = writeLimit ifTrue:[self deflateBlock]. max := writeLimit - position. max > count ifTrue:[max := count]. collection replaceFrom: position+1 to: position+max with: aCollection startingAt: start. start := start + max. count := count - max. position := position + max]. ^aCollection! From commits at source.squeak.org Sat Aug 27 17:24:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 17:24:19 2016 Subject: [squeak-dev] The Trunk: Collections-ul.714.mcz Message-ID: Levente Uzonyi uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-ul.714.mcz ==================== Summary ==================== Name: Collections-ul.714 Author: ul Time: 24 August 2016, 9:22:59.948045 pm UUID: 88200af6-48e5-4ae3-a247-a0b5a74985bf Ancestors: Collections-mt.713 SequenceableCollection>>copyReplaceAll:with:asTokens: - return a copy in all cases - avoid quadratic performance when many replacements have to be done AttributedTextStream: - avoid creation of unnecessary objects during initialization - use default size 10 Don't let #next:putAll:startingAt: roll back the receiver when the first argument is negative. =============== Diff against Collections-mt.713 =============== Item was changed: SystemOrganization addCategory: #'Collections-Abstract'! SystemOrganization addCategory: #'Collections-Arrayed'! SystemOrganization addCategory: #'Collections-Cache'! SystemOrganization addCategory: #'Collections-Exceptions'! + SystemOrganization addCategory: #'Collections-Heap'! SystemOrganization addCategory: #'Collections-Sequenceable'! SystemOrganization addCategory: #'Collections-Stack'! SystemOrganization addCategory: #'Collections-Streams'! SystemOrganization addCategory: #'Collections-Strings'! SystemOrganization addCategory: #'Collections-Support'! SystemOrganization addCategory: #'Collections-Text'! SystemOrganization addCategory: #'Collections-Unordered'! SystemOrganization addCategory: #'Collections-Weak'! - SystemOrganization addCategory: #'Collections-Heap'! Item was changed: ----- Method: AttributedTextStream class>>new (in category 'instance creation') ----- new "For this class we override Stream class>>new since this class actually is created using #new, even though it is a Stream." + ^self new: 10! - ^self basicNew initialize! Item was added: + ----- Method: AttributedTextStream class>>new: (in category 'instance creation') ----- + new: n + + ^self basicNew + initialize: n; + yourself! Item was removed: - ----- Method: AttributedTextStream>>initialize (in category 'initialize-release') ----- - initialize - - characters := String new writeStream. - currentAttributes := #(). - currentRun := 0. - attributeValues := (Array new: 50) writeStream. - attributeRuns := (Array new: 50) writeStream! Item was added: + ----- Method: AttributedTextStream>>initialize: (in category 'initialize-release') ----- + initialize: n + + super initialize. + characters := (String new: n) writeStream. + currentAttributes := #(). + currentRun := 0. + attributeValues := (Array new: (n min: 10)) writeStream. + attributeRuns := (Array new: (n min: 10)) writeStream! Item was added: + ----- Method: AttributedTextStream>>next:putAll:startingAt: (in category 'accessing') ----- + next: anInteger putAll: aString startingAt: startIndex + + "add an entire string with the same attributes" + anInteger > 0 ifFalse: [ ^aString ]. + currentRun := currentRun + anInteger. + ^characters + next: anInteger + putAll: aString + startingAt: startIndex! Item was changed: ----- Method: NullStream>>next:putAll:startingAt: (in category 'writing') ----- next: anInteger putAll: aCollection startingAt: startIndex "Store the next anInteger elements from the given collection." + anInteger > 0 ifFalse: [ ^aCollection ]. position := position + anInteger. ^aCollection! Item was changed: ----- Method: SequenceableCollection>>copyReplaceAll:with:asTokens: (in category 'private') ----- copyReplaceAll: oldSubstring with: newSubstring asTokens: ifTokens "Answer a copy of the receiver in which all occurrences of oldSubstring have been replaced by newSubstring. ifTokens (valid for Strings only) specifies that the characters surrounding the recplacement must not be alphanumeric. Bruce Simth, must be incremented by 1 and not newSubstring if ifTokens is true. See example below. " + | currentIndex | + (ifTokens and: [ self isString not and: [ self isText not ] ]) ifTrue: [ + self error: 'Token replacement only valid for Strings' ]. + (currentIndex := self indexOfSubCollection: oldSubstring startingAt: 1 ifAbsent: 0) = 0 ifTrue: [ ^self copy ]. + oldSubstring size = newSubstring size ifTrue: [ "Special case" + | string startSearch endIndex | + string := self copy. + startSearch := 1. + [ + endIndex := currentIndex + oldSubstring size - 1. + (ifTokens and: [ + (currentIndex > 1 and: [ (self at: currentIndex - 1) isAlphaNumeric ]) + or: [ endIndex < self size and: [ (self at: endIndex + 1) isAlphaNumeric ] ] ]) + ifFalse: [ "match" + string + replaceFrom: currentIndex + to: endIndex + with: newSubstring + startingAt: 1 ]. + startSearch := endIndex + 1. + (currentIndex := self indexOfSubCollection: oldSubstring startingAt: startSearch ifAbsent: 0) = 0 ] whileFalse. + ^string ]. + ^self species new: self size streamContents: [ :stream | + | startSearch endIndex | + startSearch := 1. + [ + endIndex := currentIndex + oldSubstring size - 1. + (ifTokens and: [ + (currentIndex > 1 and: [ (self at: currentIndex - 1) isAlphaNumeric ]) + or: [ endIndex < self size and: [ (self at: endIndex + 1) isAlphaNumeric ] ] ]) + ifFalse: [ "match" + stream + next: currentIndex - startSearch + putAll: self + startingAt: startSearch; + nextPutAll: newSubstring ] + ifTrue: [ + stream + next: currentIndex - startSearch + oldSubstring size + putAll: self + startingAt: startSearch ]. + startSearch := endIndex + 1. + (currentIndex := self indexOfSubCollection: oldSubstring startingAt: startSearch ifAbsent: 0) = 0 ] whileFalse. + stream + next: self size - startSearch + 1 + putAll: self + startingAt: startSearch ] - | aString startSearch currentIndex endIndex | - (ifTokens and: [(self isString) not]) - ifTrue: [(self isKindOf: Text) ifFalse: [ - self error: 'Token replacement only valid for Strings']]. - aString := self. - startSearch := 1. - [(currentIndex := aString indexOfSubCollection: oldSubstring startingAt: startSearch) - > 0] - whileTrue: - [endIndex := currentIndex + oldSubstring size - 1. - (ifTokens not - or: [(currentIndex = 1 - or: [(aString at: currentIndex-1) isAlphaNumeric not]) - and: [endIndex = aString size - or: [(aString at: endIndex+1) isAlphaNumeric not]]]) - ifTrue: [aString := aString - copyReplaceFrom: currentIndex - to: endIndex - with: newSubstring. - startSearch := currentIndex + newSubstring size] - ifFalse: [ - ifTokens - ifTrue: [startSearch := currentIndex + 1] - ifFalse: [startSearch := currentIndex + newSubstring size]]]. - ^ aString "Test case: + 'test te string' copyReplaceAll: 'te' with: 'longone' asTokens: true "! - 'test te string' copyReplaceAll: 'te' with: 'longone' asTokens: true " - ! Item was changed: ----- Method: WriteStream>>next:putAll:startingAt: (in category 'accessing') ----- next: anInteger putAll: aCollection startingAt: startIndex "Store the next anInteger elements from the given collection." | newEnd | + anInteger > 0 ifFalse: [ ^aCollection ]. (collection class == aCollection class or: [ collection isString and: [ aCollection isString and: [ collection class format = aCollection class format ] ] ]) "Let Strings with the same field size as collection take the quick route too." ifFalse: [ ^super next: anInteger putAll: aCollection startingAt: startIndex ]. newEnd := position + anInteger. newEnd > writeLimit ifTrue: [self growTo: newEnd + 10]. collection replaceFrom: position+1 to: newEnd with: aCollection startingAt: startIndex. position := newEnd. ^aCollection! From herbertkoenig at gmx.net Sat Aug 27 20:02:10 2016 From: herbertkoenig at gmx.net (=?UTF-8?Q?Herbert_K=c3=b6nig?=) Date: Sat Aug 27 20:02:11 2016 Subject: [squeak-dev] OSProcess crashes VM on 5.1 on Raspberry Pi In-Reply-To: <20160827142306.GA95391@shell.msen.com> References: <20160827142306.GA95391@shell.msen.com> Message-ID: <9e280a56-aba2-db72-92c4-dd6d16c28fb7@gmx.net> Hi Dave, thanks a lot that did it. Herbert Am 27.08.2016 um 16:23 schrieb David T. Lewis: > The OSProcess plugin has been modified in the Cog/Spur VMs, and the > modified version is broken. The solution is to use the unmodified version, > which is VMConstruction-Plugins-OSProcessPlugin-dtl.40.mcz in the > http://www.squeaksource.com/OSProcessPlugin repository. > > I am attaching a copy of the compiled OSProcess plugin from my Raspberry Pi. > No guarantees, but if you unpack this and copy it to your VM directory, it > should work. > > Dave > > > On Sat, Aug 27, 2016 at 02:04:27PM +0200, Herbert K??nig wrote: >> Hi, >> >> on my Raspi A+ I run the 5.0 allInOne with OSProcess and CommandShell. I >> try to port to the shiny new 5.1. >> >> Very early in my app i do: >> >> ExternalUnixOSProcess command: 'pkill raspistill' ; raspistill not running. >> >> This gives me the attached crash dump. in 5.0 I used OSProcess-dtl.95 >> and CommandShell-dtl.76. >> >> After my first crash I updated to the latest I found on Squeaksource, 99 >> and 83 resp. >> >> On lines 238 and 261 the dump says Stack overflow. >> >> Any ideas how to proceed? >> >> Cheers, >> >> Herbert >> >> >> >> Segmentation fault Sat Aug 27 13:44:20 2016 >> >> >> /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/squeak >> Squeak VM version: 5.0-201608171728 Wed Aug 17 19:29:47 UTC 2016 gcc 4.9.2 [Production Spur VM] >> Built from: CoInterpreter VMMaker.oscog-cb.1919 uuid: 00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016 >> With: StackToRegisterMappingCogit VMMaker.oscog-cb.1919 uuid: 00a8dd2a-bc8d-4552-b400-be781c8aabec Aug 17 2016 >> Revision: VM: 201608171728 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ Date: Wed Aug 17 10:28:01 2016 -0700 $ >> Plugins: 201608171728 https://github.com/OpenSmalltalk/opensmalltalk-vm.git $ >> Build host: Linux testing-gce-65a3e8a3-406d-4e8d-9606-fb64a9951919 3.19.0-66-generic #74~14.04.1-Ubuntu SMP Tue Jul 19 19:56:11 UTC 2016 armv7l GNU/Linux >> plugin path: /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/ [default: /home/pi/Desktop/Squeak5_1PictureAnalyze/bin/] >> >> >> C stack backtrace & registers: >> r0 0x000422c0 r1 0x00000000 r2 0x00000016 r3 0xb5c81500 >> r4 0x000422c0 r5 0xb5cc377c r6 0xb5c8144c r7 0xb5c6dc20 >> r8 0x00207250 r9 0xbe8b26fc r10 0x13000000 fp 0xbe8a5984 >> ip 0xb5c81324 sp 0xbe8a58a0 lr 0xb6c53810 pc 0xb5c6cc2c >> *[0x0] >> [0x0] >> >> >> Smalltalk stack dump: >> 0xbe8b26fc I UnixOSProcessAccessor>forkAndExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: 0x23b74d0: a(n) UnixOSProcessAccessor >> 0xbe8b2778 I UnixProcess>processProxy:forkAndExec:arguments:environment:descriptors: 0x30ad748: a(n) UnixProcess >> 0xbe8b27ac I ExternalUnixOSProcess>forkChild 0xf33628: a(n) ExternalUnixOSProcess >> 0xbe8b27cc I ExternalUnixOSProcess class>forkAndExec:arguments:environment: 0x2df3310: a(n) ExternalUnixOSProcess class >> 0xbe8b27f8 I ExternalUnixOSProcess class>command: 0x2df3310: a(n) ExternalUnixOSProcess class >> 0xbe8b281c I PictureCompare>killTimelapse 0x34161b0: a(n) PictureCompare >> 0xbe8b2840 I PictureCompare>waitKillTimelapse 0x34161b0: a(n) PictureCompare >> 0xbe8b2884 I PictureCompare>analyzeCameraQuarter 0x34161b0: a(n) PictureCompare >> 0xbe8b289c M PictureCompare>(nil) 0x34161b0: a(n) PictureCompare >> 0xbe8b28c8 I Compiler>evaluateCue:ifFail: 0xe66008: a(n) Compiler >> 0xbe8b28f4 I Compiler>evaluateCue:ifFail:logged: 0xe66008: a(n) Compiler >> 0xbe8b2924 I Compiler>evaluate:in:to:notifying:ifFail:logged: 0xe66008: a(n) Compiler >> 0xbe8b295c M [] in SmalltalkEditor(TextEditor)>evaluateSelectionAndDo: 0x2dfbbb8: a(n) SmalltalkEditor >> 0xbe8b2978 M BlockClosure>on:do: 0xe661a0: a(n) BlockClosure >> 0xbe8af6d4 M SmalltalkEditor(TextEditor)>evaluateSelectionAndDo: 0x2dfbbb8: a(n) SmalltalkEditor >> 0xbe8af6f8 I SmalltalkEditor(TextEditor)>evaluateSelection 0x2dfbbb8: a(n) SmalltalkEditor >> 0xbe8af718 I SmalltalkEditor(TextEditor)>doIt 0x2dfbbb8: a(n) SmalltalkEditor >> 0xbe8af730 M SmalltalkEditor(TextEditor)>doIt: 0x2dfbbb8: a(n) SmalltalkEditor >> 0xbe8af75c I SmalltalkEditor(TextEditor)>dispatchOnKeyboardEvent: 0x2dfbbb8: a(n) SmalltalkEditor >> 0xbe8af780 I SmalltalkEditor(TextEditor)>keyStroke: 0x2dfbbb8: a(n) SmalltalkEditor >> 0xbe8af7a0 M [] in TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af7c4 M TextMorphForEditView(TextMorph)>handleInteraction:fromEvent: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af7ec I TextMorphForEditView>handleInteraction:fromEvent: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af814 M [] in TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af834 I StandardToolSet class>codeCompletionAround:textMorph:keyStroke: 0x1714200: a(n) StandardToolSet class >> 0xbe8af860 I ToolSet class>codeCompletionAround:textMorph:keyStroke: 0x170f7f8: a(n) ToolSet class >> 0xbe8af884 M TextMorphForEditView(TextMorph)>keyStroke: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af8ac I TextMorphForEditView>keyStroke: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af8d4 I TextMorphForEditView(Morph)>handleKeystroke: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af8fc I TextMorphForEditView(TextMorph)>handleKeystroke: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af918 M KeyboardEvent>sentTo: 0xe65d60: a(n) KeyboardEvent >> 0xbe8af938 M TextMorphForEditView(Morph)>handleEvent: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af954 M TextMorphForEditView(Morph)>handleFocusEvent: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8af978 M MorphicEventDispatcher>doHandlingForFocusEvent:with: 0xe657e8: a(n) MorphicEventDispatcher >> 0xbe8ae67c M MorphicEventDispatcher>dispatchFocusEvent:with: 0xe657e8: a(n) MorphicEventDispatcher >> 0xbe8ae69c M TextMorphForEditView(Morph)>processFocusEvent:using: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8ae6bc M TextMorphForEditView(Morph)>processFocusEvent: 0x341ffd8: a(n) TextMorphForEditView >> 0xbe8ae6e4 M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph >> 0xbe8ae704 M BlockClosure>ensure: 0xe65868: a(n) BlockClosure >> 0xbe8ae724 M KeyboardEvent(MorphicEvent)>becomeActiveDuring: 0xe65018: a(n) KeyboardEvent >> 0xbe8ae74c M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph >> 0xbe8ae76c M BlockClosure>ensure: 0xe65960: a(n) BlockClosure >> 0xbe8ae78c M HandMorph>becomeActiveDuring: 0x1c46458: a(n) HandMorph >> 0xbe8ae7b4 M [] in HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph >> 0xbe8ae7d4 M BlockClosure>ensure: 0xe65a58: a(n) BlockClosure >> 0xbe8ae7f4 M PasteUpMorph>becomeActiveDuring: 0x1838780: a(n) PasteUpMorph >> 0xbe8ae818 M HandMorph>sendFocusEvent:to:clear: 0x1c46458: a(n) HandMorph >> 0xbe8ae844 M HandMorph>sendEvent:focus:clear: 0x1c46458: a(n) HandMorph >> 0xbe8ae868 M HandMorph>sendKeyboardEvent: 0x1c46458: a(n) HandMorph >> 0xbe8ae888 M HandMorph>handleEvent: 0x1c46458: a(n) HandMorph >> 0xbe8ae8b4 M HandMorph>processEvents 0x1c46458: a(n) HandMorph >> 0xbe8ae8d0 M [] in WorldState>doOneCycleNowFor: 0x227ba70: a(n) WorldState >> 0xbe8ae8f4 M Array(SequenceableCollection)>do: 0x13cfa10: a(n) Array >> 0xbe8ae910 M WorldState>handsDo: 0x227ba70: a(n) WorldState >> 0xbe8ae930 M WorldState>doOneCycleNowFor: 0x227ba70: a(n) WorldState >> 0xbe8ae94c M WorldState>doOneCycleFor: 0x227ba70: a(n) WorldState >> 0xbe8ae968 M PasteUpMorph>doOneCycle 0x1838780: a(n) PasteUpMorph >> 0xbe8ae980 M [] in MorphicProject>spawnNewProcess 0x23ca268: a(n) MorphicProject >> 0x17c6208 s [] in BlockClosure>newProcess >> >> Most recent primitives >> scanBitLengths:into: >> scanBitLengths:into: >> scanBitLengths:into: >> scanBitLengths:into: >> scanBitLengths:into: >> scanBitLengths:into: >> scanBitLengths:into: >> scanBitLengths:into: >> scanBitLengths:into: >> bitPosition >> fixedBlockSizeFor:and: >> fixedBlockSizeFor:and: >> maxCode >> maxCode >> maxCode >> maxCode >> maxCode >> maxCode >> maxCode >> dynamicBlockSizeFor:and:using:and: >> dynamicBlockSizeFor:and:using:and: >> dynamicBlockSizeFor:and:using:and: >> + >> + >> bitLengthAt: >> bitLengthAt: >> at: >> at: >> at: >> at: >> at: >> at: >> at: >> at: >> at: >> nextBits:put: >> nextBits:put: >> at: >> nextBytePut: >> flushBits >> bitXor: >> growTo: >> growTo: >> growTo: >> growTo: >> growTo: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> size >> replaceFrom:to:with:startingAt: >> size >> size >> size >> initialPC >> size >> at: >> at: >> at: >> perform: >> size >> newMethod:header: >> at:put: >> at:put: >> at:put: >> literalAt: >> objectAt:put: >> objectAt:put: >> objectAt:put: >> at: >> at:put: >> at: >> at:put: >> at: >> at:put: >> withArgs:executeMethod: >> basicNew >> basicNew >> value >> basicNew >> size >> size >> size >> replaceFrom:to:with:startingAt: >> size >> replaceFrom:to:with:startingAt: >> value:value: >> value:value: >> value:value: >> indexOfAscii:inString:startingAt: >> value:value: >> value:value: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> basicNew >> getSystemAttribute: >> findFirstInString:inSet:startingAt: >> primOpen:writable: >> shallowCopy >> identityHash >> wait >> **StackOverflow** >> identityHash >> basicNew: >> at:put: >> basicNew >> new: >> signal >> species >> basicNew: >> printString >> printString >> printString >> primWrite:from:startingAt:count: >> nextPutAll: >> basicNew >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> = >> at: >> at: >> basicNew >> ~= >> getSystemAttribute: >> findFirstInString:inSet:startingAt: >> getSystemAttribute: >> findFirstInString:inSet:startingAt: >> primLookupEntryIn:name: >> at: >> at: >> at: >> at: >> at: >> basicNew >> getSystemAttribute: >> findFirstInString:inSet:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> indexOfAscii:inString:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> getSystemAttribute: >> findFirstInString:inSet:startingAt: >> fileNamed: >> identityHash >> wait >> **StackOverflow** >> identityHash >> basicNew: >> new: >> signal >> basicNew: >> primWrite:from:startingAt:count: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> indexOfAscii:inString:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> getSystemAttribute: >> findFirstInString:inSet:startingAt: >> primOpen:writable: >> identityHash >> wait >> **StackOverflow** >> identityHash >> basicNew: >> new: >> signal >> basicNew: >> primClose: >> wait >> remove:ifAbsent: >> \\ >> at: >> identityHash >> signal >> stringHash:initialHash: >> stringHash:initialHash: >> value: >> identityHash >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> value:value: >> = >> beginsWith: >> beginsWith: >> beginsWith: >> beginsWith: >> setPathName: >> getSystemAttribute: >> findFirstInString:inSet:startingAt: >> getSystemAttribute: >> findFirstInString:inSet:startingAt: >> directoryEntryForName: >> directoryEntryForName: >> directoryEntryForName: >> directoryEntryForName: >> directoryEntryForName: >> directoryEntryForName: >> basicNew >> getSystemAttribute: >> basicNew >> basicNew >> identityHash >> primGetCurrentWorkingDirectory >> value: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> value: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> primSizeOfPointer >> value: >> >> sizeOfPointer >> value >> value >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> replaceFrom:to:with:startingAt: >> new: >> collect: >> at: >> value:value: >> value:value: >> at: >> value:value: >> at: >> value:value: >> replaceFrom:to:with:startingAt: >> at: >> at: >> at: >> at: >> at: >> at: >> at: >> at: >> primGetCurrentWorkingDirectory >> compare:with:collated: >> primForkExec:stdIn:stdOut:stdErr:argBuf:argOffsets:envBuf:envOffsets:workingDir: >> >> stack page bytes 4096 available headroom 2788 minimum unused headroom 2996 >> >> (Segmentation fault) > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160827/3163b7c8/attachment.htm From commits at source.squeak.org Sat Aug 27 21:55:03 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sat Aug 27 21:55:06 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160827215503.2244.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068729.html Name: WebClient-Core-ul.103 Ancestors: WebClient-Core-ul.102 - fixed WebSocket00 >> #close ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068730.html Name: System-ul.910 Ancestors: System-mt.909 DeepCopier changes: - added #new: to create a new instance with a given initial capacity - avoid a block creation in #fixDependents ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068731.html Name: Network-ul.183 Ancestors: Network-ul.182 Don't let #next:putAll:startingAt: roll back the receiver when the first argument is negative. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068732.html Name: Multilingual-ul.216 Ancestors: Multilingual-tfel.215 Don't let #next:putAll:startingAt:toStream: roll back the receiver when the first argument is negative. This isn't mandatory with the current implementation if #next:putAll:startingAt: ignores negative counts. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068733.html Name: Kernel-ul.1036 Ancestors: Kernel-mt.1035 Use #new: to create a a DeepCopier with a given initial capacity. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068734.html Name: Files-ul.162 Ancestors: Files-cmm.161 Don't let #next:putAll:startingAt: roll back the receiver when the first argument is negative. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068735.html Name: Compression-ul.49 Ancestors: Compression-cmm.48 Don't let #next:putAll:startingAt: roll back the receiver when the first argument is negative. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068736.html Name: Collections-ul.714 Ancestors: Collections-mt.713 SequenceableCollection>>copyReplaceAll:with:asTokens: - return a copy in all cases - avoid quadratic performance when many replacements have to be done AttributedTextStream: - avoid creation of unnecessary objects during initialization - use default size 10 Don't let #next:putAll:startingAt: roll back the receiver when the first argument is negative. ============================================= From commits at source.squeak.org Sun Aug 28 03:16:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 28 03:16:10 2016 Subject: [squeak-dev] The Inbox: Files-dtl.163.mcz Message-ID: David T. Lewis uploaded a new version of Files to project The Inbox: http://source.squeak.org/inbox/Files-dtl.163.mcz ==================== Summary ==================== Name: Files-dtl.163 Author: dtl Time: 27 August 2016, 11:16:05.899859 pm UUID: b4b2f4c1-4c24-44b4-8fc7-90a63a0f5940 Ancestors: Files-ul.162 Add StandardFileStream>>update: to handle #appendEntry by flushing the stream. This allows the standard output stream to be a dependent of the Transcript, flushing output as expected for a transcript view. =============== Diff against Files-ul.162 =============== Item was changed: ----- Method: FileStream class>>startUp: (in category 'system startup') ----- startUp: resuming resuming ifTrue: [ self voidStdioFiles. [ TheStdioHandles := self stdioHandles ] on: Error do: [:ex| TheStdioHandles isArray ifFalse: [ + TheStdioHandles := Array new: 3 ] ]. + (Smalltalk at: #TranscriptStream) + ifNotNilDo: [ :t | "Reestablish dependency for stdout Transcript view" + t redirectToStdOut: t redirectToStdOut ] ]! - TheStdioHandles := Array new: 3 ] ] ]! Item was added: + ----- Method: StandardFileStream>>update: (in category 'updating') ----- + update: aParameter + super update: aParameter. + aParameter == #appendEntry + ifTrue: [self flush]. "Transcript is being redirected to this steam, stdout" + ! From commits at source.squeak.org Sun Aug 28 03:17:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 28 03:17:03 2016 Subject: [squeak-dev] The Inbox: Collections-dtl.715.mcz Message-ID: David T. Lewis uploaded a new version of Collections to project The Inbox: http://source.squeak.org/inbox/Collections-dtl.715.mcz ==================== Summary ==================== Name: Collections-dtl.715 Author: dtl Time: 27 August 2016, 11:16:53.919203 pm UUID: 7d00851c-8dae-4128-9550-138e30c644f5 Ancestors: Collections-ul.714 When the redirectToStdOut preference is enabled, let the standard output stream be a view on the Transcript. Flush output to stdout on endEntry. Make cr and lf work for the stdout view. Permit other views to continue functioning normally in the image, with the standard output as an additional view. =============== Diff against Collections-ul.714 =============== Item was changed: ----- Method: TranscriptStream class>>redirectToStdOut: (in category 'preferences') ----- redirectToStdOut: aBoolean + (RedirectToStdOut := aBoolean) + ifTrue: [Transcript addDependent: FileStream stdout] + ifFalse: [Transcript removeDependent: FileStream stdout].! - RedirectToStdOut := aBoolean.! Item was added: + ----- Method: TranscriptStream>>nextPut: (in category 'stream extensions') ----- + nextPut: anObject + self target == self ifFalse: [self target nextPut: anObject]. "delegated to stdout" + ^ super nextPut: anObject.! Item was added: + ----- Method: TranscriptStream>>nextPutAll: (in category 'stream extensions') ----- + nextPutAll: aCollection + self target == self ifFalse: [self target nextPutAll: aCollection]. "delegated to stdout" + ^ super nextPutAll: aCollection.! Item was changed: ----- Method: TranscriptStream>>show: (in category 'stream extensions') ----- show: anObject "TextCollector compatibility" [ + self nextPutAll: anObject asString. - self target nextPutAll: anObject asString. self endEntry ] on: FileWriteError do: [self class redirectToStdOut: false].! Item was changed: ----- Method: TranscriptStream>>showln: (in category 'stream extensions') ----- showln: anObject "TextCollector compatibility. Ensure a new line before inserting a message." [ + self - self target cr; nextPutAll: anObject asString. self endEntry. ] on: FileWriteError do: [self class redirectToStdOut: false].! Item was removed: - ----- Method: WriteStream>>flush (in category 'accessing') ----- - flush! From lewis at mail.msen.com Sun Aug 28 03:29:30 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Aug 28 03:29:34 2016 Subject: [squeak-dev] The Inbox: Collections-dtl.715.mcz In-Reply-To: <201608280317.u7S3H3M0031538@shell.msen.com> References: <201608280317.u7S3H3M0031538@shell.msen.com> Message-ID: <20160828032930.GA33098@shell.msen.com> Files-dtl.163 and Collections-dtl.715 permit the Transcript to be redirected to stdout in a more useful way, particularly for VMs that use stdio (not Windows HANDLE) for file streams. With these updates, the redirectToStdOut preference may be left enabled without affecting normal transcript displays in the image. The stdout output will be flushed as expected, and cr and lf output will work on stdout. If no objections I will move to trunk in a day or so. Dave On Sun, Aug 28, 2016 at 03:16:54AM +0000, commits@source.squeak.org wrote: > David T. Lewis uploaded a new version of Collections to project The Inbox: > http://source.squeak.org/inbox/Collections-dtl.715.mcz > > ==================== Summary ==================== > > Name: Collections-dtl.715 > Author: dtl > Time: 27 August 2016, 11:16:53.919203 pm > UUID: 7d00851c-8dae-4128-9550-138e30c644f5 > Ancestors: Collections-ul.714 > > When the redirectToStdOut preference is enabled, let the standard output stream be a view on the Transcript. Flush output to stdout on endEntry. Make cr and lf work for the stdout view. Permit other views to continue functioning normally in the image, with the standard output as an additional view. > > =============== Diff against Collections-ul.714 =============== > > Item was changed: > ----- Method: TranscriptStream class>>redirectToStdOut: (in category 'preferences') ----- > redirectToStdOut: aBoolean > > + (RedirectToStdOut := aBoolean) > + ifTrue: [Transcript addDependent: FileStream stdout] > + ifFalse: [Transcript removeDependent: FileStream stdout].! > - RedirectToStdOut := aBoolean.! > > Item was added: > + ----- Method: TranscriptStream>>nextPut: (in category 'stream extensions') ----- > + nextPut: anObject > + self target == self ifFalse: [self target nextPut: anObject]. "delegated to stdout" > + ^ super nextPut: anObject.! > > Item was added: > + ----- Method: TranscriptStream>>nextPutAll: (in category 'stream extensions') ----- > + nextPutAll: aCollection > + self target == self ifFalse: [self target nextPutAll: aCollection]. "delegated to stdout" > + ^ super nextPutAll: aCollection.! > > Item was changed: > ----- Method: TranscriptStream>>show: (in category 'stream extensions') ----- > show: anObject > "TextCollector compatibility" > > [ > + self nextPutAll: anObject asString. > - self target nextPutAll: anObject asString. > self endEntry > ] on: FileWriteError do: [self class redirectToStdOut: false].! > > Item was changed: > ----- Method: TranscriptStream>>showln: (in category 'stream extensions') ----- > showln: anObject > "TextCollector compatibility. Ensure a new line before inserting a message." > > [ > + self > - self target > cr; > nextPutAll: anObject asString. > self endEntry. > ] on: FileWriteError do: [self class redirectToStdOut: false].! > > Item was removed: > - ----- Method: WriteStream>>flush (in category 'accessing') ----- > - flush! > From nicolaihess at gmail.com Sun Aug 28 10:17:09 2016 From: nicolaihess at gmail.com (Nicolai Hess) Date: Sun Aug 28 10:17:14 2016 Subject: [squeak-dev] Binary selector and special characters Message-ID: Hi, where can I find a good reference about what characters are allowed as binary selectors (from old syntax definition) and what is nowadays allowed by the implementations. And whether the current set of allowed binaries selector includes some additions on purpose or if this is just a bug of the parser. >From what I found out, (Blue book and some other smalltalk syntax definitions) the current set of allowed characters includes the "special characters": $! $% $& $* $+ $, $- $/ $< $= $> $? $@ $\ $| $~ (some implementation do not allow $@ and some calls $- not a special character but allowed as binary selector character) And this is what String>>#numArgs uses. Therefore '-' numArgs "->1". '!' numArgs "->1". And for example: '?' numArgs "-> -1 (the -1 is indicating "not even a valid selector")" But I am interested in the characters not called "special characters and not even in the range 0-126. The scanner allowes much more characters to be used as a selector name (From the scanners typeTable) : {Character value: 1 . Character value: 2 . Character value: 3 . Character value: 4 . Character value: 5 . Character value: 6 . Character value: 7 . Character backspace . Character value: 11 . Character value: 14 . Character value: 15 . Character value: 16 . Character value: 17 . Character value: 18 . Character value: 19 . Character value: 20 . Character value: 21 . Character value: 22 . Character value: 23 . Character value: 24 . Character value: 25 . Character value: 26 . Character escape . Character value: 28 . Character value: 29 . Character value: 30 . Character value: 31 . $! . $% . $& . $* . $+ . $, . $- . $/ . $< . $= . $> . $? . $@ . $\ . $` . $~ . Character delete . $? . $ . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $ . $? . $ . $ . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $ . $? . $? . $ . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $? . $?} This means you can define a method with for example the name "?". So , the question I want to ask. What do we want to allow as a binary selector (character). All that is nowadays "parseable" as binary selector, or only the set of "special characters" or something between both, and where to put this information, the "this is an allowed binary selector character" information? Thanks Nicolai -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160828/6d14900a/attachment.htm From leves at caesar.elte.hu Sun Aug 28 10:47:26 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Sun Aug 28 10:47:31 2016 Subject: [squeak-dev] The Inbox: Files-dtl.163.mcz In-Reply-To: References: Message-ID: On Sun, 28 Aug 2016, commits@source.squeak.org wrote: > David T. Lewis uploaded a new version of Files to project The Inbox: > http://source.squeak.org/inbox/Files-dtl.163.mcz > > ==================== Summary ==================== > > Name: Files-dtl.163 > Author: dtl > Time: 27 August 2016, 11:16:05.899859 pm > UUID: b4b2f4c1-4c24-44b4-8fc7-90a63a0f5940 > Ancestors: Files-ul.162 > > Add StandardFileStream>>update: to handle #appendEntry by flushing the stream. This allows the standard output stream to be a dependent of the Transcript, flushing output as expected for a transcript view. > > =============== Diff against Files-ul.162 =============== > > Item was changed: > ----- Method: FileStream class>>startUp: (in category 'system startup') ----- > startUp: resuming > > resuming ifTrue: [ > self voidStdioFiles. > [ TheStdioHandles := self stdioHandles ] > on: Error > do: [:ex| > TheStdioHandles isArray ifFalse: [ > + TheStdioHandles := Array new: 3 ] ]. > + (Smalltalk at: #TranscriptStream) Smalltalk >> #at: will raise an error when there's no entry for the given key. > + ifNotNilDo: [ :t | "Reestablish dependency for stdout Transcript view" We should deprecate #ifNotNilDo: in favor of #ifNotNil:. Levente > + t redirectToStdOut: t redirectToStdOut ] ]! > - TheStdioHandles := Array new: 3 ] ] ]! > > Item was added: > + ----- Method: StandardFileStream>>update: (in category 'updating') ----- > + update: aParameter > + super update: aParameter. > + aParameter == #appendEntry > + ifTrue: [self flush]. "Transcript is being redirected to this steam, stdout" > + ! > > > From commits at source.squeak.org Sun Aug 28 14:55:17 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Sun Aug 28 14:55:20 2016 Subject: [squeak-dev] The Inbox: Files-dtl.164.mcz Message-ID: David T. Lewis uploaded a new version of Files to project The Inbox: http://source.squeak.org/inbox/Files-dtl.164.mcz ==================== Summary ==================== Name: Files-dtl.164 Author: dtl Time: 28 August 2016, 10:55:13.088975 am UUID: 4d4aaa9c-efd6-4ea2-8f37-d405243840da Ancestors: Files-dtl.163 Avoid exception if TranscriptSteam is not present, and use #ifNotNil: instead of #ifNotNilDo: =============== Diff against Files-dtl.163 =============== Item was changed: ----- Method: FileStream class>>startUp: (in category 'system startup') ----- startUp: resuming resuming ifTrue: [ self voidStdioFiles. [ TheStdioHandles := self stdioHandles ] on: Error do: [:ex| TheStdioHandles isArray ifFalse: [ TheStdioHandles := Array new: 3 ] ]. + (Smalltalk classNamed: 'TranscriptStream') + ifNotNil: [ :t | "Reestablish dependency for stdout Transcript view" + t redirectToStdOut: t redirectToStdOut ] ] + ! - (Smalltalk at: #TranscriptStream) - ifNotNilDo: [ :t | "Reestablish dependency for stdout Transcript view" - t redirectToStdOut: t redirectToStdOut ] ]! From lewis at mail.msen.com Sun Aug 28 15:03:54 2016 From: lewis at mail.msen.com (David T. Lewis) Date: Sun Aug 28 15:03:56 2016 Subject: [squeak-dev] The Inbox: Files-dtl.163.mcz In-Reply-To: References: Message-ID: <20160828150354.GA74636@shell.msen.com> On Sun, Aug 28, 2016 at 12:47:26PM +0200, Levente Uzonyi wrote: > > Smalltalk >> #at: will raise an error when there's no entry for the given > key. Oops, thank you. > > > ifNotNilDo: [ :t | "Reestablish dependency for stdout Transcript view" > > We should deprecate #ifNotNilDo: in favor of #ifNotNil:. > Yes. Or at least update the method comment to make the difference clear. Possibly we should we have a package named 'Deprecated-Compatibility' for methods that are deprecated, but that we do not actually want to remove from the system any time soon. There is probably a small number of methods that may be used by externally maintained packages that should be marked as deprecated, but kept in the image as a convenience for loading existing packages from SqueakMap. Dave From commits at source.squeak.org Mon Aug 29 12:12:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 12:12:02 2016 Subject: [squeak-dev] The Trunk: Squeak-Version-tfel.4726.mcz Message-ID: Tim Felgentreff uploaded a new version of Squeak-Version to project The Trunk: http://source.squeak.org/trunk/Squeak-Version-tfel.4726.mcz ==================== Summary ==================== Name: Squeak-Version-tfel.4726 Author: tfel Time: 29 August 2016, 2:11:53.987376 pm UUID: 0998f25a-cca6-e646-88d5-628f593df768 Ancestors: Squeak-Version-mt.4725 fix SmallLand unload =============== Diff against Squeak-Version-mt.4725 =============== Item was changed: (PackageInfo named: 'Squeak-Version') postscript: '(MCPackage named: ''311Deprecated'') unload. + (MCPackage named: ''SmallLand-ColorTheme'') unload.'! - (MCPackage named: ''SmallLand'') unload.'! From commits at source.squeak.org Mon Aug 29 12:51:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 12:51:11 2016 Subject: [squeak-dev] The Trunk: Collections-tfel.715.mcz Message-ID: Tim Felgentreff uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-tfel.715.mcz ==================== Summary ==================== Name: Collections-tfel.715 Author: tfel Time: 29 August 2016, 2:50:30.562946 pm UUID: 53dd4ec2-79d7-e143-ad26-6f0f8ba17c9b Ancestors: Collections-tfel.712, Collections-ul.714 merge fixes from Squeakland Etoys =============== Diff against Collections-ul.714 =============== Item was changed: ----- Method: TranscriptStream class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#TranscriptStream. #openMorphicTranscript. 'Transcript' translatedNoop. 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(TranscriptStream openMorphicTranscript 'Transcript' 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.') forFlapNamed: 'Tools'] ! Item was changed: ----- Method: WriteStream>>nextPut: (in category 'accessing') ----- nextPut: anObject "Primitive. Insert the argument at the next position in the Stream represented by the receiver. Fail if the collection of this stream is not an Array or a String. Fail if the stream is positioned at its end, or if the position is out of bounds in the collection. Fail if the argument is not of the right type for the collection. Optional. See Object documentation whatIsAPrimitive." + ((collection class == ByteString) and: [ + anObject isCharacter and:[anObject isOctetCharacter not]]) ifTrue: [ + collection := (WideString from: collection). + ^self nextPut: anObject. + ]. position >= writeLimit ifTrue: [^ self pastEndPut: anObject] ifFalse: [position := position + 1. ^collection at: position put: anObject]! From commits at source.squeak.org Mon Aug 29 13:00:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 13:00:20 2016 Subject: [squeak-dev] The Trunk: Collections-tfel.712.mcz Message-ID: Tim Felgentreff uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-tfel.712.mcz ==================== Summary ==================== Name: Collections-tfel.712 Author: tfel Time: 18 August 2016, 5:39:30.931286 pm UUID: dc17edaa-90b9-e748-9384-2f1cf3ac25bf Ancestors: Collections-mt.711, Collections-tfel.704 merge master =============== Diff against Collections-mt.711 =============== Item was changed: ----- Method: String>>< (in category 'comparing') ----- < aString "Answer whether the receiver sorts before aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) = 1! - - ^ (self compare: self with: aString collated: AsciiOrder) = 1! Item was changed: ----- Method: String>><= (in category 'comparing') ----- <= aString "Answer whether the receiver sorts before or equal to aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) <= 2! - - ^ (self compare: self with: aString collated: AsciiOrder) <= 2! Item was changed: ----- Method: String>>> (in category 'comparing') ----- > aString "Answer whether the receiver sorts after aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) = 3! - - ^ (self compare: self with: aString collated: AsciiOrder) = 3! Item was changed: ----- Method: String>>>= (in category 'comparing') ----- >= aString "Answer whether the receiver sorts after or equal to aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) >= 2! - - ^ (self compare: self with: aString collated: AsciiOrder) >= 2! Item was changed: ----- Method: TranscriptStream class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#TranscriptStream. #openMorphicTranscript. 'Transcript' translatedNoop. 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(TranscriptStream openMorphicTranscript 'Transcript' 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.') forFlapNamed: 'Tools'] ! Item was changed: ----- Method: WriteStream>>nextPut: (in category 'accessing') ----- nextPut: anObject "Primitive. Insert the argument at the next position in the Stream represented by the receiver. Fail if the collection of this stream is not an Array or a String. Fail if the stream is positioned at its end, or if the position is out of bounds in the collection. Fail if the argument is not of the right type for the collection. Optional. See Object documentation whatIsAPrimitive." + ((collection class == ByteString) and: [ + anObject isCharacter and:[anObject isOctetCharacter not]]) ifTrue: [ + collection _ (WideString from: collection). + ^self nextPut: anObject. + ]. position >= writeLimit ifTrue: [^ self pastEndPut: anObject] ifFalse: + [position _ position + 1. - [position := position + 1. ^collection at: position put: anObject]! From commits at source.squeak.org Mon Aug 29 13:00:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 13:00:34 2016 Subject: [squeak-dev] The Trunk: Collections-tfel.704.mcz Message-ID: Tim Felgentreff uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-tfel.704.mcz ==================== Summary ==================== Name: Collections-tfel.704 Author: tfel Time: 6 August 2016, 1:05:41.688734 pm UUID: b799fb95-1b8e-4ae6-a9ae-3d93dac5b410 Ancestors: Collections-mt.703, Collections-tfel.703 merge with trunk =============== Diff against Collections-mt.703 =============== Item was changed: ----- Method: String>>< (in category 'comparing') ----- < aString "Answer whether the receiver sorts before aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) = 1! - - ^ (self compare: self with: aString collated: AsciiOrder) = 1! Item was changed: ----- Method: String>><= (in category 'comparing') ----- <= aString "Answer whether the receiver sorts before or equal to aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) <= 2! - - ^ (self compare: self with: aString collated: AsciiOrder) <= 2! Item was changed: ----- Method: String>>> (in category 'comparing') ----- > aString "Answer whether the receiver sorts after aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) = 3! - - ^ (self compare: self with: aString collated: AsciiOrder) = 3! Item was changed: ----- Method: String>>>= (in category 'comparing') ----- >= aString "Answer whether the receiver sorts after or equal to aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) >= 2! - - ^ (self compare: self with: aString collated: AsciiOrder) >= 2! Item was changed: ----- Method: TranscriptStream class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#TranscriptStream. #openMorphicTranscript. 'Transcript' translatedNoop. 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(TranscriptStream openMorphicTranscript 'Transcript' 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.') forFlapNamed: 'Tools'] ! Item was changed: ----- Method: WriteStream>>nextPut: (in category 'accessing') ----- nextPut: anObject "Primitive. Insert the argument at the next position in the Stream represented by the receiver. Fail if the collection of this stream is not an Array or a String. Fail if the stream is positioned at its end, or if the position is out of bounds in the collection. Fail if the argument is not of the right type for the collection. Optional. See Object documentation whatIsAPrimitive." + ((collection class == ByteString) and: [ + anObject isCharacter and:[anObject isOctetCharacter not]]) ifTrue: [ + collection _ (WideString from: collection). + ^self nextPut: anObject. + ]. position >= writeLimit ifTrue: [^ self pastEndPut: anObject] ifFalse: + [position _ position + 1. - [position := position + 1. ^collection at: position put: anObject]! From commits at source.squeak.org Mon Aug 29 13:02:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 13:02:46 2016 Subject: [squeak-dev] The Trunk: Collections-tfel.703.mcz Message-ID: Tim Felgentreff uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-tfel.703.mcz ==================== Summary ==================== Name: Collections-tfel.703 Author: tfel Time: 2 August 2016, 9:55:19.046368 am UUID: 7793774a-ac8e-cb45-b4bc-92b88b4cb50e Ancestors: Collections-mt.702, Collections-kfr.9 merge from Squeakland Etoys image =============== Diff against Collections-mt.702 =============== Item was changed: ----- Method: String>>< (in category 'comparing') ----- < aString "Answer whether the receiver sorts before aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) = 1! - - ^ (self compare: self with: aString collated: AsciiOrder) = 1! Item was changed: ----- Method: String>><= (in category 'comparing') ----- <= aString "Answer whether the receiver sorts before or equal to aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) <= 2! - - ^ (self compare: self with: aString collated: AsciiOrder) <= 2! Item was changed: ----- Method: String>>> (in category 'comparing') ----- > aString "Answer whether the receiver sorts after aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) = 3! - - ^ (self compare: self with: aString collated: AsciiOrder) = 3! Item was changed: ----- Method: String>>>= (in category 'comparing') ----- >= aString "Answer whether the receiver sorts after or equal to aString. The collation order is simple ascii (with case differences)." + ^(self compare: aString caseSensitive: true) >= 2! - - ^ (self compare: self with: aString collated: AsciiOrder) >= 2! Item was changed: ----- Method: TranscriptStream class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#TranscriptStream. #openMorphicTranscript. 'Transcript' translatedNoop. 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(TranscriptStream openMorphicTranscript 'Transcript' 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.') forFlapNamed: 'Tools'] ! Item was changed: ----- Method: WriteStream>>nextPut: (in category 'accessing') ----- nextPut: anObject "Primitive. Insert the argument at the next position in the Stream represented by the receiver. Fail if the collection of this stream is not an Array or a String. Fail if the stream is positioned at its end, or if the position is out of bounds in the collection. Fail if the argument is not of the right type for the collection. Optional. See Object documentation whatIsAPrimitive." + ((collection class == ByteString) and: [ + anObject isCharacter and:[anObject isOctetCharacter not]]) ifTrue: [ + collection _ (WideString from: collection). + ^self nextPut: anObject. + ]. position >= writeLimit ifTrue: [^ self pastEndPut: anObject] ifFalse: + [position _ position + 1. - [position := position + 1. ^collection at: position put: anObject]! From commits at source.squeak.org Mon Aug 29 13:12:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 13:12:24 2016 Subject: [squeak-dev] The Trunk: Graphics-tfel.364.mcz Message-ID: Tim Felgentreff uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-tfel.364.mcz ==================== Summary ==================== Name: Graphics-tfel.364 Author: tfel Time: 29 August 2016, 3:11:43.341946 pm UUID: 6e0cb73c-3749-b742-b9ea-41fad5ec6b27 Ancestors: Graphics-tfel.361, Graphics-mt.363 merge translations from Squeakland Etoys =============== Diff against Graphics-mt.363 =============== Item was changed: ----- Method: Form class>>serviceImageAsBackground (in category 'file list services') ----- serviceImageAsBackground "Answer a service for setting the desktop background from a given graphical file's contents" ^ SimpleServiceEntry provider: self + label: 'use graphic as background' translatedNoop - label: 'use graphic as background' selector: #openAsBackground: + description: 'use the graphic as the background for the desktop' translatedNoop + buttonLabel: 'background' translatedNoop! - description: 'use the graphic as the background for the desktop' - buttonLabel: 'background'! Item was changed: ----- Method: Form class>>serviceImageImportDirectory (in category 'file list services') ----- serviceImageImportDirectory "Answer a service for reading a graphic into ImageImports" ^(SimpleServiceEntry provider: self + label: 'import all images from this directory' translatedNoop - label: 'import all images from this directory' selector: #importImageDirectory: + description: 'Load all graphics found in this directory, adding them to the ImageImports repository.' translatedNoop + buttonLabel: 'import dir' translatedNoop) - description: 'Load all graphics found in this directory, adding them to the ImageImports repository.' - buttonLabel: 'import dir') argumentGetter: [ :fileList | fileList directory ]; yourself ! Item was changed: ----- Method: Form class>>serviceImageImportDirectoryWithSubdirectories (in category 'file list services') ----- serviceImageImportDirectoryWithSubdirectories "Answer a service for reading all graphics from a directory and its subdirectories into ImageImports" ^(SimpleServiceEntry provider: self + label: 'import all images from here and subdirectories' translatedNoop - label: 'import all images from here and subdirectories' selector: #importImageDirectoryWithSubdirectories: + description: 'Load all graphics found in this directory and its subdirectories, adding them to the ImageImports repository.' translatedNoop + buttonLabel: 'import subdirs' translatedNoop) - description: 'Load all graphics found in this directory and its subdirectories, adding them to the ImageImports repository.' - buttonLabel: 'import subdirs') argumentGetter: [ :fileList | fileList directory ]; yourself ! Item was changed: ----- Method: Form class>>serviceOpenImageInWindow (in category 'file list services') ----- serviceOpenImageInWindow "Answer a service for opening a graphic in a window" ^ SimpleServiceEntry provider: self + label: 'open graphic in a window' translatedNoop - label: 'open graphic in a window' selector: #openImageInWindow: + description: 'open a graphic file in a window' translatedNoop + buttonLabel: 'open' translatedNoop! - description: 'open a graphic file in a window' - buttonLabel: 'open'! From commits at source.squeak.org Mon Aug 29 14:18:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 14:18:46 2016 Subject: [squeak-dev] The Trunk: ToolBuilder-Kernel-tfel.108.mcz Message-ID: Tim Felgentreff uploaded a new version of ToolBuilder-Kernel to project The Trunk: http://source.squeak.org/trunk/ToolBuilder-Kernel-tfel.108.mcz ==================== Summary ==================== Name: ToolBuilder-Kernel-tfel.108 Author: tfel Time: 29 August 2016, 4:18:36.699946 pm UUID: 065fa494-8874-124c-b3aa-6e33726275bb Ancestors: ToolBuilder-Kernel-mt.107 adapt code from Etoys to indicate sequential progress =============== Diff against ToolBuilder-Kernel-mt.107 =============== Item was added: + ----- Method: String>>displaySequentialProgress: (in category '*toolbuilder-kernel') ----- + displaySequentialProgress: aBlock + " + 'This takes some time...' displaySequentialProgress: [ + (Delay forMilliseconds: 500) wait. + ProgressNotification signal: 0.1 extra: 'just starting'. + (Delay forMilliseconds: 500) wait. + ProgressNotification signal: 0.5. + (Delay forMilliseconds: 500) wait. + ProgressNotification signal: '1.0' extra: 'done'. + (Delay forMilliseconds: 500) wait. + ] + " + ProgressInitiationException + display: self + from: 0 to: 1 + during: [:bar | aBlock + on: ProgressNotification + do: [:e | + bar value: e messageText asNumber. + e extraParam: self, (e extraParam ifNil: ['']). + e pass]]. + ! From commits at source.squeak.org Mon Aug 29 14:20:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 14:20:38 2016 Subject: [squeak-dev] The Trunk: System-tfel.911.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.911.mcz ==================== Summary ==================== Name: System-tfel.911 Author: tfel Time: 29 August 2016, 4:20:07.411946 pm UUID: 0242c0ab-04df-994a-adb2-a8c26da259fa Ancestors: System-tfel.902, System-ul.910 merge fixes from Etoys Squeakland - Project loading was refactored, and hooks added to support Sexp projects - translations added - use new sequential progress mechanism when loading projects - translatedNoop added to Object, helps GetTextExporter find terms =============== Diff against System-ul.910 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: DiskProxy>>enter:revert:saveForRevert: (in category 'exceptions') ----- enter: returningFlag revert: revertFlag saveForRevert: saveForRevert "Look for our project on the server, then try to enter it!! DiskProxy is acting as a stub for the real thing. Called from a ProjectViewMorph in the current project. If have url, use it. Else look in current Project's server and folder." + constructorSelector == #namedExample: ifTrue: ["Project namedUrl: xxx" + ^ ((Smalltalk at: globalObjectName) perform: #fromExampleEtoys: + withArguments: constructorArgs) ]. constructorSelector == #namedUrl: ifTrue: ["Project namedUrl: xxx" ^ ((Smalltalk at: globalObjectName) perform: #fromUrl: withArguments: constructorArgs) ]. constructorSelector == #named: ifTrue: [ Project current fromMyServerLoad: constructorArgs first]. "name" ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." blockers := dummy blockers. known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known := known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ - obj == dummy project world ifFalse: [ refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known := known+1]. known := known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours := dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ refs removeKey: obj. known := known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was added: + ----- Method: Object>>translatedNoop (in category '*System-Localization-locales') ----- + translatedNoop + "This is correspondence gettext_noop() in gettext." + ^ self + ! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" unEscName := projName unescapePercents. triple := Project parseProjectFileName: unEscName. stem := triple first. rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. list := rawList collect: [:nnn | nnn unescapePercents]. max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ - (aName beginsWith: stem) ifTrue: [ num := (Project parseProjectFileName: aName) second. + num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ num := (Project parseProjectFileName: aName) second. num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " stem1 := stem allButLast, '.pr'. stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ (triple := aName findTokens: '.') size >= 2 ifTrue: [ max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was added: + ----- Method: Project class>>publishInSexp (in category 'preferences') ----- + publishInSexp + + ^ (Smalltalk classNamed: 'SISSDictionaryForScanning') + ifNil: [false] + ifNotNil: [:siss | siss publishInSexp]! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" list := aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. - list isString ifTrue: [^ self inform: 'server is unavailable']. list := list asSortedCollection asOrderedCollection. parts := list collect: [:en | Project parseProjectFileName: en]. parts := parts select: [:en | en third = 'pr']. ind := 1. [entry := list at: ind. projectName := entry first asLowercase. versions := OrderedCollection new. versions add: entry. [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was removed: - ----- Method: Project>>compressFilesIn:to:in:resources: (in category 'file in/out') ----- - compressFilesIn: tempDir to: localName in: localDirectory resources: collector - "Compress all the files in tempDir making up a zip file in localDirectory named localName" - | archive urlMap | - urlMap := Dictionary new. - collector locatorsDo:[:loc| - "map local file names to urls" - urlMap at: (tempDir localNameFor: loc localFileName) put: loc urlString. - ResourceManager cacheResource: loc urlString inArchive: localName]. - archive := ZipArchive new. - tempDir fileNames do:[:fn| | archiveName entry | - archiveName := urlMap at: fn ifAbsent:[fn]. - entry := archive addFile: (tempDir fullNameFor: fn) as: archiveName. - entry desiredCompressionMethod: ZipArchive compressionStored. - ]. - archive writeToFileNamed: (localDirectory fullNameFor: localName). - archive close. - tempDir fileNames do:[:fn| - tempDir deleteFileNamed: fn ifAbsent:[]]. - localDirectory deleteDirectory: tempDir localName.! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | - | depth topProject project | depth := 0. - topProject := Project topProject. project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: - [project ~= topProject and:[project notNil]] - whileTrue: [project := project parent. depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>exportSegmentFileName:directory: (in category 'file in/out') ----- exportSegmentFileName: aFileName directory: aDirectory + ^ self exportSegmentFileName: aFileName directory: aDirectory withoutInteraction: false! - | exportChangeSet | - - "An experimental version to fileout a changeSet first so that a project can contain its own classes" - - "Store my project out on the disk as an *exported* ImageSegment. Put all outPointers in a form that can be resolved in the target image. Name it .extSeg. - Player classes are included automatically." - - exportChangeSet := nil. - (changeSet notNil and: [changeSet isEmpty not]) ifTrue: [ - (self confirm: - 'Would you like to include all the changes in the change set - as part of this publishing operation?' translated) ifTrue: [ - exportChangeSet := changeSet - ]. - ]. - ^ self - exportSegmentWithChangeSet: exportChangeSet - fileName: aFileName - directory: aDirectory - ! Item was added: + ----- Method: Project>>exportSegmentFileName:directory:withoutInteraction: (in category 'file in/out') ----- + exportSegmentFileName: aFileName directory: aDirectory withoutInteraction: noInteraction + + | exportChangeSet | + + "An experimental version to fileout a changeSet first so that a project can contain its own classes" + + "Store my project out on the disk as an *exported* ImageSegment. Put all outPointers in a form that can be resolved in the target image. Name it .extSeg. + Player classes are included automatically." + exportChangeSet := nil. + (changeSet notNil and: [changeSet isEmpty not]) ifTrue: [ + (noInteraction or: [self confirm: + 'Would you like to include all the changes in the change set + as part of this publishing operation?' translated]) ifTrue: [ + exportChangeSet := changeSet + ]. + ]. + + Project publishInSexp ifTrue: [ + ^ self exportSegmentInSexpWithChangeSet: exportChangeSet fileName: aFileName directory: aDirectory withoutInteraction: noInteraction + ]. + ^ self + exportSegmentWithChangeSet: exportChangeSet + fileName: aFileName + directory: aDirectory + withoutInteraction: noInteraction! Item was added: + ----- Method: Project>>exportSegmentInSexpWithChangeSet:fileName:directory:withoutInteraction: (in category 'file in/out') ----- + exportSegmentInSexpWithChangeSet: aChangeSetOrNil fileName: aFileName directory: aDirectory withoutInteraction: noInteraction + + self subclassResponsibility! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: ProjectLoading class>>openName:stream:fromDirectory:withProjectView: (in category 'loading') ----- openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView - "Reconstitute a Morph from the selected file, presumed to be - represent a Morph saved via the SmartRefStream mechanism, and open it - in an appropriate Morphic world." + ^ self openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil + withProjectView: existingView clearOriginFlag: false.! - | morphOrList proj trusted localDir projStream archive mgr - projectsToBeDeleted baseChangeSet enterRestricted substituteFont - numberOfFontSubstitutes exceptions | - (preStream isNil or: [preStream size = 0]) ifTrue: [ - ProgressNotification signal: '9999 about to enter - project'. "the hard part is over" - ^self inform: - 'It looks like a problem occurred while - getting this project. It may be temporary, - so you may want to try again,' translated - ]. - ProgressNotification signal: '2:fileSizeDetermined - ',preStream size printString. - preStream isZipArchive - ifTrue:[ archive := ZipArchive new readFrom: preStream. - projStream := self - projectStreamFromArchive: archive] - ifFalse:[projStream := preStream]. - trusted := SecurityManager default positionToSecureContentsOf: - projStream. - trusted ifFalse: - [enterRestricted := (preStream isTypeHTTP or: - [aFileName isNil]) - ifTrue: [Preferences securityChecksEnabled] - ifFalse: [Preferences standaloneSecurityChecksEnabled]. - enterRestricted - ifTrue: [SecurityManager default enterRestrictedMode - ifFalse: - [preStream close. - ^ self]]]. - - localDir := Project squeakletDirectory. - aFileName ifNotNil: [ - (aDirectoryOrNil isNil or: [aDirectoryOrNil pathName - ~= localDir pathName]) ifTrue: [ - localDir deleteFileNamed: aFileName. - (localDir fileNamed: aFileName) binary - nextPutAll: preStream contents; - close. - ]. - ]. - morphOrList := projStream asUnZippedStream. - preStream sleep. "if ftp, let the connection close" - ProgressNotification signal: '3:unzipped'. - ResourceCollector current: ResourceCollector new. - baseChangeSet := ChangeSet current. - self useTempChangeSet. "named zzTemp" - "The actual reading happens here" - substituteFont := Preferences standardEToysFont copy. - numberOfFontSubstitutes := 0. - exceptions := Set new. - [[morphOrList := morphOrList fileInObjectAndCodeForProject] - on: MissingFont do: [ :ex | - exceptions add: ex. - numberOfFontSubstitutes := - numberOfFontSubstitutes + 1. - ex resume: substituteFont ]] - ensure: [ ChangeSet newChanges: baseChangeSet]. - mgr := ResourceManager new initializeFrom: ResourceCollector current. - mgr fixJISX0208Resource. - mgr registerUnloadedResources. - archive ifNotNil:[mgr preLoadFromArchive: archive cacheName: - aFileName]. - (preStream respondsTo: #close) ifTrue:[preStream close]. - ResourceCollector current: nil. - ProgressNotification signal: '4:filedIn'. - ProgressNotification signal: '9999 about to enter project'. - "the hard part is over" - (morphOrList isKindOf: ImageSegment) ifTrue: [ - proj := morphOrList arrayOfRoots - detect: [:mm | mm isKindOf: Project] - ifNone: [^self inform: 'No project found in - this file']. - proj projectParameters at: #substitutedFont put: ( - numberOfFontSubstitutes > 0 - ifTrue: [substituteFont] - ifFalse: [#none]). - proj projectParameters at: #MultiSymbolInWrongPlace put: false. - "Yoshiki did not put MultiSymbols into - outPointers in older images!!" - morphOrList arrayOfRoots do: [:obj | - obj fixUponLoad: proj seg: morphOrList "imageSegment"]. - (proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [ - morphOrList arrayOfRoots do: [:obj | (obj - isKindOf: HashedCollection) ifTrue: [obj rehash]]]. - - proj resourceManager: mgr. - "proj versionFrom: preStream." - proj lastDirectory: aDirectoryOrNil. - proj setParent: Project current. - projectsToBeDeleted := OrderedCollection new. - existingView ifNil: [ - ChangeSet allChangeSets add: proj changeSet. - Project current openProject: proj. - "Note: in MVC we get no further than the above" - ] ifNotNil: [ - (existingView project isKindOf: DiskProxy) ifFalse: [ - existingView project changeSet name: - ChangeSet defaultName. - projectsToBeDeleted add: existingView project. - ]. - (existingView owner isSystemWindow) ifTrue: [ - existingView owner model: proj - ]. - existingView project: proj. - ]. - ChangeSet allChangeSets add: proj changeSet. - Project current projectParameters - at: #deleteWhenEnteringNewProject - ifPresent: [ :ignored | - projectsToBeDeleted add: Project current. - Project current removeParameter: - #deleteWhenEnteringNewProject. - ]. - projectsToBeDeleted isEmpty ifFalse: [ - proj projectParameters - at: #projectsToBeDeleted - put: projectsToBeDeleted. - ]. - ^ ProjectEntryNotification signal: proj - ]. - Project current openViewAndEnter: morphOrList - ! Item was added: + ----- Method: ProjectLoading class>>openName:stream:fromDirectory:withProjectView:clearOriginFlag: (in category 'loading') ----- + openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil + withProjectView: existingView clearOriginFlag: clearOriginFlag + "Reconstitute a Morph from the selected file, presumed to + represent a Morph saved via the SmartRefStream mechanism, and open it + in an appropriate Morphic world." + + | morphOrList archive mgr substituteFont numberOfFontSubstitutes resultArray anObject project manifests dict | + (self checkStream: preStream) ifTrue: [^ self]. + ProgressNotification signal: '0.2'. + archive := preStream isZipArchive + ifTrue:[ZipArchive new readFrom: preStream] + ifFalse:[nil]. + archive ifNotNil:[ + manifests := (archive membersMatching: '*manifest'). + (manifests size = 1 and: [((dict := self parseManifest: manifests first contents) at: 'Project-Format' ifAbsent: []) = 'S-Expression']) + ifTrue: [ + ^ (self respondsTo: #openSexpProjectDict:stream:fromDirectory:withProjectView:) + ifTrue: [self openSexpProjectDict: dict stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView] + ifFalse: [self inform: 'Cannot load S-Expression format projects without Etoys' translated]]]. + + morphOrList := self morphOrList: aFileName stream: preStream fromDirectory: aDirectoryOrNil archive: archive. + morphOrList ifNil: [^ self]. + ProgressNotification signal: '0.4'. + resultArray := self fileInName: aFileName archive: archive morphOrList: morphOrList. + anObject := resultArray first. + numberOfFontSubstitutes := resultArray second. + substituteFont := resultArray third. + mgr := resultArray fourth. + preStream close. + ProgressNotification signal: '0.7'. + "the hard part is over" + (anObject isKindOf: ImageSegment) ifTrue: [ + project := self loadImageSegment: anObject + fromDirectory: aDirectoryOrNil + withProjectView: existingView + numberOfFontSubstitutes: numberOfFontSubstitutes + substituteFont: substituteFont + mgr: mgr. + project noteManifestDetailsIn: dict. + project removeParameter: #sugarProperties. + Smalltalk at: #SugarPropertiesNotification ifPresent: [:sp | + sp signal ifNotNilDo: [:props | + project keepSugarProperties: props monitor: true]]. + clearOriginFlag ifTrue: [project forgetExistingURL]. + ProgressNotification signal: '0.8'. + ^ project + ifNil: [self inform: 'No project found in this file' translated] + ifNotNil: [ProjectEntryNotification signal: project]]. + Project current openViewAndEnter: anObject! Item was added: + ----- Method: ProjectLoading class>>openOn: (in category 'loading') ----- + openOn: aStream + 'Loading a Project...' displaySequentialProgress: [self + openName: nil + stream: aStream + fromDirectory: nil + withProjectView: nil]! Item was changed: ----- Method: ProjectLoading class>>projectStreamFromArchive: (in category 'accessing') ----- projectStreamFromArchive: archive | ext prFiles entry unzipped | ext := FileDirectory dot, Project projectExtension. prFiles := archive members select:[:any| any fileName endsWith: ext]. + prFiles isEmpty ifTrue: + [ext := FileDirectory dot, 'sexp'. + prFiles := archive members select:[:any| any fileName endsWith: ext]]. + prFiles isEmpty ifTrue: ['']. - prFiles isEmpty ifTrue:[^'']. entry := prFiles first. + unzipped := MultiByteBinaryOrTextStream on: (ByteArray new: entry uncompressedSize). - unzipped := RWBinaryOrTextStream on: (ByteArray new: entry uncompressedSize). entry extractTo: unzipped. ^unzipped reset! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From hannes.hirzel at gmail.com Mon Aug 29 14:41:42 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Mon Aug 29 14:41:44 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> <20160826154023.46ca80bc@herpi5> Message-ID: On 8/27/16, Tim Felgentreff wrote: > Hi, > > in the process of updating Squeakland etoys to load in 5.1,we have also > made the sexp format project saving and loading work again. This might be a > VM independent way forward for storing projects. Yes, this storing a project as symbolic expressions is interesting. Could you please give more details. Are the fixes includes in 5.1 or in 6.0alpha-trunk? --Hannes > > Regarding loading old projects, Bert has an experimental OldSegmentLoader > that can load pre-Spur segments into 5.1 > > best, > Tim > > Herbert K?nig schrieb am Fr., 26. Aug. 2016, 15:40: > >> Thanks Hannes, >> >> I'll let you know. >> >> A typical image of mine contains lots of projects with documentation >> and ideas I need to be able to save. >> >> Cheers, >> >> Herbert >> >> Am Fri, 26 Aug 2016 13:43:06 +0100 >> schrieb "H. Hirzel" : >> >> > Hallo Herbert >> > >> > I am currently using the 5.1 release for development. >> > >> > I think it was >> > >> > 4 fixes in the Inbox and I just filed them in an Squeak 4.6 image >> > (updated from the Squeak 4.6 all-in-one-release) in December 2015 >> > >> > http://forum.world.st/The-Trunk-System-cwp-781-mcz-td4864083.html >> > http://forum.world.st/The-Trunk-System-cwp-782-mcz-td4864086.html >> > http://forum.world.st/The-Inbox-Morphic-cwp-1055-mcz-td4864087.html >> > http://forum.world.st/The-Inbox-Morphic-jmg-1055-mcz-td4864091.html >> > >> > It this is not sufficient give me some time to dig out that 4.6 image >> > from the archive and try to recover what I did. >> > >> > --Hannes >> > >> > >> > On 8/26/16, Herbert K?nig wrote: >> > > Hi Hannes, >> > > >> > > any tips how to get at that image and what VM to use? I still use >> > > 4.4 for development and later versions just for deployment. >> > > >> > > Thanks, >> > > >> > > Herbert >> > > >> > > Am Fri, 26 Aug 2016 13:16:03 +0100 >> > > schrieb "H. Hirzel" : >> > > >> > >> Hello Vaidotas >> > >> >> > >> It can confirm that Project saving worked again in Squeak 4.6 in >> > >> December 2015 with the fixes applied done by Colin Putney[1]. I did >> > >> some tests then. >> > >> >> > >> The 64bit image is experimental. >> > >> >> > >> I just tested Project saving in Squeak 5.1 (32bit image) in >> > >> MSWindows and on Linux. It does not work either. So we need to >> > >> wait for a VM update. >> > >> >> > >> Regards >> > >> Hannes >> > >> >> > >> [1] http://wiki.squeak.org/squeak/6218 >> > >> >> > >> With these four changes, it's possible to save and load projects >> > >> in a Squeak 4.6 image. It doesn't work in a trunk image, however. >> > >> The Spur VM crashes when saving a project. I've reported that on >> > >> the VM list. It also fails to load an image segment - looks like >> > >> the primitive for that isn't quite finished in Spur. >> > >> >> > >> >> > >> On 8/26/16, Herbert K?nig wrote: >> > >> > Hi Vaidotas, >> > >> > >> > >> > according to the end of >> > >> > http://wiki.squeak.org/squeak/6218 >> > >> > this is now a VM problem. The image side shold have been solved. >> > >> > >> > >> > From older discussions I remember that environments are too >> > >> > deeply entangled with the guts of Squeak that it's not feasible >> > >> > to remove them again. >> > >> > >> > >> > And then some people may use them. >> > >> > >> > >> > Cheers, >> > >> > >> > >> > Herbert >> > >> > >> > >> > Am Fri, 26 Aug 2016 13:46:40 +0300 >> > >> > schrieb Vaidotas Did?balis : >> > >> > >> > >> >> Hello, >> > >> >> Project saving is broken. When trying to save Morphic project to >> > >> >> disk on 64bit image on Windows user is locked in the loop of >> > >> >> popping up emergency evaluator, you have to kill Squeak as a OS >> > >> >> process. See the docking bar, the second menu item is the >> > >> >> Project menu. We need to add this to the known Issues session >> > >> >> of the 5.1 release notes at least. This bug was pushed with >> > >> >> Environments package since 4.5. Is anyone uses Environments? >> > >> >> Can they be removed? Why Environments is not loadable package? >> > >> >> regards, Vaidotas >> > >> > >> > >> > >> > >> > >> > >> >> > > >> > > >> > > >> > > >> > >> >> >> > From bert at freudenbergs.de Mon Aug 29 14:45:15 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Mon Aug 29 14:45:19 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> <20160826154023.46ca80bc@herpi5> Message-ID: IMHO we should reconsider how project saving works. ImageSegments were a good technology back when machines and the interpreter VM was slow. Now we have faster machines and VMs so this very VM-dependent mechanism is no needed anymore. Yoshiki's S-Expression format is one way to serialize, yes. We have used it for the QuickGuide projects in the Squeakland image. In the short term it's a good option. However, for more general project saving we may want to take a look at other serialization schemes. I think we should deprecate ImageSegment. Is there any active use of them? I seem to remember SqueakMap used them but I'm not sure. - Bert - On Sat, Aug 27, 2016 at 3:07 PM, Tim Felgentreff wrote: > Hi, > > in the process of updating Squeakland etoys to load in 5.1,we have also > made the sexp format project saving and loading work again. This might be a > VM independent way forward for storing projects. > > Regarding loading old projects, Bert has an experimental OldSegmentLoader > that can load pre-Spur segments into 5.1 > > best, > Tim > > Herbert K?nig schrieb am Fr., 26. Aug. 2016, > 15:40: > >> Thanks Hannes, >> >> I'll let you know. >> >> A typical image of mine contains lots of projects with documentation >> and ideas I need to be able to save. >> >> Cheers, >> >> Herbert >> >> Am Fri, 26 Aug 2016 13:43:06 +0100 >> schrieb "H. Hirzel" : >> >> > Hallo Herbert >> > >> > I am currently using the 5.1 release for development. >> > >> > I think it was >> > >> > 4 fixes in the Inbox and I just filed them in an Squeak 4.6 image >> > (updated from the Squeak 4.6 all-in-one-release) in December 2015 >> > >> > http://forum.world.st/The-Trunk-System-cwp-781-mcz-td4864083.html >> > http://forum.world.st/The-Trunk-System-cwp-782-mcz-td4864086.html >> > http://forum.world.st/The-Inbox-Morphic-cwp-1055-mcz-td4864087.html >> > http://forum.world.st/The-Inbox-Morphic-jmg-1055-mcz-td4864091.html >> > >> > It this is not sufficient give me some time to dig out that 4.6 image >> > from the archive and try to recover what I did. >> > >> > --Hannes >> > >> > >> > On 8/26/16, Herbert K?nig wrote: >> > > Hi Hannes, >> > > >> > > any tips how to get at that image and what VM to use? I still use >> > > 4.4 for development and later versions just for deployment. >> > > >> > > Thanks, >> > > >> > > Herbert >> > > >> > > Am Fri, 26 Aug 2016 13:16:03 +0100 >> > > schrieb "H. Hirzel" : >> > > >> > >> Hello Vaidotas >> > >> >> > >> It can confirm that Project saving worked again in Squeak 4.6 in >> > >> December 2015 with the fixes applied done by Colin Putney[1]. I did >> > >> some tests then. >> > >> >> > >> The 64bit image is experimental. >> > >> >> > >> I just tested Project saving in Squeak 5.1 (32bit image) in >> > >> MSWindows and on Linux. It does not work either. So we need to >> > >> wait for a VM update. >> > >> >> > >> Regards >> > >> Hannes >> > >> >> > >> [1] http://wiki.squeak.org/squeak/6218 >> > >> >> > >> With these four changes, it's possible to save and load projects >> > >> in a Squeak 4.6 image. It doesn't work in a trunk image, however. >> > >> The Spur VM crashes when saving a project. I've reported that on >> > >> the VM list. It also fails to load an image segment - looks like >> > >> the primitive for that isn't quite finished in Spur. >> > >> >> > >> >> > >> On 8/26/16, Herbert K?nig wrote: >> > >> > Hi Vaidotas, >> > >> > >> > >> > according to the end of >> > >> > http://wiki.squeak.org/squeak/6218 >> > >> > this is now a VM problem. The image side shold have been solved. >> > >> > >> > >> > From older discussions I remember that environments are too >> > >> > deeply entangled with the guts of Squeak that it's not feasible >> > >> > to remove them again. >> > >> > >> > >> > And then some people may use them. >> > >> > >> > >> > Cheers, >> > >> > >> > >> > Herbert >> > >> > >> > >> > Am Fri, 26 Aug 2016 13:46:40 +0300 >> > >> > schrieb Vaidotas Did?balis : >> > >> > >> > >> >> Hello, >> > >> >> Project saving is broken. When trying to save Morphic project to >> > >> >> disk on 64bit image on Windows user is locked in the loop of >> > >> >> popping up emergency evaluator, you have to kill Squeak as a OS >> > >> >> process. See the docking bar, the second menu item is the >> > >> >> Project menu. We need to add this to the known Issues session >> > >> >> of the 5.1 release notes at least. This bug was pushed with >> > >> >> Environments package since 4.5. Is anyone uses Environments? >> > >> >> Can they be removed? Why Environments is not loadable package? >> > >> >> regards, Vaidotas >> > >> > >> > >> > >> > >> > >> > >> >> > > >> > > >> > > >> > > >> > >> >> >> > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160829/60a00dd8/attachment.htm From bert at freudenbergs.de Mon Aug 29 16:11:17 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Mon Aug 29 16:11:19 2016 Subject: [squeak-dev] Raw sockets (was: New Introductory Tutorial) Message-ID: To look at all traffic you need a "raw socket". Our SocketAddressInformation class only specifies socketTypeDGram and socketTypeStream, but not socketTypeRaw. However, there is a "primitiveSocketCreateRAW" in the VM's SocketPlugin. In the image, I only see references to "primitiveSocketCreate". So there might be a way to do it, but the code appears to not be in the image. - Bert - On Fri, Aug 26, 2016 at 7:33 AM, Dennis Groves wrote: > I would like to do network traffic analysis with Squeak, however All I can > find are socket and http objects is there an object for looking at all the > traffic on a given interface? > > Cheers, > > Dennis > > -- > Dennis Groves , MSc > dennis.groves@gmail.com > >> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160829/e16c92c7/attachment.htm From bert at freudenbergs.de Mon Aug 29 16:20:47 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Mon Aug 29 16:20:50 2016 Subject: [squeak-dev] Default file encoding in File List when reading and editing files In-Reply-To: References: Message-ID: On Thu, Aug 25, 2016 at 4:05 PM, Xin Wang wrote: > Hi all, > > > I found that `FileList >>defaultEncoderFor:` is `Latin1TextConverter`, > which is inconsistent with the encoding used when save contents into file > in `Workspace`, which I think is `UTF8TextConverter`. > > Can we make them consistent? > +1 Any taker? - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160829/3050f328/attachment.htm From tim at rowledge.org Mon Aug 29 17:48:11 2016 From: tim at rowledge.org (tim Rowledge) Date: Mon Aug 29 17:48:17 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> <20160826154023.46ca80bc@herpi5> Message-ID: > On 29-08-2016, at 7:45 AM, Bert Freudenberg wrote: > > IMHO we should reconsider how project saving works. ImageSegments were a good technology back when machines and the interpreter VM was slow. Now we have faster machines and VMs so this very VM-dependent mechanism is no needed anymore. Although I would have to comment that there are still (relatively) slow machines still in major use, in general I agree that we could almost certainly do without ImageSegments. > > Yoshiki's S-Expression format is one way to serialize, yes. We have used it for the QuickGuide projects in the Squeakland image. In the short term it's a good option. However, for more general project saving we may want to take a look at other serialization schemes. > > I think we should deprecate ImageSegment. Is there any active use of them? I seem to remember SqueakMap used them but I'm not sure. The last use *I* had for them was for exobox (so?. 1999? Were we partying? Ah, no, my archives say 2000 so we had given up on raspberry berets and indeed were shortly to give up on exobox) to load fonts very fast. It was indeed *very* fast compared to reading them any other way. However, I also have an email from Andreas of 5sep02 where we were discussing ?script squeak? and he asserts that some measurements convinced him that what he described as a ?bytecode loader? was faster, in part because of no pre & post ImSeg messing around. I have no idea if this is a profound thought or a trivia that everybody knows, but the deep-copy code seems awfully like (much of) a serialiser tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Noli me vocare, ego te vocabo = Don't call me, I'll call you. From brasspen at gmail.com Mon Aug 29 18:22:42 2016 From: brasspen at gmail.com (Chris Cunnington) Date: Mon Aug 29 18:22:46 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken Message-ID: <87d0ea9a-ab98-b02e-0f1d-d5c2242e076a@gmail.com> >> I seem to remember SqueakMap used them but I'm not sure. Nope. SMSqueakMap>>#createCheckpointNumber: Chris From commits at source.squeak.org Mon Aug 29 21:55:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Mon Aug 29 21:55:09 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160829215507.2276.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068737.html Name: Squeak-Version-tfel.4726 Ancestors: Squeak-Version-mt.4725 fix SmallLand unload ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068738.html Name: Collections-tfel.715 Ancestors: Collections-tfel.712, Collections-ul.714 merge fixes from Squeakland Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068739.html Name: Collections-tfel.712 Ancestors: Collections-mt.711, Collections-tfel.704 merge master ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068740.html Name: Collections-tfel.704 Ancestors: Collections-mt.703, Collections-tfel.703 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068741.html Name: Collections-tfel.703 Ancestors: Collections-mt.702, Collections-kfr.9 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068742.html Name: Graphics-tfel.364 Ancestors: Graphics-tfel.361, Graphics-mt.363 merge translations from Squeakland Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068743.html Name: ToolBuilder-Kernel-tfel.108 Ancestors: ToolBuilder-Kernel-mt.107 adapt code from Etoys to indicate sequential progress ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068744.html Name: System-tfel.911 Ancestors: System-tfel.902, System-ul.910 merge fixes from Etoys Squeakland - Project loading was refactored, and hooks added to support Sexp projects - translations added - use new sequential progress mechanism when loading projects - translatedNoop added to Object, helps GetTextExporter find terms ============================================= From commits at source.squeak.org Tue Aug 30 00:13:36 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 00:13:39 2016 Subject: [squeak-dev] The Trunk: Files-dtl.163.mcz Message-ID: David T. Lewis uploaded a new version of Files to project The Trunk: http://source.squeak.org/trunk/Files-dtl.163.mcz ==================== Summary ==================== Name: Files-dtl.163 Author: dtl Time: 27 August 2016, 11:16:05.899859 pm UUID: b4b2f4c1-4c24-44b4-8fc7-90a63a0f5940 Ancestors: Files-ul.162 Add StandardFileStream>>update: to handle #appendEntry by flushing the stream. This allows the standard output stream to be a dependent of the Transcript, flushing output as expected for a transcript view. =============== Diff against Files-ul.162 =============== Item was changed: ----- Method: FileStream class>>startUp: (in category 'system startup') ----- startUp: resuming resuming ifTrue: [ self voidStdioFiles. [ TheStdioHandles := self stdioHandles ] on: Error do: [:ex| TheStdioHandles isArray ifFalse: [ + TheStdioHandles := Array new: 3 ] ]. + (Smalltalk at: #TranscriptStream) + ifNotNilDo: [ :t | "Reestablish dependency for stdout Transcript view" + t redirectToStdOut: t redirectToStdOut ] ]! - TheStdioHandles := Array new: 3 ] ] ]! Item was added: + ----- Method: StandardFileStream>>update: (in category 'updating') ----- + update: aParameter + super update: aParameter. + aParameter == #appendEntry + ifTrue: [self flush]. "Transcript is being redirected to this steam, stdout" + ! From commits at source.squeak.org Tue Aug 30 00:13:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 00:14:04 2016 Subject: [squeak-dev] The Trunk: Files-dtl.164.mcz Message-ID: David T. Lewis uploaded a new version of Files to project The Trunk: http://source.squeak.org/trunk/Files-dtl.164.mcz ==================== Summary ==================== Name: Files-dtl.164 Author: dtl Time: 28 August 2016, 10:55:13.088975 am UUID: 4d4aaa9c-efd6-4ea2-8f37-d405243840da Ancestors: Files-dtl.163 Avoid exception if TranscriptSteam is not present, and use #ifNotNil: instead of #ifNotNilDo: =============== Diff against Files-dtl.163 =============== Item was changed: ----- Method: FileStream class>>startUp: (in category 'system startup') ----- startUp: resuming resuming ifTrue: [ self voidStdioFiles. [ TheStdioHandles := self stdioHandles ] on: Error do: [:ex| TheStdioHandles isArray ifFalse: [ TheStdioHandles := Array new: 3 ] ]. + (Smalltalk classNamed: 'TranscriptStream') + ifNotNil: [ :t | "Reestablish dependency for stdout Transcript view" + t redirectToStdOut: t redirectToStdOut ] ] + ! - (Smalltalk at: #TranscriptStream) - ifNotNilDo: [ :t | "Reestablish dependency for stdout Transcript view" - t redirectToStdOut: t redirectToStdOut ] ]! From commits at source.squeak.org Tue Aug 30 00:15:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 00:15:32 2016 Subject: [squeak-dev] The Trunk: Collections-dtl.715.mcz Message-ID: David T. Lewis uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-dtl.715.mcz ==================== Summary ==================== Name: Collections-dtl.715 Author: dtl Time: 27 August 2016, 11:16:53.919203 pm UUID: 7d00851c-8dae-4128-9550-138e30c644f5 Ancestors: Collections-ul.714 When the redirectToStdOut preference is enabled, let the standard output stream be a view on the Transcript. Flush output to stdout on endEntry. Make cr and lf work for the stdout view. Permit other views to continue functioning normally in the image, with the standard output as an additional view. =============== Diff against Collections-ul.714 =============== Item was changed: ----- Method: TranscriptStream class>>redirectToStdOut: (in category 'preferences') ----- redirectToStdOut: aBoolean + (RedirectToStdOut := aBoolean) + ifTrue: [Transcript addDependent: FileStream stdout] + ifFalse: [Transcript removeDependent: FileStream stdout].! - RedirectToStdOut := aBoolean.! Item was added: + ----- Method: TranscriptStream>>nextPut: (in category 'stream extensions') ----- + nextPut: anObject + self target == self ifFalse: [self target nextPut: anObject]. "delegated to stdout" + ^ super nextPut: anObject.! Item was added: + ----- Method: TranscriptStream>>nextPutAll: (in category 'stream extensions') ----- + nextPutAll: aCollection + self target == self ifFalse: [self target nextPutAll: aCollection]. "delegated to stdout" + ^ super nextPutAll: aCollection.! Item was changed: ----- Method: TranscriptStream>>show: (in category 'stream extensions') ----- show: anObject "TextCollector compatibility" [ + self nextPutAll: anObject asString. - self target nextPutAll: anObject asString. self endEntry ] on: FileWriteError do: [self class redirectToStdOut: false].! Item was changed: ----- Method: TranscriptStream>>showln: (in category 'stream extensions') ----- showln: anObject "TextCollector compatibility. Ensure a new line before inserting a message." [ + self - self target cr; nextPutAll: anObject asString. self endEntry. ] on: FileWriteError do: [self class redirectToStdOut: false].! Item was removed: - ----- Method: WriteStream>>flush (in category 'accessing') ----- - flush! From commits at source.squeak.org Tue Aug 30 00:17:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 00:17:07 2016 Subject: [squeak-dev] The Trunk: Collections-dtl.716.mcz Message-ID: David T. Lewis uploaded a new version of Collections to project The Trunk: http://source.squeak.org/trunk/Collections-dtl.716.mcz ==================== Summary ==================== Name: Collections-dtl.716 Author: dtl Time: 29 August 2016, 8:02:18.941698 pm UUID: 33e9eb9e-1da0-49a7-9840-9770305ec0d4 Ancestors: Collections-dtl.715, Collections-tfel.715 Merge Collections-dtl.715, Collections-tfel.715 =============== Diff against Collections-dtl.715 =============== Item was changed: ----- Method: TranscriptStream class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#TranscriptStream. #openMorphicTranscript. 'Transcript' translatedNoop. 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(TranscriptStream openMorphicTranscript 'Transcript' 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.') forFlapNamed: 'Tools'] ! Item was changed: ----- Method: WriteStream>>nextPut: (in category 'accessing') ----- nextPut: anObject "Primitive. Insert the argument at the next position in the Stream represented by the receiver. Fail if the collection of this stream is not an Array or a String. Fail if the stream is positioned at its end, or if the position is out of bounds in the collection. Fail if the argument is not of the right type for the collection. Optional. See Object documentation whatIsAPrimitive." + ((collection class == ByteString) and: [ + anObject isCharacter and:[anObject isOctetCharacter not]]) ifTrue: [ + collection := (WideString from: collection). + ^self nextPut: anObject. + ]. position >= writeLimit ifTrue: [^ self pastEndPut: anObject] ifFalse: [position := position + 1. ^collection at: position put: anObject]! From commits at source.squeak.org Tue Aug 30 08:38:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 08:38:39 2016 Subject: [squeak-dev] The Trunk: Compression-tfel.50.mcz Message-ID: Tim Felgentreff uploaded a new version of Compression to project The Trunk: http://source.squeak.org/trunk/Compression-tfel.50.mcz ==================== Summary ==================== Name: Compression-tfel.50 Author: tfel Time: 30 August 2016, 10:38:23.843946 am UUID: 1b713e03-5ddd-8544-ac4b-52875fe03a27 Ancestors: Compression-tfel.49, Compression-ul.49 Merge translations from Squeakland Etoys =============== Diff against Compression-ul.49 =============== Item was changed: ----- Method: GZipReadStream class>>serviceDecompressToFile (in category 'fileIn/Out') ----- serviceDecompressToFile ^ FileModifyingSimpleServiceEntry provider: self + label: 'decompress to file' translatedNoop - label: 'decompress to file' selector: #saveContents: + description: 'decompress to file' translatedNoop! - description: 'decompress to file'! Item was changed: ----- Method: GZipReadStream class>>serviceFileIn (in category 'fileIn/Out') ----- serviceFileIn "Answer a service for filing in an entire file" ^ SimpleServiceEntry provider: self + label: 'fileIn entire file' translatedNoop - label: 'fileIn entire file' selector: #fileIn: + description: 'file in the entire decompressed contents of the file, which is expected to contain Smalltalk code in fileout ("chunk") format' translatedNoop + buttonLabel: 'filein' translatedNoop - description: 'file in the entire decompressed contents of the file, which is expected to contain Smalltalk code in fileout ("chunk") format' - buttonLabel: 'filein' ! Item was changed: ----- Method: GZipReadStream class>>serviceFileIntoNewChangeSet (in category 'fileIn/Out') ----- serviceFileIntoNewChangeSet "Answer a service for filing in an entire file" ^ SimpleServiceEntry provider: self + label: 'install into new change set' translatedNoop - label: 'install into new change set' selector: #fileIntoNewChangeSet: + description: 'install the decompressed contents of the file as a body of code in the image: create a new change set and file-in the selected file into it' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install the decompressed contents of the file as a body of code in the image: create a new change set and file-in the selected file into it' - buttonLabel: 'install'! Item was changed: ----- Method: GZipWriteStream class>>serviceCompressFile (in category 'file list services') ----- serviceCompressFile ^ FileModifyingSimpleServiceEntry provider: self + label: 'compress file' translatedNoop - label: 'compress file' selector: #compressFile: + description: 'compress file using gzip compression, making a new file' translatedNoop! - description: 'compress file using gzip compression, making a new file'! From commits at source.squeak.org Tue Aug 30 08:42:39 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 08:42:42 2016 Subject: [squeak-dev] The Trunk: Files-tfel.165.mcz Message-ID: Tim Felgentreff uploaded a new version of Files to project The Trunk: http://source.squeak.org/trunk/Files-tfel.165.mcz ==================== Summary ==================== Name: Files-tfel.165 Author: tfel Time: 30 August 2016, 10:42:22.521946 am UUID: 45b18cd1-022d-824f-8b83-077e3908cb22 Ancestors: Files-tfel.162, Files-dtl.164 merge translation and read-only check from Squeakland Etoys =============== Diff against Files-dtl.164 =============== Item was changed: ----- Method: FileStream class>>serviceFileIn (in category 'file reader services') ----- serviceFileIn "Answer a service for filing in an entire file" ^ SimpleServiceEntry provider: self + label: 'fileIn entire file' translatedNoop - label: 'fileIn entire file' selector: #fileIn: + description: 'file in the entire contents of the file, which is expected to contain Smalltalk code in fileout ("chunk") format' translatedNoop + buttonLabel: 'filein' translatedNoop! - description: 'file in the entire contents of the file, which is expected to contain Smalltalk code in fileout ("chunk") format' - buttonLabel: 'filein'! Item was changed: ----- Method: FileStream class>>serviceRemoveLineFeeds (in category 'file reader services') ----- serviceRemoveLineFeeds "Answer a service for removing linefeeds from a file" ^ FileModifyingSimpleServiceEntry provider: self + label: 'remove line feeds' translatedNoop - label: 'remove line feeds' selector: #removeLineFeeds: + description: 'remove line feeds in file' translatedNoop + buttonLabel: 'remove lfs' translatedNoop! - description: 'remove line feeds in file' - buttonLabel: 'remove lfs'! Item was changed: ----- Method: RemoteString>>string:onFileNumber: (in category 'private') ----- string: aString onFileNumber: fileNumber "Store this as my string if source files exist." + (SourceFiles at: fileNumber) ifNotNil: [:theFile | + theFile isReadOnly ifTrue: [^ nil]. - | theFile | - (SourceFiles at: fileNumber) == nil ifFalse: - [theFile := SourceFiles at: fileNumber. theFile setToEnd; cr. + self string: aString onFileNumber: fileNumber toFile: theFile].! - self string: aString onFileNumber: fileNumber toFile: theFile]! From commits at source.squeak.org Tue Aug 30 08:46:11 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 08:46:14 2016 Subject: [squeak-dev] The Trunk: Multilingual-tfel.217.mcz Message-ID: Tim Felgentreff uploaded a new version of Multilingual to project The Trunk: http://source.squeak.org/trunk/Multilingual-tfel.217.mcz ==================== Summary ==================== Name: Multilingual-tfel.217 Author: tfel Time: 30 August 2016, 10:45:47.544946 am UUID: 27bb7f3b-ba8e-6241-955f-fb13701e5d19 Ancestors: Multilingual-tfel.216, Multilingual-ul.216 merge Squeakland Etoys variant of getting a localeID. makes it more robust by allowing e.g. 'de-AU' to fallback to 'de' rather than letting everything fall back to 'en' immediately =============== Diff against Multilingual-ul.216 =============== Item was changed: ----- Method: LanguageEnvironment class>>localeID: (in category 'accessing') ----- + localeID: localeID + "LanguageEnvironment localeID: (LocaleID isoString: 'ja-kid')" + "LanguageEnvironment localeID: (LocaleID isoString: 'xx')" + ^ self knownEnvironments + at: localeID + ifAbsent: [localeID hasParent + ifTrue: [self knownEnvironments + at: localeID parent + ifAbsent: [self + localeID: (LocaleID isoLanguage: 'en')]] + ifFalse: [self + localeID: (LocaleID isoLanguage: 'en')]]! - localeID: localeID - ^self knownEnvironments at: localeID ifAbsent: [self localeID: (LocaleID isoLanguage: 'en')]! From commits at source.squeak.org Tue Aug 30 08:58:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 08:58:12 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1300.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1300.mcz ==================== Summary ==================== Name: Morphic-mt.1300 Author: mt Time: 30 August 2016, 10:56:36.489299 am UUID: 681c214e-6f43-4042-b272-8e7bad3594da Ancestors: Morphic-tfel.1299 Fix small regression when setting the font in StringMorph. =============== Diff against Morphic-tfel.1299 =============== Item was changed: ----- Method: StringMorph>>font: (in category 'printing') ----- font: aFont "Set the font my text will use. The emphasis remains unchanged." aFont = font ifTrue: [^ self]. + ^ self font: aFont emphasis: emphasis! - ^ self font: font emphasis: emphasis! From commits at source.squeak.org Tue Aug 30 09:06:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 09:06:49 2016 Subject: [squeak-dev] The Trunk: Morphic-mt.1301.mcz Message-ID: Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1301.mcz ==================== Summary ==================== Name: Morphic-mt.1301 Author: mt Time: 30 August 2016, 11:04:49.029299 am UUID: 06fcd2a9-ba69-b843-9cab-da6d5890cb3a Ancestors: Morphic-mt.1300 Fixes regression in new-style balloon morphs and gradient fills. =============== Diff against Morphic-mt.1300 =============== Item was added: + ----- Method: NewBalloonMorph>>color: (in category 'accessing') ----- + color: aColor + + super color: aColor. + self updateGradient.! Item was changed: ----- Method: NewBalloonMorph>>setDefaultParameters (in category 'initialization') ----- setDefaultParameters self borderWidth: (self userInterfaceTheme borderWidth ifNil: [1]); borderColor: (self userInterfaceTheme borderColor ifNil: [Color r: 0.46 g: 0.46 b: 0.353]); color: (self userInterfaceTheme color ifNil: [Color r: 0.92 g: 0.92 b: 0.706]); hasDropShadow: (Preferences menuAppearance3d and: [self color isTranslucent not]); shadowOffset: 1@1; shadowColor: (self color muchDarker muchDarker alpha: 0.333); + orientation: #bottomLeft; + cornerStyle: (MenuMorph roundedMenuCorners ifTrue: [#rounded] ifFalse: [#square]).! - orientation: #bottomLeft. - - MenuMorph roundedMenuCorners - ifTrue: [self cornerStyle: #rounded]. - - "Gradients?" - MenuMorph gradientMenu ifTrue: [ - | cc fill | - cc := self color. - fill := GradientFillStyle ramp: { - 0.0 -> Color white. - 0.15 -> (cc mixed: 0.5 with: Color white). - 0.5 -> cc. - 0.8 -> cc twiceDarker}. - fill - origin: self topLeft; - direction: 0@self height. - self fillStyle: fill].! Item was added: + ----- Method: NewBalloonMorph>>updateGradient (in category 'updating') ----- + updateGradient + + | cc fill | + + MenuMorph gradientMenu ifFalse: [^ self]. + + cc := self color. + fill := GradientFillStyle ramp: { + 0.0 -> Color white. + 0.15 -> (cc mixed: 0.5 with: Color white). + 0.5 -> cc. + 0.8 -> cc twiceDarker}. + fill + origin: self topLeft; + direction: 0@self height. + self fillStyle: fill.! From hannes.hirzel at gmail.com Tue Aug 30 09:22:57 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Aug 30 09:23:01 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> <20160826154023.46ca80bc@herpi5> Message-ID: On 8/29/16, H. Hirzel wrote: > On 8/27/16, Tim Felgentreff wrote: >> in the process of updating Squeakland etoys to load in 5.1,we have also >> made the sexp format project saving and loading work again. This might be >> a >> VM independent way forward for storing projects. > > Yes, this storing a project as symbolic expressions is interesting. > > Could you please give more details. Are the fixes includes in 5.1 or > in 6.0alpha-trunk? Tim, I have seen that you are working on this System-tfel.911.mcz, from yesterday, Aug 29, 2016 It implements a hook for publishInSexp > > --Hannes > >> >> Regarding loading old projects, Bert has an experimental OldSegmentLoader >> that can load pre-Spur segments into 5.1 I think this is important as well. Is it possible to have access at this code. Experimental version is fine. I would to use it to import objects from earlier versions into 5.1. BTW how do I get access to the Smalltalk tools in the Squeakland image? http://www.squeakland.org/content/installers/Etoys-To-Go-5.0.zip --Hannes From hannes.hirzel at gmail.com Tue Aug 30 09:26:36 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Aug 30 09:26:40 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: Message-ID: On 8/26/16, Vaidotas Did?balis wrote: > Hello, > Project saving is broken. When trying to save Morphic project to disk on > 64bit image on Windows user is locked in the loop of popping up emergency > evaluator, you have to kill Squeak as a OS process. See the docking bar, > the second menu item is the Project menu. We need to add this to the known > Issues session of the 5.1 release notes at least. +1 >This bug was pushed with > Environments package since 4.5. Is anyone uses Environments? Can they be > removed? Why Environments is not loadable package? > regards, > Vaidotas > From commits at source.squeak.org Tue Aug 30 09:54:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 09:54:22 2016 Subject: [squeak-dev] The Trunk: Network-tfel.184.mcz Message-ID: Tim Felgentreff uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-tfel.184.mcz ==================== Summary ==================== Name: Network-tfel.184 Author: tfel Time: 30 August 2016, 11:53:57.083946 am UUID: b90acf7c-5796-a347-8939-59955c0588dd Ancestors: Network-tfel.183, Network-ul.183 merge a few fixes from Squeakland Etoys. - ServerDirectories always use forward slashes, even on windows - FTPClient connections should go through the NetNameResolver - sockets can only accept if they are connected. =============== Diff against Network-ul.183 =============== Item was changed: ----- Method: FTPClient>>openPassiveDataConnection (in category 'private protocol') ----- openPassiveDataConnection | portInfo list dataPort remoteHostAddress | self sendCommand: 'PASV'. self lookForCode: 227 ifDifferent: [:response | (TelnetProtocolError protocolInstance: self) signal: 'Could not enter passive mode: ' , response]. - portInfo := (self lastResponse findTokens: '()') at: 2. list := portInfo findTokens: ','. + remoteHostAddress := NetNameResolver addressForName: (list at: 1) + , '.' + , (list at: 2) , '.' + , (list at: 3) , '.' + , (list at: 4) timeout: 30. - remoteHostAddress := ByteArray - with: (list at: 1) asNumber - with: (list at: 2) asNumber - with: (list at: 3) asNumber - with: (list at: 4) asNumber. dataPort := (list at: 5) asNumber * 256 + (list at: 6) asNumber. + self openDataSocket: remoteHostAddress port: dataPort! - self openDataSocket: remoteHostAddress port: dataPort - ! Item was changed: ----- Method: ServerDirectory>>isRoot (in category 'testing') ----- isRoot + ^ directory = '/'! - ^directory = (String with: self pathNameDelimiter)! Item was changed: ----- Method: Socket>>waitForAcceptFor:ifTimedOut: (in category 'waiting') ----- waitForAcceptFor: timeout ifTimedOut: timeoutBlock "Wait and accept an incoming connection" self waitForConnectionFor: timeout ifTimedOut: [^timeoutBlock value]. + ^self isConnected + ifTrue:[self accept] + ! - ^self accept! From commits at source.squeak.org Tue Aug 30 09:56:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 09:56:16 2016 Subject: [squeak-dev] The Trunk: ST80-tfel.219.mcz Message-ID: Tim Felgentreff uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-tfel.219.mcz ==================== Summary ==================== Name: ST80-tfel.219 Author: tfel Time: 30 August 2016, 11:55:47.850946 am UUID: bc2fd586-51cf-3a41-b869-ef0d6f776969 Ancestors: ST80-tfel.217, ST80-mt.218 merge translations from Squeakland Etoys =============== Diff against ST80-mt.218 =============== Item was changed: ----- Method: ParagraphEditor>>sendContentsToPrinter (in category 'menu messages') ----- sendContentsToPrinter | textToPrint printer parentWindow | textToPrint := paragraph text. + textToPrint size == 0 ifTrue: [^self inform: 'nothing to print.' translated]. - textToPrint size = 0 ifTrue: [^self inform: 'nothing to print.']. printer := TextPrinter defaultTextPrinter. parentWindow := self model dependents detect: [:dep | dep isSystemWindow] ifNone: [nil]. parentWindow isNil ifTrue: [printer documentTitle: 'Untitled'] ifFalse: [printer documentTitle: parentWindow label]. printer printText: textToPrint! Item was changed: ----- Method: ScreenController>>setDisplayDepth (in category 'menu messages') ----- setDisplayDepth "Let the user choose a new depth for the display. " | result | + (result := (SelectionMenu selections: Display supportedDisplayDepths) startUpWithCaption: ('Choose a display depth + (it is currently {1})' translated format: {Display depth printString})) == nil ifFalse: - (result := (SelectionMenu selections: Display supportedDisplayDepths) startUpWithCaption: 'Choose a display depth - (it is currently ' , Display depth printString , ')') == nil ifFalse: [Display newDepth: result]! From commits at source.squeak.org Tue Aug 30 10:02:16 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 10:02:19 2016 Subject: [squeak-dev] The Trunk: Tools-tfel.724.mcz Message-ID: Tim Felgentreff uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-tfel.724.mcz ==================== Summary ==================== Name: Tools-tfel.724 Author: tfel Time: 30 August 2016, 12:01:11.197946 pm UUID: ace60665-7bbd-ff43-a580-f39c976252ef Ancestors: Tools-tfel.720, Tools-mt.723 merge translations from Squeakland Etoys =============== Diff against Tools-mt.723 =============== Item was changed: ----- Method: ArchiveViewer class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Zip Tool' translatedNoop + categories: {'Tools' translated} + documentation: 'A viewer and editor for Zip archive files' translatedNoop - ^ self partName: 'Zip Tool' - categories: #(Tools) - documentation: 'A viewer and editor for Zip archive files' ! Item was changed: ----- Method: ArchiveViewer class>>serviceAddToNewZip (in category 'file list services') ----- serviceAddToNewZip "Answer a service for adding the file to a new zip" ^ FileModifyingSimpleServiceEntry provider: self + label: 'add file to new zip' translatedNoop - label: 'add file to new zip' selector: #addFileToNewZip: + description: 'add file to new zip' translatedNoop + buttonLabel: 'to new zip' translatedNoop! - description: 'add file to new zip' - buttonLabel: 'to new zip'! Item was changed: ----- Method: ArchiveViewer class>>serviceExtractAll (in category 'file list services') ----- serviceExtractAll "Answer a service for opening in a zip viewer" ^ FileModifyingSimpleServiceEntry provider: self + label: 'extract all to...' translatedNoop - label: 'extract all to...' selector: #extractAllFrom: + description: 'extract all files to a user-specified directory' translatedNoop + buttonLabel: 'extract all' translatedNoop! - description: 'extract all files to a user-specified directory' - buttonLabel: 'extract all'! Item was changed: ----- Method: ArchiveViewer class>>serviceOpenInZipViewer (in category 'class initialization') ----- serviceOpenInZipViewer "Answer a service for opening in a zip viewer" ^ SimpleServiceEntry provider: self + label: 'open in zip viewer' translatedNoop - label: 'open in zip viewer' selector: #openOn: + description: 'open in zip viewer' translatedNoop + buttonLabel: 'open zip' translatedNoop! - description: 'open in zip viewer' - buttonLabel: 'open zip'! Item was changed: ----- Method: ArchiveViewer>>writePrependingFile (in category 'archive operations') ----- writePrependingFile | result name prependedName | self canSaveArchive ifFalse: [ ^self ]. result := (StandardFileMenu newFileMenu: FileDirectory default) + startUpWithCaption: 'Destination Zip File Name:' translated. - startUpWithCaption: 'Destination Zip File Name:'. result ifNil: [ ^self ]. name := result directory fullNameFor: result name. (archive canWriteToFileNamed: name) ifFalse: [ self inform: name, ' is used by one or more members in your archive, and cannot be overwritten. + Try writing to another file name' translated. - Try writing to another file name'. ^self ]. result := (StandardFileMenu oldFileMenu: FileDirectory default) + startUpWithCaption: 'Prepended File:' translated. - startUpWithCaption: 'Prepended File:'. result ifNil: [ ^self ]. prependedName := result directory fullNameFor: result name. [ archive writeToFileNamed: name prependingFileNamed: prependedName ] on: Error do: [ :ex | self inform: ex description. ]. self changed: #memberList "in case CRC's and compressed sizes got set"! Item was changed: ----- Method: Browser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Browser. #prototypicalToolWindow. 'Browser' translatedNoop. 'A Browser is a tool that allows you to view all the code of all the classes in the system' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(#Browser #prototypicalToolWindow 'Browser' 'A Browser is a tool that allows you to view all the code of all the classes in the system' ) forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeList class>>serviceBrowseChangeFile (in category 'fileIn/Out') ----- serviceBrowseChangeFile "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseStream: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop) - description: 'open a changelist tool on this file' - buttonLabel: 'changes') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: ChangeList class>>serviceBrowseCompressedChangeFile (in category 'fileIn/Out') ----- serviceBrowseCompressedChangeFile "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseCompressedChangesFile: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop! - description: 'open a changelist tool on this file' - buttonLabel: 'changes'! Item was changed: ----- Method: ChangeList class>>serviceBrowseDotChangesFile (in category 'fileIn/Out') ----- serviceBrowseDotChangesFile "Answer a service for opening a changelist browser on the tail end of a .changes file" ^ SimpleServiceEntry provider: self + label: 'recent changes in file' translatedNoop - label: 'recent changes in file' selector: #browseRecentLogOnPath: + description: 'open a changelist tool on recent changes in file' translatedNoop + buttonLabel: 'recent changes' translatedNoop! - description: 'open a changelist tool on recent changes in file' - buttonLabel: 'recent changes'! Item was changed: ----- Method: ChangeSorter class>>registerInFlapsRegistry (in category 'deprecated') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ChangeSorter. #prototypicalToolWindow. 'Change Set' translatedNoop. 'A tool that allows you to view and manipulate all the code changes in a single change set' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ChangeSorter prototypicalToolWindow 'Change Set' 'A tool that allows you to view and manipulate all the code changes in a single change set') forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeSorter>>checkThatSidesDiffer: (in category 'changeSet menu') ----- checkThatSidesDiffer: escapeBlock "If the change sets on both sides of the dual sorter are the same, put up an error message and escape via escapeBlock, else proceed happily" + parent ifNil: [^ escapeBlock value]. "Not relevant unless in dual change sorter." + (myChangeSet == (parent other: self) changeSet) ifTrue: [self inform: 'This command requires that the change sets selected on the two sides of the change sorter *not* + be the same.' translated. - be the same.'. ^ escapeBlock value] ! Item was changed: ----- Method: Debugger>>preDebugMessageString (in category 'toolbuilder') ----- preDebugMessageString + ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!' translated].! - ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!'].! Item was changed: ----- Method: DualChangeSorter class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#DualChangeSorter, #prototypicalToolWindow. 'Change Sorter' translatedNoop. 'Shows two change sets side by side' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(DualChangeSorter prototypicalToolWindow 'Change Sorter' 'Shows two change sets side by side') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCode (in category 'file list services') ----- serviceBrowseCode "Answer the service of opening a file-contents browser" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCodeFiles (in category 'file list services') ----- serviceBrowseCodeFiles ^ (SimpleServiceEntry provider: self + label: 'browse code files' translatedNoop - label: 'browse code files' selector: #selectAndBrowseFile:) argumentGetter: [ :fileList | fileList ]; yourself! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCompressedCode (in category 'file list services') ----- serviceBrowseCompressedCode "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseCompressedCodeStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileList class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#FileList . #prototypicalToolWindow, 'File List' translatedNoop. 'A File List is a tool for browsing folders and files on disks and on ftp types.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(FileList prototypicalToolWindow 'File List' 'A File List is a tool for browsing folders and files on disks and on ftp types.') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileList>>deleteDirectory (in category 'volume list and pattern') ----- deleteDirectory "Remove the currently selected directory" | localDirName | + directory entries size = 0 ifFalse:[^self inform:'Directory must be empty' translated]. - directory entries size = 0 ifFalse:[^self inform:'Directory must be empty']. localDirName := directory localName. + (self confirm: ('Really delete {1}?' translated format: {localDirName})) ifFalse: [^ self]. - (self confirm: 'Really delete ' , localDirName , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. directory deleteDirectory: localDirName. self updateFileList.! Item was changed: ----- Method: FileList>>serviceAddNewDirectory (in category 'own services') ----- serviceAddNewDirectory "Answer a service entry characterizing the 'add new directory' command" ^ SimpleServiceEntry provider: self + label: 'add new directory' translatedNoop - label: 'add new directory' selector: #addNewDirectory + description: 'adds a new, empty directory (folder)' translatedNoop! - description: 'adds a new, empty directory (folder)' ! Item was changed: ----- Method: FileList>>serviceAddNewFile (in category 'own services') ----- serviceAddNewFile "Answer a service entry characterizing the 'add new file' command" + ^ SimpleServiceEntry + provider: self + label: 'add new file' translatedNoop + selector: #addNewFile + description: 'create a new,. empty file, and add it to the current directory.' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'add new file' selector: #addNewFile description: 'create a new,. empty file, and add it to the current directory.'! Item was changed: ----- Method: FileList>>serviceAllFileOptions (in category 'own services') ----- serviceAllFileOptions + ^ {SimpleServiceEntry + provider: self + label: 'more...' translatedNoop + selector: #offerAllFileOptions + description: 'show all the options available' translatedNoop}! - ^ {SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions description: 'show all the options available'}! Item was changed: ----- Method: FileList>>serviceCompressFile (in category 'own services') ----- serviceCompressFile "Answer a service for compressing a file" + ^ SimpleServiceEntry + provider: self + label: 'compress' translatedNoop + selector: #compressFile + description: 'compress file' translatedNoop + buttonLabel: 'compress' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'compress' selector: #compressFile description: 'compress file' buttonLabel: 'compress'! Item was changed: ----- Method: FileList>>serviceCopyName (in category 'own services') ----- serviceCopyName + ^ (SimpleServiceEntry + provider: self + label: 'copy name to clipboard' translatedNoop + selector: #copyName + description:'copy name to clipboard' translatedNoop )! - ^ (SimpleServiceEntry provider: self label: 'copy name to clipboard' selector: #copyName description:'copy name to clipboard' )! Item was changed: ----- Method: FileList>>serviceDeleteFile (in category 'own services') ----- serviceDeleteFile + ^ (SimpleServiceEntry + provider: self + label: 'delete' translatedNoop + selector: #deleteFile) + description: 'delete the seleted item' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'delete' selector: #deleteFile) - description: 'delete the seleted item'! Item was changed: ----- Method: FileList>>serviceGet (in category 'own services') ----- serviceGet "Answer a service for getting the entire file" ^ (SimpleServiceEntry provider: self + label: 'get entire file' translatedNoop - label: 'get entire file' selector: #get + description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.' translatedNoop)! - description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.')! Item was changed: ----- Method: FileList>>serviceGetEncodedText (in category 'own services') ----- serviceGetEncodedText ^ (SimpleServiceEntry provider: self + label: 'view as encoded text' translatedNoop - label: 'view as encoded text' selector: #getEncodedText + description: 'view as encoded text' translatedNoop) - description: 'view as encoded text') ! Item was changed: ----- Method: FileList>>serviceGetHex (in category 'own services') ----- serviceGetHex ^ (SimpleServiceEntry provider: self + label: 'view as hex' translatedNoop - label: 'view as hex' selector: #getHex + description: 'view as hex' translatedNoop) - description: 'view as hex') ! Item was changed: ----- Method: FileList>>serviceRenameFile (in category 'own services') ----- serviceRenameFile + ^ (SimpleServiceEntry + provider: self + label: 'rename' translatedNoop + selector: #renameFile + description: 'rename file' translatedNoop)! - ^ (SimpleServiceEntry provider: self label: 'rename' selector: #renameFile description: 'rename file')! Item was changed: ----- Method: FileList>>serviceSortByDate (in category 'own services') ----- serviceSortByDate "Answer a service for sorting by date" ^ (SimpleServiceEntry new provider: self + label: 'by date' translatedNoop - label: 'by date' selector: #sortByDate + description: 'sort entries by date' translatedNoop) - description: 'sort entries by date') extraSelector: #sortingByDate; + buttonLabel: 'date' translatedNoop! - buttonLabel: 'date'! Item was changed: ----- Method: FileList>>serviceSortByName (in category 'own services') ----- serviceSortByName "Answer a service for soring by name" ^ (SimpleServiceEntry new + provider: self label: 'by name' translatedNoop + selector: #sortByName + description: 'sort entries by name' translatedNoop) - provider: self label: 'by name' selector: #sortByName - description: 'sort entries by name') extraSelector: #sortingByName; + buttonLabel: 'name' translatedNoop! - buttonLabel: 'name'! Item was changed: ----- Method: FileList>>serviceSortBySize (in category 'own services') ----- serviceSortBySize "Answer a service for sorting by size" ^ (SimpleServiceEntry provider: self + label: 'by size' translatedNoop - label: 'by size' selector: #sortBySize + description: 'sort entries by size' translatedNoop) - description: 'sort entries by size') extraSelector: #sortingBySize; + buttonLabel: 'size' translatedNoop! - buttonLabel: 'size'! Item was changed: ----- Method: FileList>>serviceViewContentsInWorkspace (in category 'own services') ----- serviceViewContentsInWorkspace "Answer a service for viewing the contents of a file in a workspace" + ^ (SimpleServiceEntry provider: self label: 'workspace with contents' translatedNoop + selector: #viewContentsInWorkspace) + description: 'open a new Workspace whose contents are set to the contents of this file' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'workspace with contents' selector: #viewContentsInWorkspace) - description: 'open a new Workspace whose contents are set to the contents of this file'! Item was changed: ----- Method: FileList2 class>>modalFileSelectorForSuffixes: (in category 'modal dialogs') ----- modalFileSelectorForSuffixes: aList | window aFileList | window := self morphicViewFileSelectorForSuffixes: aList. aFileList := window valueOfProperty: #fileListModel. + aFileList resort: #name. window openCenteredInWorld. UserInterfaceTheme current applyTo: window allMorphs. self modalLoopOn: window. ^aFileList getSelectedFile! Item was changed: ----- Method: FileList2>>serviceCancel (in category 'own services') ----- serviceCancel "Answer a service for hitting the cancel button" ^ (SimpleServiceEntry new + provider: self + label: 'cancel' translatedNoop + selector: #cancelHit + description: 'hit here to cancel ' translatedNoop) + buttonLabel: 'cancel' translatedNoop! - provider: self label: 'cancel' selector: #cancelHit - description: 'hit here to cancel ') - buttonLabel: 'cancel'! Item was changed: ----- Method: FileList2>>serviceOkay (in category 'own services') ----- serviceOkay "Answer a service for hitting the okay button" ^ (SimpleServiceEntry new + provider: self + label: 'okay' translatedNoop + selector: #okHit + description: 'hit here to accept the current selection' translatedNoop) + buttonLabel: 'ok' translatedNoop! - provider: self label: 'okay' selector: #okHit - description: 'hit here to accept the current selection') - buttonLabel: 'ok'! Item was changed: ----- Method: FileList2>>serviceOpenProjectFromFile (in category 'own services') ----- serviceOpenProjectFromFile "Answer a service for opening a .pr project file" ^ SimpleServiceEntry provider: self + label: 'load as project' translatedNoop - label: 'load as project' selector: #openProjectFromFile + description: 'open project from file' translatedNoop + buttonLabel: 'load' translatedNoop! - description: 'open project from file' - buttonLabel: 'load'! Item was changed: ----- Method: ProcessBrowser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ProcessBrowser. #prototypicalToolWindow. 'Processes' translatedNoop. 'A Process Browser shows you all the running processes' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ProcessBrowser prototypicalToolWindow 'Processes' 'A Process Browser shows you all the running processes') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Tue Aug 30 10:03:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 10:03:47 2016 Subject: [squeak-dev] The Trunk: GetText-tfel.40.mcz Message-ID: Tim Felgentreff uploaded a new version of GetText to project The Trunk: http://source.squeak.org/trunk/GetText-tfel.40.mcz ==================== Summary ==================== Name: GetText-tfel.40 Author: tfel Time: 5 August 2016, 3:52:12.522259 pm UUID: 7a16aac5-9583-3b49-8c90-2d5b6eed882e Ancestors: GetText-tfel.39 update the exporter to also catch dynamic translations =============== Diff against GetText-ul.38 =============== Item was changed: Object subclass: #GetTextExporter instanceVariableNames: 'stream' classVariableNames: '' poolDictionaries: '' category: 'GetText-Editor'! + !GetTextExporter commentStamp: 'tfel 8/4/2016 16:18' prior: 0! - !GetTextExporter commentStamp: '' prior: 0! Export translations to gettext format divided into categories. "Export gettext template files" GetTextExporter new exportTemplate. "Export translation files for current locale" + GetTextExporter new exportTranslator: (NaturalLanguageTranslator current). - GetTextExporter new exportTranslator: (InternalTranslator newLocaleID: LocaleID current). "Export all gettext template and po files." GetTextExporter exportAll. ! Item was added: + ----- Method: GetTextExporter>>appendTranslationsAlreadyIn:to: (in category 'exporting') ----- + appendTranslationsAlreadyIn: translator to: domains + | d | + translator moFiles keysAndValuesDo: [:domain :mo | + mo ifNotNil: [ + d := domains at: domain ifAbsentPut: [Dictionary new]. + mo translations keysAndValuesDo: [:key :translation | + d at: key asString ifAbsentPut: [{MethodReference class: Object selector: #yourself}]]]]! Item was changed: ----- Method: GetTextExporter>>createExtraInformation (in category 'private') ----- createExtraInformation | extras | extras := OrderedCollection new. #( + 'ATTENTION TRANSLATORS!! This should be the name of your language as you would like it to appear in the Languages menu, e.g. "Español" or "English"' 'Language-Name' + 'ATTENTION TRANSLATORS!! Put in the directionality of your language, that is "LTR" for left-to-right or "RTL" for right-to-left' 'Language-Direction' - 'Language name as you''d like it to appear in the Languages menu' 'Language-Name' - 'Directionality of language' 'Language-Direction' ) pairsDo: [:first :second | extras add: (Array with: '' with: first with: second). ]. ^ extras! Item was changed: ----- Method: GetTextExporter>>exportTag:msg: (in category 'private') ----- exportTag: tag msg: aString stream nextPutAll: tag. stream space. + aString ifEmpty: [stream nextPutAll: '""'; cr. ^ self]. aString lineIndicesDo: [:start :endWithoutDelimiters :end | | line | line := (end = endWithoutDelimiters) ifTrue: [aString copyFrom: start to: endWithoutDelimiters] ifFalse: [(aString at: endWithoutDelimiters + 1) = Character cr ifTrue: [aString copyFrom: start to: endWithoutDelimiters + 1] ifFalse: [(aString copyFrom: start to: endWithoutDelimiters) copyWith: Character cr]]. stream nextPut: $"; nextPutAll: (self formatString: line); nextPut: $"; cr].! Item was changed: ----- Method: GetTextExporter>>exportTranslator: (in category 'exporting') ----- exportTranslator: translator "Export translation files. the file extention is 'po', or 'pot' if translator is nil " "GetTextExporter2 new exportTranslator: NaturalLanguageTranslator current " | domains | domains := Dictionary new. self appendTranslations: domains. + self appendTranslationsAlreadyIn: translator to: domains. domains keysAndValuesDo: [:domainName :value | self export: value translator: translator domain: domainName]! Item was changed: ----- Method: GetTextExporter>>translationFor:in: (in category 'private') ----- translationFor: aKey in: translator | translation | translator ifNil: [^ '']. TextDomainManager allKnownDomains do: [:domain | translation := translator translate: aKey inDomain: domain. aKey = translation ifFalse: [^translation] ]. + ^ ''! - ^ aKey! From commits at source.squeak.org Tue Aug 30 10:06:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 10:06:05 2016 Subject: [squeak-dev] The Trunk: Protocols-tfel.56.mcz Message-ID: Tim Felgentreff uploaded a new version of Protocols to project The Trunk: http://source.squeak.org/trunk/Protocols-tfel.56.mcz ==================== Summary ==================== Name: Protocols-tfel.56 Author: tfel Time: 2 August 2016, 10:03:19.877368 am UUID: 4e4eac0b-4973-d941-8aec-8abb37943966 Ancestors: Protocols-mt.55, Protocols-kfr.11 merge from Squeakland Etoys image =============== Diff against Protocols-mt.55 =============== Item was changed: ----- Method: ObjectWithDocumentation>>helpMessage (in category 'accessing') ----- helpMessage "Check if there is a getterSetterHelpMessage. Otherwise try the normal help message or return nil." ^ self getterSetterHelpMessage ifNil: [(self propertyAt: #helpMessage ifAbsent: + [self legacyHelpMessage ifNil: [^ nil]]) translatedInDomain: 'Etoys-Tiles']! - [self legacyHelpMessage ifNil: [^ nil]]) translated]! Item was changed: ----- Method: ObjectWithDocumentation>>wording (in category 'accessing') ----- wording "Answer the receiver's wording" | wording | (wording := self propertyAt: #wording ifAbsent: [nil]) + ifNotNil: [^wording translatedInDomain: 'Etoys-Tiles' or: 'Etoys']. - ifNotNil: [^wording translated]. self initWordingAndDocumentation. ^self propertyAt: #wording ifAbsent: ['']! Item was changed: ----- Method: Vocabulary class>>gettersForbiddenFromWatchers (in category 'eToy vocabularies') ----- gettersForbiddenFromWatchers "Answer getters that should not have watchers launched to them" + ^ #(colorSees copy isOverColor: seesColor: newClone getNewClone color:sees: touchesA: overlaps: overlapsAny: distanceToPlayer: bearingTo: bearingFrom:)! - ^ #(colorSees copy isOverColor: seesColor: newClone getNewClone color:sees: touchesA: overlaps: overlapsAny:)! Item was changed: ----- Method: Vocabulary class>>initializeStandardVocabularies (in category 'class initialization') ----- initializeStandardVocabularies "Initialize a few standard vocabularies and place them in the AllStandardVocabularies list." AllStandardVocabularies := nil. Smalltalk at: #EToyVocabulary ifPresent:[:aClass| self addStandardVocabulary: aClass new]. Smalltalk at: #EToyVectorVocabulary ifPresent:[:aClass| self addStandardVocabulary: aClass new]. self addStandardVocabulary: self newPublicVocabulary. self addStandardVocabulary: FullVocabulary new. self addStandardVocabulary: self newQuadVocabulary. self addStandardVocabulary: ColorType new. self addStandardVocabulary: BooleanType new. self addStandardVocabulary: GraphicType new. Smalltalk at: #PlayerType ifPresent:[:aClass| self addStandardVocabulary: aClass new]. self addStandardVocabulary: SoundType new. self addStandardVocabulary: StringType new. self addStandardVocabulary: MenuType new. self addStandardVocabulary: UnknownType new. Smalltalk at: #ScriptNameType ifPresent:[:aClass| self addStandardVocabulary: aClass new]. + Smalltalk at: #PointType + ifPresent:[:aClass| self addStandardVocabulary: aClass new]. self addStandardVocabulary: (SymbolListType new symbols: #(simple raised inset complexFramed complexRaised complexInset complexAltFramed complexAltRaised complexAltInset); vocabularyName: #BorderStyle; yourself). self addStandardVocabulary: (SymbolListType new symbols: #(lines arrows arrowheads dots); vocabularyName: #TrailStyle; yourself). self addStandardVocabulary: (SymbolListType new symbols: #(leftToRight rightToLeft topToBottom bottomToTop); vocabularyName: #ListDirection; yourself). self addStandardVocabulary: (SymbolListType new symbols: #(topLeft bottomRight center justified); vocabularyName: #ListCentering; yourself). + self addStandardVocabulary: (SymbolListType new symbols: #(#center #topLeft #topRight #bottomLeft #bottomRight #topCenter #leftCenter #rightCenter #bottomCenter ); vocabularyName: #CellPositioning; yourself). + + self addStandardVocabulary: (SymbolListType new symbols: #(#none #localRect #localSquare #globalRect #globalSquare ); vocabularyName: #CellSpacing; yourself). + self addStandardVocabulary: (SymbolListType new symbols: #(buttonDown whilePressed buttonUp); vocabularyName: #ButtonPhase; yourself). self addStandardVocabulary: (SymbolListType new symbols: #(rotate #'do not rotate' #'flip left right' #'flip up down'); vocabularyName: #RotationStyle; yourself). self addStandardVocabulary: (SymbolListType new symbols: #(rigid spaceFill shrinkWrap); vocabularyName: #Resizing; yourself). self addStandardVocabulary: self newSystemVocabulary. "A custom vocabulary for Smalltalk -- still under development)" self numberVocabulary. "creates and adds it" "self wonderlandVocabulary." "creates and adds it" self vocabularyForClass: Time. "creates and adds it" Smalltalk at: #KedamaPatchType ifPresent:[:aClass| self addStandardVocabulary: (aClass new vocabularyName: #Patch; yourself). ]. self addStandardVocabulary: (SymbolListType new symbols: #(wrap stick bouncing); vocabularyName: #EdgeMode; yourself). self addStandardVocabulary: (SymbolListType new symbols: #(logScale linear color); vocabularyName: #PatchDisplayMode; yourself). + + self addStandardVocabulary: (SymbolListType new symbols: #(#top #'top right' #right #'bottom right' #bottom #'bottom left' #left #'top left' #center ); vocabularyName: #AttachmentEdge; yourself). + + Smalltalk + at: #CalendarMorph + ifPresent: [:aClass | aClass assureDateFormatEstablished]. "Vocabulary initialize"! From commits at source.squeak.org Tue Aug 30 10:28:45 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 10:28:48 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.211.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.211.mcz ==================== Summary ==================== Name: EToys-tfel.211 Author: tfel Time: 30 August 2016, 12:26:41.667946 pm UUID: 3b473c59-76cc-5f45-a96c-eab36c25f3fd Ancestors: EToys-tfel.210 optional dependency on ScratchPlugin =============== Diff against EToys-tfel.210 =============== Item was changed: ----- Method: EtoyDAVLoginMorph>>launchBrowser (in category 'actions') ----- launchBrowser ActiveWorld addMorph: self buildPanel centeredNear: Sensor cursorPoint. + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | sp primOpenURL: self url]. - ScratchPlugin primOpenURL: self url. ! Item was changed: ----- Method: FileList2>>loginHit (in category '*Etoys-Squeakland-private') ----- loginHit | s failed ret loginDialog | + (Smalltalk classNamed: 'EtoyDAVLoginMorph') ifNil: [^ false]. loginDialog := modalView valueOfProperty: #loginDialog ifAbsent: [nil]. loginDialog ifNotNil: [^ false]. s := ServerDirectory servers at: 'My Squeakland' ifAbsent: [^ false]. failed := [EtoysUtilities loggedIn: false. loginDialog := nil. s user: nil]. ret := true. + loginDialog := (Smalltalk classNamed: 'EtoyDAVLoginMorph') new. - loginDialog := EtoyDAVLoginMorph new. loginDialog loginAndDo: [:n :p | s ifNotNil: [ s user: n. s password: p. [s copy createPersonalDirectory: n] on: Error do: [:ex | "either directory already exists or could not create. Here, it is just eaten as the following test will tell us whether it can be read."]. [s entries] on: ProtocolClientError, NetworkError do: [:ex | failed value. self inform: 'Login failed.'. ret := false]. ret ifTrue: [Utilities authorName: n. Utilities loggedIn: true]]. self updateLoginButtonAppearance. EtoysUtilities loggedIn ifTrue: [ self directory: directory. brevityState := #FileList. "self addPath: path." self changed: #fileList. self changed: #contents. self changed: #currentDirectorySelected. EToyProjectDetailsMorph updateTripletsFromWebSiteInBackground. ]. loginDialog := nil. true. ] ifCanceled: failed. ! Item was changed: ----- Method: KedamaMorph>>acceptForm: (in category 'event handling') ----- acceptForm: aForm | c xArray yArray colorArray newX newY turtlesByColor colorArrays thisPlayer xArrays yArrays | turtlesDict keysAndValuesDo: [:player :vector | player setTurtleCount: 0]. turtlesByColor := Dictionary new. turtlesDict keysAndValuesDo: [:player :vector | turtlesByColor at: player color put: player]. xArrays := Dictionary new. yArrays := Dictionary new. colorArrays := Dictionary new. 0 to: aForm height do: [:y | 0 to: aForm width do: [:x | c := aForm colorAt: (x@y). c isTransparent ifFalse: [ newX := x. newY := y. ((newX >= 0 and: [newX < (self dimensions * pixelsPerPatch) x]) and: [newY >= 0 and: [newY < (self dimensions * pixelsPerPatch) y]]) ifTrue: [ thisPlayer := turtlesByColor at: c ifAbsentPut: [ turtlesByColor keys + detect: [:thisColor | (thisColor diff: c) < 0.2] + ifFound: [:thisColor | turtlesByColor at: thisColor] - detect: [:color | (color diff: c) < 0.2] - ifFound: [:color | turtlesByColor at: color] ifNone: [ (self player newTurtleSilently color: c; player)]]. xArray := xArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. yArray := yArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. colorArray := colorArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. xArray add: newX asFloat / pixelsPerPatch. yArray add: newY asFloat / pixelsPerPatch. colorArray add: (c pixelValueForDepth: 32). ]. ]. ]. ]. xArrays keysAndValuesDo: [:player :xArry | self makeTurtlesAtPositionsIn: {xArry asArray. (yArrays at: player) asArray. (colorArrays at: player) asArray} examplerPlayer: player ofPrototype: nil. player costume privateTurtleCount: (self turtlesCountOf: player)].! Item was changed: ----- Method: SketchMorph>>blur:form: (in category '*Etoys-Squeakland-filters') ----- blur: aWidth form: filteredForm | f fOut fWidth | aWidth = 0 ifTrue:[^ filteredForm]. f := filteredForm asFormOfDepth: 32. fWidth := f width + (aWidth - 1) max: f width. fOut := f deepCopy. + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | + sp + primBlur: f bits + into: fOut bits + width: fWidth]. - ScratchPlugin - primBlur: f bits - into: fOut bits - width: fWidth. ^ fOut asFormOfDepth: 16! Item was changed: ----- Method: SketchMorph>>brightnessShift:form: (in category '*Etoys-Squeakland-filters') ----- brightnessShift: aShift form: filteredForm | f fOut shift | aShift = 0 ifTrue:[^ filteredForm]. shift := aShift min: 100 max: -100. f := filteredForm asFormOfDepth: 32. fOut := f deepCopy. + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | + sp + primShiftBrightness: f bits + into: fOut bits + by: shift]. - ScratchPlugin - primShiftBrightness: f bits - into: fOut bits - by: shift. ^ fOut asFormOfDepth: 16! Item was changed: ----- Method: SketchMorph>>fishEye:form: (in category '*Etoys-Squeakland-filters') ----- fishEye: aPower form: aForm | f fOut power | aPower = 0 ifTrue:[^aForm]. power := (100 + (aPower * 10)) max:0. f := aForm asFormOfDepth: 32. fOut := f deepCopy. + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | + sp primFisheye: f bits into: fOut bits width: f width power: power]. - ScratchPlugin primFisheye: f bits into: fOut bits width: f width power: power. ^fOut asFormOfDepth: 16! Item was changed: ----- Method: SketchMorph>>hueShift:form: (in category '*Etoys-Squeakland-filters') ----- hueShift: aShift form: filteredForm | f fOut shift | aShift = 0 ifTrue:[^ filteredForm]. shift := aShift min: 360 max: -360. f := filteredForm asFormOfDepth: 32. fOut := f deepCopy. + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | + sp + primShiftHue: f bits + into: fOut bits + byDegrees: shift]. - ScratchPlugin - primShiftHue: f bits - into: fOut bits - byDegrees: shift. ^ fOut asFormOfDepth: 16! Item was changed: ----- Method: SketchMorph>>saturationShift:form: (in category '*Etoys-Squeakland-filters') ----- saturationShift: aShift form: filteredForm | f fOut shift | aShift = 0 ifTrue:[^ filteredForm]. shift := aShift min: 100 max: -100. f := filteredForm asFormOfDepth: 32. fOut := f deepCopy. + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | + sp + primShiftSaturation: f bits + into: fOut bits + by: shift]. - ScratchPlugin - primShiftSaturation: f bits - into: fOut bits - by: shift. ^ fOut asFormOfDepth: 16! Item was changed: ----- Method: SketchMorph>>whirl:form: (in category '*Etoys-Squeakland-filters') ----- whirl: anAngle form: aForm | f fOut | anAngle = 0 ifTrue:[^aForm]. f := aForm asFormOfDepth: 32. fOut := f deepCopy. + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | + sp primWhirl: f bits into: fOut bits width: f width angle: anAngle]. - ScratchPlugin primWhirl: f bits into: fOut bits width: f width angle: anAngle. ^fOut asFormOfDepth: 16! From commits at source.squeak.org Tue Aug 30 11:36:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 11:36:01 2016 Subject: [squeak-dev] The Trunk: Sound-tfel.59.mcz Message-ID: Tim Felgentreff uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-tfel.59.mcz ==================== Summary ==================== Name: Sound-tfel.59 Author: tfel Time: 30 August 2016, 1:35:33.820946 pm UUID: ba31f5bd-7f7d-3144-99ac-d5c67d3cf6ee Ancestors: Sound-tfel.58 Replace underscore assignments with := =============== Diff against Sound-mt.57 =============== Item was changed: ----- Method: AbstractSound class>>fileInSoundLibraryNamed: (in category 'sound library-file in/out') ----- fileInSoundLibraryNamed: fileName "File in the sound library with the given file name, and add its contents to the current sound library." | s newSounds | + s := FileStream readOnlyFileNamed: fileName. - s := FileStream oldFileNamed: fileName. newSounds := s fileInObjectAndCode. s close. newSounds associationsDo: [:assoc | self storeFiledInSound: assoc value named: assoc key]. AbstractSound updateScorePlayers. Smalltalk garbageCollect. "Large objects may have been released" ! Item was changed: ----- Method: SampledSound class>>soundNamed: (in category 'sound library') ----- soundNamed: aString "Answer the sound of the given name, or, if there is no sound of that name, put up an informer so stating, and answer nil" "(SampledSound soundNamed: 'shutterClick') play" ^ self soundNamed: aString ifAbsent: + [self inform: aString, ' not found in the Sound Library' translated. - [self inform: aString, ' not found in the Sound Library'. nil]! Item was changed: ----- Method: SampledSound class>>soundNamed:ifAbsent: (in category 'sound library') ----- soundNamed: aString ifAbsent: aBlock "Answer the sound of the given name, or if there is no sound of that name, answer the result of evaluating aBlock" "(SampledSound soundNamed: 'shutterClick') play" + | entry samples compressedSound | - | entry samples | entry := SoundLibrary at: aString ifAbsent: [^ aBlock value]. entry ifNil: [^ aBlock value]. + entry second isString + ifTrue: [compressedSound := Compiler evaluate: entry second. + compressedSound source: entry first. + ^ compressedSound asSound] + ifFalse: [samples := entry at: 1. + samples class isBytes ifTrue: [samples := self convert8bitSignedTo16Bit: samples]. + ^ self samples: samples samplingRate: (entry at: 2)] - samples := entry at: 1. - samples class isBytes ifTrue: [samples := self convert8bitSignedTo16Bit: samples]. - ^ self samples: samples samplingRate: (entry at: 2) ! Item was changed: ----- Method: SampledSound class>>universalSoundKeys (in category 'sound library') ----- universalSoundKeys "Answer a list of the sound-names that are expected to be found in the SoundLibrary of every image." + ^ {'camera' translatedNoop. 'chirp' translatedNoop. 'chomp' translatedNoop. 'click' translatedNoop. 'clink' translatedNoop. 'coyote' translatedNoop. 'croak' translatedNoop. 'horn' translatedNoop. 'laugh' translatedNoop. 'meow' translatedNoop. 'motor' translatedNoop. 'peaks' translatedNoop. 'scrape' translatedNoop. 'scratch' translatedNoop. 'scritch' translatedNoop. 'silence' translatedNoop. 'splash' translatedNoop. 'warble' translatedNoop.}! - - ^ #('splash' 'peaks' 'clink' 'croak' 'scratch' 'chirp' 'scritch' 'warble' 'scrape' 'camera' 'coyote' 'silence' 'motor') - - ! Item was changed: ----- Method: SampledSound>>compressWith: (in category 'accessing') ----- + compressWith: codecClass + | codec result | + codec := codecClass new. + result := codec compressSound: self. + codec release. + ^ result! - compressWith: codecClass - ^ codecClass new compressSound: self! Item was changed: ----- Method: SampledSound>>compressWith:atRate: (in category 'accessing') ----- + compressWith: codecClass atRate: aSamplingRate + | codec result | + codec := codecClass new. + result := codec compressSound: self atRate: aSamplingRate. + codec release. + ^ result! - compressWith: codecClass atRate: aSamplingRate - - ^ codecClass new compressSound: self atRate: aSamplingRate! Item was changed: ----- Method: SoundRecorder>>stopRecording (in category 'recording controls') ----- stopRecording "Stop the recording process and turn of the sound input driver." recordProcess ifNotNil: [recordProcess terminate]. recordProcess := nil. self primStopRecording. RecorderActive := false. Smalltalk unregisterExternalObject: bufferAvailableSema. ((currentBuffer ~~ nil) and: [nextIndex > 1]) ifTrue: [self emitPartialBuffer]. + codec ifNotNil: [codec reset]. self initializeRecordingState. ! From commits at source.squeak.org Tue Aug 30 11:38:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 11:38:24 2016 Subject: [squeak-dev] The Trunk: TrueType-tfel.46.mcz Message-ID: Tim Felgentreff uploaded a new version of TrueType to project The Trunk: http://source.squeak.org/trunk/TrueType-tfel.46.mcz ==================== Summary ==================== Name: TrueType-tfel.46 Author: tfel Time: 30 August 2016, 1:38:08.792946 pm UUID: 31dbdab7-9421-6b4f-b53d-e6a1e342739f Ancestors: TrueType-tfel.45 Replace underscore assignments with := =============== Diff against TrueType-mt.44 =============== Item was changed: + ----- Method: TTFontDescription class>>removeDescriptionNamed:subfamilyName: (in category 'instance creations') ----- - ----- Method: TTFontDescription class>>removeDescriptionNamed:subfamilyName: (in category 'instance creation') ----- removeDescriptionNamed: descriptionName subfamilyName: subfamilyName | tts | Descriptions ifNil: [^ self]. + tts := Descriptions select: [:f | f first name = descriptionName and: [f first subfamilyName = subfamilyName]]. - tts := Descriptions select: [:f | f name = descriptionName and: [f subfamilyName = subfamilyName]]. tts do: [:f | Descriptions remove: f]. ! Item was changed: ----- Method: TTFontDescription>>at: (in category 'accessing') ----- at: aCharOrInteger + ^glyphTable at: (aCharOrInteger isCharacter ifTrue: [aCharOrInteger charCode] ifFalse: [aCharOrInteger])+1! - ^glyphTable at: aCharOrInteger asInteger+1! Item was changed: ----- Method: TTFontReader class>>serviceOpenTrueTypeFont (in category 'class initialization') ----- serviceOpenTrueTypeFont ^ SimpleServiceEntry provider: self + label: 'open true type font' translatedNoop - label: 'open true type font' selector: #openTTFFile: + description: 'open true type font' translatedNoop! - description: 'open true type font'! From bert at freudenbergs.de Tue Aug 30 11:49:27 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Tue Aug 30 11:49:31 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> <20160826154023.46ca80bc@herpi5> Message-ID: On Tue, Aug 30, 2016 at 11:22 AM, H. Hirzel wrote: > > BTW how do I get access to the Smalltalk tools in the Squeakland image? > http://www.squeakland.org/content/installers/Etoys-To-Go-5.0.zip > * Cmd-comma: simplified code menu * Cmd-Shift-W: full world menu * Or disable eToyFriendly preference to get world menu on click as usual - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160830/385ad37f/attachment.htm From hannes.hirzel at gmail.com Tue Aug 30 13:11:51 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Tue Aug 30 13:11:55 2016 Subject: [squeak-dev] Squeak 5.1, saving of Morphic projects is broken In-Reply-To: References: <20160826131458.42cc5dc3@herpi5> <20160826142256.6e548319@herpi5> <20160826154023.46ca80bc@herpi5> Message-ID: On 8/30/16, Bert Freudenberg wrote: > On Tue, Aug 30, 2016 at 11:22 AM, H. Hirzel > wrote: >> >> BTW how do I get access to the Smalltalk tools in the Squeakland image? >> http://www.squeakland.org/content/installers/Etoys-To-Go-5.0.zip >> > > > * Cmd-comma: simplified code menu > * Cmd-Shift-W: full world menu > * Or disable eToyFriendly preference to get world menu on click as usual > > - Bert - > Thank you. I found an example how the symbolic expressions work (see below). The question is for which types of projects and object nets this works. --Hannes MSExpParser test1 | str1 str2 str3 | str1 _ '(script :name "testscript1:" :type "Player" :player "12" (parameter :name "parameter" :type "Number" :position "1") (sequence (loop :type "repeat" (initial (literal :value "0")) (increment (literal :value "1")) (test (send :type "Number" (selector :selector "+") (send :type "Number" (selector :getter "x") (literal :type "Player" :value "self")) (literal :type "Number" :value "1"))) (sequence (assign :type "Number" :updating "Incr:" :property "x" (literal :type "Player" :value "4") (send :type "Number" (selector :selector "+") (literal :type "Number" :value "244.0") (literal :type "Number" :value "1")))))))'. str2 _ (MSExpParser parse: str1 with: #ksexp) prettyString. str3 _ (MSExpParser parse: str2 with: #ksexp) prettyString. (StringHolder new textContents: (TextDiffBuilder buildDisplayPatchFrom: str2 to: str3)) openLabel: 'original sexp and new sexp'. Object subclass: #SExpElement instanceVariableNames: 'keyword attributes elements' classVariableNames: '' poolDictionaries: '' category: 'Meta-Examples' Array variableSubclass: #SExpAttributes instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Meta-Examples' From commits at source.squeak.org Tue Aug 30 14:12:32 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 14:12:34 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.214.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.214.mcz ==================== Summary ==================== Name: EToys-tfel.214 Author: tfel Time: 30 August 2016, 4:11:08.66265 pm UUID: 82953579-44cf-1e48-8d45-aebe7863dc63 Ancestors: EToys-tfel.213 update release builder and theme to use Squeak hierarchy =============== Diff against EToys-tfel.213 =============== Item was changed: SystemOrganization addCategory: #'Etoys-Buttons'! SystemOrganization addCategory: #'Etoys-CustomEvents'! SystemOrganization addCategory: #'Etoys-Experimental'! SystemOrganization addCategory: #'Etoys-Outliner'! SystemOrganization addCategory: #'Etoys-Protocols'! SystemOrganization addCategory: #'Etoys-Protocols-Type Vocabularies'! SystemOrganization addCategory: #'Etoys-Scripting'! SystemOrganization addCategory: #'Etoys-Scripting Support'! SystemOrganization addCategory: #'Etoys-Scripting Tiles'! SystemOrganization addCategory: #'Etoys-Squeakland-BroomMorphs-Base'! SystemOrganization addCategory: #'Etoys-Squeakland-BroomMorphs-Connectors'! SystemOrganization addCategory: #'Etoys-Squeakland-EToys-Kedama'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Buttons'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Calendar'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Debugger'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Help'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Input'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Scripting'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Scripting Support'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Scripting Tiles'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-SpeechBubbles'! SystemOrganization addCategory: #'Etoys-Squeakland-Etoys-Tile Scriptors'! SystemOrganization addCategory: #'Etoys-Squeakland-Graphics-External'! SystemOrganization addCategory: #'Etoys-Squeakland-Graphics-Text'! SystemOrganization addCategory: #'Etoys-Squeakland-Graphics-Tools-Intersection'! SystemOrganization addCategory: #'Etoys-Squeakland-Graphics-Tools-Simplification'! SystemOrganization addCategory: #'Etoys-Squeakland-Graphics-Tools-Triangulation'! SystemOrganization addCategory: #'Etoys-Squeakland-MorphicExtras-AdditionalMorphs'! SystemOrganization addCategory: #'Etoys-Squeakland-MorphicExtras-Charts'! SystemOrganization addCategory: #'Etoys-Squeakland-MorphicExtras-Postscript Filters'! SystemOrganization addCategory: #'Etoys-Squeakland-MorphicExtras-WebCam'! SystemOrganization addCategory: #'Etoys-Squeakland-MorphicExtras-Widgets'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Basic'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Books'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Components'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Demo'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Experimental'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Games'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Games-Chess'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-GeeMail'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Kernel'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Mentoring'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Navigators'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-PartsBin'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-PDA'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Support'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Widgets'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Windows'! SystemOrganization addCategory: #'Etoys-Squeakland-Morphic-Worlds'! SystemOrganization addCategory: #'Etoys-Squeakland-Multilingual-Languages'! SystemOrganization addCategory: #'Etoys-Squeakland-Multilingual-Scanning'! SystemOrganization addCategory: #'Etoys-Squeakland-Multilingual-TextConversion'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-HTML-Formatter'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-HTML-Forms'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-HTML-Parser'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-HTML-Parser Entities'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-HTML-Tokenizer'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-MIME'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-TelNet WordNet'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-UI'! SystemOrganization addCategory: #'Etoys-Squeakland-Network-Url'! SystemOrganization addCategory: #'Etoys-Squeakland-Protocols-Type Vocabularies'! SystemOrganization addCategory: #'Etoys-Squeakland-Sound-Interface'! SystemOrganization addCategory: #'Etoys-Squeakland-Sound-Ogg'! SystemOrganization addCategory: #'Etoys-Squeakland-Sound-Scores'! SystemOrganization addCategory: #'Etoys-Squeakland-ST80-Morphic'! SystemOrganization addCategory: #'Etoys-Squeakland-SUnit'! SystemOrganization addCategory: #'Etoys-Squeakland-Sugar'! SystemOrganization addCategory: #'Etoys-Squeakland-System-Applications'! SystemOrganization addCategory: #'Etoys-Squeakland-System-Clipboard-Extended'! SystemOrganization addCategory: #'Etoys-Squeakland-System-Compiler'! SystemOrganization addCategory: #'Etoys-Squeakland-System-Exceptions Kernel'! SystemOrganization addCategory: #'Etoys-Squeakland-System-Support'! SystemOrganization addCategory: #'Etoys-Squeakland-Tools-Changes'! SystemOrganization addCategory: #'Etoys-Squeakland-Tools-Explorer'! SystemOrganization addCategory: #'Etoys-Squeakland-Tools-File Contents Browser'! SystemOrganization addCategory: #'Etoys-Squeakland-Tools-Process Browser'! SystemOrganization addCategory: #'Etoys-Squeakland-Tweak-Kedama-ObjectVectors'! SystemOrganization addCategory: #'Etoys-Squeakland-Tweak-Kedama-ParseTreeTransformer'! SystemOrganization addCategory: #'Etoys-Squeakland-Tweak-Kedama-ParseTree-AttributeDefinition'! SystemOrganization addCategory: #'Etoys-Stacks'! SystemOrganization addCategory: #'Etoys-StarSqueak'! SystemOrganization addCategory: #'Etoys-Support'! SystemOrganization addCategory: #'Etoys-Tests'! SystemOrganization addCategory: #'Etoys-Tile Scriptors'! SystemOrganization addCategory: #'Etoys-Widgets'! SystemOrganization addCategory: #'Etoys-Squeakland-Support'! SystemOrganization addCategory: #'Etoys-Squeakland-SISS-Serialization'! SystemOrganization addCategory: #'Etoys-OLPC-Display'! SystemOrganization addCategory: #'Etoys-ReleaseBuilder'! + SystemOrganization addCategory: #'Etoys-UserInterfaceTheme'! Item was changed: ----- Method: Debugger>>buttonRowForPreDebugWindow: (in category '*Etoys-Squeakland-initialize') ----- buttonRowForPreDebugWindow: aDebugWindow "Answer a morph that will serve as the button row in a pre-debug window." | aRow aButton quads aFont | aRow := AlignmentMorph newRow hResizing: #spaceFill. aRow beSticky. aRow on: #mouseDown send: #yourself to: self. "Avoid dragging window." aRow addMorphBack: AlignmentMorph newVariableTransparentSpacer. quads := OrderedCollection withAll: self preDebugButtonQuads. ((self interruptedContext selector == #doesNotUnderstand:) and: [Preferences eToyFriendly not]) ifTrue: [quads add: { 'Create'. #createMethod. #magenta. 'create the missing method' }]. aFont := Preferences eToyFriendly ifFalse: [Preferences standardButtonFont] ifTrue: [Preferences standardEToysButtonFont]. quads do: [:quad | aButton := SimpleButtonMorph new target: aDebugWindow. aButton color: Color transparent; borderWidth: 1. aButton actionSelector: quad second. aButton label: quad first font: aFont. aButton submorphs first color: (Color colorFrom: quad third). aButton setBalloonText: quad fourth. - Preferences alternativeWindowLook - ifTrue:[aButton borderWidth: 2; borderColor: #raised]. aRow addMorphBack: aButton. aRow addMorphBack: AlignmentMorph newVariableTransparentSpacer]. ^ aRow! Item was added: + UserInterfaceTheme subclass: #EtoysTheme + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Etoys-UserInterfaceTheme'! Item was added: + ----- Method: EtoysTheme class>>create (in category 'instance creation') ----- + create + "doIt: [self createDark apply.]" + + | themeName | + themeName := 'Etoys'. + ^ (self named: themeName) in: [:theme | + theme merge: (self named: 'Squeak') overwrite: true. + theme name: themeName. + + theme set: #background for: #MorphicProject to: (SolidFillStyle color: (Color r: 0.9 g: 0.9 b: 1)). + + + theme + set: #standardListFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #standardFlapFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: TextEmphasis bold emphasisCode); + + set: #eToysButtonFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #eToysFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: TextEmphasis bold emphasisCode); + set: #eToysCodeFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #eToysTitleFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 32 emphasis: 0); + set: #paintBoxButtonFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 9 emphasis: 0); + set: #standardMenuFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #windowTitleFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #balloonHelpFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #connectorsLabelFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #standardCodeFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #standardSystemFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0). + theme]! Item was changed: ----- Method: PDA>>openAsMorphIn: (in category 'initialization') ----- openAsMorphIn: window "PDA new openAsMorph openInWorld" "Create a pluggable version of all the morphs for a Browser in Morphic" | dragNDropFlag paneColor chooser | window color: Color black. paneColor := (Color r: 0.6 g: 1.0 b: 0.0). window model: self. - Preferences alternativeWindowLook ifTrue:[ - window color: Color white. - window paneColor: paneColor]. dragNDropFlag := Preferences browseWithDragNDrop. window addMorph: ((PluggableListMorph on: self list: #peopleListItems selected: #peopleListIndex changeSelected: #peopleListIndex: menu: #peopleMenu: keystroke: #peopleListKey:from:) enableDragNDrop: dragNDropFlag) frame: (0@0 corner: 0.3@0.25). window addMorph: ((chooser := PDAChoiceMorph new color: paneColor) contentsClipped: 'all'; target: self; actionSelector: #chooseFrom:categoryItem:; arguments: {chooser}; getItemsSelector: #categoryChoices) frame: (0@0.25 corner: 0.3@0.3). window addMorph: ((MonthMorph newWithModel: self) color: paneColor; extent: 148@109) frame: (0.3@0 corner: 0.7@0.3). window addMorph: (PDAClockMorph new color: paneColor; faceColor: (Color r: 0.4 g: 0.8 b: 0.6)) "To match monthMorph" frame: (0.7@0 corner: 1.0@0.3). window addMorph: ((PluggableListMorph on: self list: #toDoListItems selected: #toDoListIndex changeSelected: #toDoListIndex: menu: #toDoMenu: keystroke: #toDoListKey:from:) enableDragNDrop: dragNDropFlag) frame: (0@0.3 corner: 0.3@0.7). window addMorph: ((PluggableListMorph on: self list: #scheduleListItems selected: #scheduleListIndex changeSelected: #scheduleListIndex: menu: #scheduleMenu: keystroke: #scheduleListKey:from:) enableDragNDrop: dragNDropFlag) frame: (0.3@0.3 corner: 0.7@0.7). window addMorph: ((PluggableListMorph on: self list: #notesListItems selected: #notesListIndex changeSelected: #notesListIndex: menu: #notesMenu: keystroke: #notesListKey:from:) enableDragNDrop: dragNDropFlag) frame: (0.7@0.3 corner: 1@0.7). window addMorph: (PluggableTextMorph on: self text: #currentItemText accept: #acceptCurrentItemText: readSelection: #currentItemSelection menu: #currentItemMenu:) frame: (0@0.7 corner: 1@1). + window firstSubmorph color: paneColor. - Preferences alternativeWindowLook ifFalse:[ - window firstSubmorph color: paneColor. - ]. window updatePaneColors. window step. ^ window! Item was added: + ----- Method: Preferences class>>chooseConnectorsLabelFont (in category '*Etoys-Squeakland-fonts') ----- + chooseConnectorsLabelFont + "present a menu with the possible fonts for etoy textual code" + + self + chooseFontWithPrompt: 'Choose the connectors label font' translated + andSendTo: self + withSelector: #setConnectorsLabelFont: + highlight: self connectorsLabelFont! Item was added: + ----- Method: Preferences class>>connectorsLabelFont (in category '*Etoys-Squeakland-fonts') ----- + connectorsLabelFont + "Answer the font to use in the etoy environment to view textual code." + + ^ (UserInterfaceTheme current get: #connectorsLabelFont) + ifNil: [TextStyle defaultFont]! Item was changed: ----- Method: Preferences class>>eToysCodeFont (in category '*Etoys-Squeakland-fonts') ----- eToysCodeFont "Answer the font to use in the etoy environment to view textual code." + ^ (UserInterfaceTheme current get: #eToysCodeFont) + ifNil: [TextStyle defaultFont]! - ^ Parameters at: #eToysCodeFont ifAbsentPut: self standardEToysFont! Item was changed: ----- Method: Preferences class>>initializePreferencePanel:in: (in category '*Etoys-Squeakland-preferences panel') ----- initializePreferencePanel: aPanel in: aPasteUpMorph "Initialize the given Preferences panel. in the given pasteup, which is the top-level panel installed in the container window. Also used to reset it after some change requires reformulation" + | tabbedPalette controlPage aColor aFont maxEntriesPerCategory tabsMorph anExtent prefObjects | - | tabbedPalette controlPage aColor aFont maxEntriesPerCategory tabsMorph anExtent prefObjects cc | aPasteUpMorph removeAllMorphs. aFont := Preferences standardListFont. aColor := aPanel defaultBackgroundColor. tabbedPalette := TabbedPalette newSticky. tabbedPalette dropEnabled: false. (tabsMorph := tabbedPalette tabsMorph) color: aColor darker; highlightColor: Color red regularColor: Color brown darker darker. tabbedPalette on: #mouseDown send: #yourself to: #(). maxEntriesPerCategory := 0. self listOfCategories do: [:aCat | controlPage := AlignmentMorph newColumn beSticky color: aColor. controlPage on: #mouseDown send: #yourself to: #(). controlPage dropEnabled: false. - Preferences alternativeWindowLook ifTrue: - [cc := Color transparent. - controlPage color: cc]. controlPage borderColor: aColor; layoutInset: 4. (prefObjects := self preferenceObjectsInCategory: aCat) do: [:aPreference | | button | + button := aPreference representativeButtonWithColor: Color white inPanel: aPanel. - button := aPreference representativeButtonWithColor: cc inPanel: aPanel. button ifNotNil: [controlPage addMorphBack: button]]. controlPage setNameTo: aCat asString. aCat = #? ifTrue: [aPanel addHelpItemsTo: controlPage]. tabbedPalette addTabFor: controlPage font: aFont. aCat = 'search results' ifTrue: [(tabbedPalette tabNamed: aCat) setBalloonText: 'Use the ? category to find preferences by keyword; the results of your search will show up here' translated]. maxEntriesPerCategory := maxEntriesPerCategory max: prefObjects size]. tabbedPalette selectTabNamed: '?'. tabsMorph rowsNoWiderThan: aPasteUpMorph width. aPasteUpMorph on: #mouseDown send: #yourself to: #(). anExtent := aPasteUpMorph width @ (490 max: (25 + tabsMorph height + (24 * maxEntriesPerCategory))). aPasteUpMorph extent: anExtent. aPasteUpMorph color: aColor. aPasteUpMorph addMorphBack: tabbedPalette.! Item was added: + ----- Method: Preferences class>>setConnectorsLabelFont: (in category '*Etoys-Squeakland-fonts') ----- + setConnectorsLabelFont: aFont + "change the font used on buttons in the eToys environment" + + UserInterfaceTheme current + set: #connectorsLabelFont + to: aFont; + apply.! Item was changed: ----- Method: Preferences class>>setEToysButtonFontTo: (in category '*Etoys-Squeakland-fonts') ----- setEToysButtonFontTo: aFont "change the font used on buttons in the eToys environment" + UserInterfaceTheme current + set: #eToysButtonFont + to: aFont; + apply.! - Parameters at: #eToysButtonFont put: aFont! Item was changed: ----- Method: Preferences class>>setEToysCodeFontTo: (in category '*Etoys-Squeakland-fonts') ----- setEToysCodeFontTo: aFont "change the code font used in eToys environment" + UserInterfaceTheme current + set: #eToysCodeFont + to: aFont; + apply.! - Parameters at: #eToysCodeFont put: aFont! Item was changed: ----- Method: Preferences class>>standardEToysButtonFont (in category '*Etoys-Squeakland-fonts') ----- standardEToysButtonFont "Answer the font to be used on buttons in the eToys environment" + ^ (UserInterfaceTheme current get: #eToysButtonFont) + ifNil: [TextStyle defaultFont]! - ^ Parameters at: #eToysButtonFont ifAbsentPut: [self standardButtonFont]! Item was changed: ----- Method: Preferences class>>standardEToysCodeFont (in category '*Etoys-Squeakland-fonts') ----- standardEToysCodeFont "Answer the font to be used for textual code in the eToys environment" + ^ (UserInterfaceTheme current get: #eToysCodeFont) + ifNil: [TextStyle defaultFont]! - ^ Parameters at: #eToysCodeFont ifAbsentPut: [self standardEToysFont]! Item was changed: ----- Method: PreferencesPanel>>findPreferencesMatching: (in category 'initialization') ----- findPreferencesMatching: incomingTextOrString "find all preferences matching incomingTextOrString" + | result aList aPalette controlPage | - | result aList aPalette controlPage cc | result := incomingTextOrString asString asLowercase. result := result asLowercase withBlanksTrimmed. result isEmptyOrNil ifTrue: [^ self]. aList := Preferences allPreferenceObjects select: [:aPreference | (aPreference name includesSubstring: result caseSensitive: false) or: [aPreference helpString includesSubstring: result caseSensitive: false]]. aPalette := (self containingWindow ifNil: [^ self]) findDeeplyA: TabbedPalette. aPalette ifNil: [^ self]. aPalette selectTabNamed: 'search results'. aPalette currentPage ifNil: [^ self]. "bkwd compat" controlPage := aPalette currentPage. controlPage removeAllMorphs. controlPage addMorph: (StringMorph contents: ('Preferences matching "', self searchString, '"') font: Preferences standardEToysButtonFont). - Preferences alternativeWindowLook ifTrue:[ - cc := Color transparent. - controlPage color: cc]. aList := aList asSortedCollection: [:a :b | a name < b name]. aList do: [:aPreference | | button | + button := aPreference representativeButtonWithColor: Color white inPanel: self. - button := aPreference representativeButtonWithColor: cc inPanel: self. button ifNotNil: [controlPage addMorphBack: button]]. aPalette world startSteppingSubmorphsOf: aPalette! Item was added: + ----- Method: QuickGuideMorph class>>cleanUp (in category 'as yet unclassified') ----- + cleanUp + + self indexPage: nil.! Item was added: + ----- Method: ReleaseBuilderSqueakland class>>clearCaches (in category 'scripts') ----- + clearCaches + + ObjectScanner new. "clear ObjectScanner's class pool" + ExternalSettings registerClient: ServerDirectory. + #('Morphic-UserObjects' 'EToy-UserObjects' 'Morphic-Imported' 'UserObjects') + do: [:each | SystemOrganization removeSystemCategory: each]. + super clearCaches.! Item was added: + ----- Method: ReleaseBuilderSqueakland class>>configureDesktop (in category 'scripts') ----- + configureDesktop + + super configureDesktop. + self loadDefaultForms. + self setDisplayExtent: 1200@900. + EtoysTheme create apply.! Item was added: + ----- Method: ReleaseBuilderSqueakland class>>prepareEnvironment (in category 'preparing') ----- + prepareEnvironment + | directory entries projectNames | + super prepareEnvironment. + projectNames := #('Gallery' 'Tutorials' 'Home'). + directory := FileDirectory on: Smalltalk imagePath. + entries := FileList2 projectOnlySelectionMethod: directory entries. + projectNames + do: [:projectName | (entries + anySatisfy: [:each | (Project parseProjectFileName: each first) first = projectName]) + ifFalse: [^ self error: projectName , ' is not found']]. + DeferredTask := [ProjectLoading openFromImagePath: 'Home'].! Item was added: + ----- Method: ReleaseBuilderSqueakland class>>releaseRepository (in category 'accessing') ----- + releaseRepository + + ^ super releaseRepository! Item was added: + ----- Method: ReleaseBuilderSqueakland class>>setPreferences (in category 'scripts') ----- + setPreferences + + super setPreferences. + Preferences cambridge. + Preferences allPreferenceObjects do: [:each | + each defaultValue: each preferenceValue]. + + Preferences + disable: #alternativeWindowBoxesLook; + enable: #magicHalos; + enable: #mouseOverHalos; + enable: #roundedScrollBarLook; + enable: #roundedWindowCorners; + enable: #showAdvancedNavigatorButtons; + disable: #honorDesktopCmdKeys; + disable: #warnIfNoChangesFile; + disable: #warnIfNoSourcesFile; + enable: #unlimitedPaintArea; + enable: #fastDragWindowForMorphic; + enable: #noviceMode; + disable: #generalizedYellowButtonMenu; + disable: #showAdvancedNavigatorButtons; + disable: #signProjectFiles; + disable: #warnIfNoChangesFile; + disable: #warnIfChangesFileReadOnly; + disable: #warnIfNoSourcesFile. + Morph preferredCornerRadius: 8. + PluggableButtonMorph roundedButtonCorners: true. + FillInTheBlankMorph roundedDialogCorners: true. + SystemWindow roundedWindowCorners: true. + Preferences restoreDefaultFontsForSqueakland. + Cursor useBiggerCursors: true. + TrashCanMorph + slideDismissalsToTrash: true; + preserveTrash: true. + SugarNavigatorBar + showHideButton: false; + showSugarNavigator: true.! Item was added: + ----- Method: ReleaseBuilderSqueakland class>>versionString (in category 'accessing') ----- + versionString + "Result format is specified in SystemVersion." + ^ 'Etoys{1}.{2}' format: {self releaseVersionMajor. self releaseVersionMinor}! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>buildInitialScreen (in category 'squeakland') ----- - buildInitialScreen - "ReleaseBuilderSqueakland new buildInitialScreen" - - QuickGuideMorph preloadIndexPage. - - World - submorphsDo: [:m | m delete]. - Flaps disableGlobalFlaps: false. - Flaps enableEToyFlaps. - - ProjectLoading loadFromImagePath: 'Tutorials'. - ProjectLoading loadFromImagePath: 'Gallery'. - ProjectLoading loadFromImagePath: 'Home'. - - (World submorphs select: [:e | e isMemberOf: ProjectViewMorph]) do: [:e | e delete]. - Project current - setThumbnail: (Project home ifNotNilDo: [:p | p thumbnail]).! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>checkCopyright (in category 'utilities') ----- - checkCopyright - | inNotice inImage inFile dir | - dir := FileDirectory on: Smalltalk imagePath. - [inFile := (dir readOnlyFileNamed: 'NOTICE') wantsLineEndConversion: true; contentsOfEntireFile] - on: FileDoesNotExistException do: [:ex | - dir = FileDirectory default - ifTrue: [dir := dir containingDirectory. ex retry] - ifFalse: [self error: 'NOTICE file not found']]. - inFile = Utilities copyrightNotice ifFalse: [self error: 'NOTICE file does not match image']. - inNotice := ((Utilities copyrightNotice findTokens: Character cr) - select: [:s | s includesSubString: '(c)']) - collect: [:s | s withBlanksTrimmed]. - inNotice := inNotice atAll: #(1 4 5). - inImage := Smalltalk copyright findTokens: Character cr. - inNotice = inImage ifFalse: [self error: 'Copyright declarations do not match'].! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>cleanUpChanges (in category 'utilities') ----- - cleanUpChanges - "Clean up the change sets" - - "ReleaseBuilder new cleanUpChanges" - - | projectChangeSetNames | - - "Delete all changesets except those currently used by existing projects." - projectChangeSetNames := Project allSubInstances collect: [:proj | proj changeSet name]. - ChangeSorter removeChangeSetsNamedSuchThat: - [:cs | (projectChangeSetNames includes: cs) not]. - ! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>cleanUpEtoys (in category 'utilities') ----- - cleanUpEtoys - "ReleaseBuilder new cleanUpEtoys" - - - StandardScriptingSystem removeUnreferencedPlayers. - self class loadDefaultForms. - Project removeAllButCurrent. - - #('Morphic-UserObjects' 'EToy-UserObjects' 'Morphic-Imported' 'UserObjects') - do: [:each | SystemOrganization removeSystemCategory: each]! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>cleanupForSqueakland (in category 'squeakland') ----- - cleanupForSqueakland - "Perform various image cleanups in preparation for making a Squeakland OLPC image." - "ReleaseBuilderSqueakland new cleanupForSqueakland" - - self - initialCleanup; - installPreferences; - finalStripping; - installReleaseSpecifics; - finalCleanup. - OLPCVirtualScreen virtualScreenExtent: nil. - Display isVirtualScreen ifFalse: [ - OLPCVirtualScreen install - ]. - Display newDepth: 32. - Project current displayDepth: 32. - Vocabulary initialize. - PartsBin rebuildIconsWithProgress. - ! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>finalCleanup (in category 'utilities') ----- - finalCleanup - "ReleaseBuilderSqueakland new finalCleanup" - - self class deleteAllWindows. - self class setDisplayExtent: 1200@900. - - "Smalltalk condenseChanges." - Preferences disable: #warnIfNoChangesFile. - Preferences disable: #warnIfChangesFileReadOnly. - Preferences disable: #warnIfNoSourcesFile. - Smalltalk zapAllOtherProjects. - Smalltalk forgetDoIts. - - DataStream initialize. - Behavior flushObsoleteSubclasses. - - "The pointer to currentMethod is not realy needed (anybody care to fix this) and often holds on to obsolete bindings" - MethodChangeRecord allInstancesDo: [:each | each noteNewMethod: nil]. - - self cleanUpEtoys. - SmalltalkImage current fixObsoleteReferences. - - self cleanUpChanges. - ChangeSet current clear. - ChangeSet current name: 'Unnamed1'. - - Smalltalk flushClassNameCache. - 3 timesRepeat: [ - Smalltalk garbageCollect. - Symbol condenseNewSymbols. - ].! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>finalStripping (in category 'utilities') ----- - finalStripping - "ReleaseBuilderSqueakland new finalStripping" - - #(#Helvetica #Palatino #Courier #ComicSansMS ) - do: [:n | TextConstants - removeKey: n - ifAbsent: []]. - QuickGuideMorph indexPage: nil. - Smalltalk - at: #Player - ifPresent: [:superCls | superCls - allSubclassesDo: [:cls | - cls isSystemDefined - ifFalse: [cls removeFromSystem]. - cls := nil]]. - Smalltalk garbageCollect. - SystemOrganization removeEmptyCategories. - ! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>fixObsoleteReferences (in category 'utilities') ----- - fixObsoleteReferences - "ReleaseBuilder new fixObsoleteReferences" - - | informee obsoleteBindings obsName realName realClass | - Preference allInstances do: [:each | - informee := each instVarNamed: #changeInformee. - ((informee isKindOf: Behavior) - and: [informee isObsolete]) - ifTrue: [ - Transcript show: each name; cr. - each instVarNamed: #changeInformee put: (Smalltalk at: (informee name copyReplaceAll: 'AnObsolete' with: '') asSymbol)]]. - - CompiledMethod allInstances do: [:method | - obsoleteBindings := method literals select: [:literal | - literal isVariableBinding - and: [literal value isBehavior] - and: [literal value isObsolete]]. - obsoleteBindings do: [:binding | - obsName := binding value name. - Transcript show: obsName; cr. - realName := obsName copyReplaceAll: 'AnObsolete' with: ''. - realClass := Smalltalk at: realName asSymbol ifAbsent: [UndefinedObject]. - binding isSpecialWriteBinding - ifTrue: [binding privateSetKey: binding key value: realClass] - ifFalse: [binding key: binding key value: realClass]]]. - - - Behavior flushObsoleteSubclasses. - Smalltalk garbageCollect; garbageCollect. - SystemNavigation default obsoleteBehaviors size > 0 - ifTrue: [SystemNavigation default inspect]! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>initialCleanup (in category 'utilities') ----- - initialCleanup - "ReleaseBuilder new initialCleanup" - - Browser initialize. - ChangeSorter removeChangeSetsNamedSuchThat: - [:cs| cs name ~= ChangeSet current name]. - - "Perform various image cleanups in preparation for making a Squeak gamma release candidate image." - - Undeclared removeUnreferencedKeys. - StandardScriptingSystem initialize. - Object reInitializeDependentsFields. - - "(Object classPool at: #DependentsFields) size > 1 ifTrue: [self error:'Still have dependents']." - "Undeclared isEmpty ifFalse: [self error:'Please clean out Undeclared']." - - Browser initialize. - ObjectScanner new. "clear ObjectScanner's class pool" - - self cleanUpChanges. - ChangeSet current clear. - ChangeSet current name: 'Unnamed1'. - Smalltalk garbageCollect. - - "Reinitialize DataStream; it may hold on to some zapped entitities" - DataStream initialize. - - Smalltalk garbageCollect. - ScheduledControllers := nil. - Smalltalk garbageCollect. - - SMSqueakMap default purge.! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>installPreferences (in category 'utilities') ----- - installPreferences - "Install desired preferences for the release." - "self new installPreferences" - | th | - Preferences cambridge. - Preferences allPreferenceObjects do: [:each | - each defaultValue: each preferenceValue]. - th := UserInterfaceTheme named: 'Squeak'. - MorphicProject defaultFill: (SolidFillStyle color: (Color r: 0.9 g: 0.9 b: 1)). - th set: #background for: #MorphicProject to: MorphicProject defaultFill. - UserInterfaceTheme current: th. - ActiveWorld fillStyle: MorphicProject defaultFill. - "ActiveWorld removeProperty: #hasCustomBackground." - - Preferences - disable: #alternativeWindowBoxesLook; - enable: #magicHalos; - enable: #mouseOverHalos; - enable: #roundedScrollBarLook; - enable: #roundedWindowCorners; - enable: #showAdvancedNavigatorButtons; - disable: #honorDesktopCmdKeys; - disable: #warnIfNoChangesFile; - disable: #warnIfNoSourcesFile; - enable: #unlimitedPaintArea; - enable: #fastDragWindowForMorphic; - enable: #noviceMode; - disable: #generalizedYellowButtonMenu; - disable: #showAdvancedNavigatorButtons; - disable: #signProjectFiles. - Morph preferredCornerRadius: 8. - PluggableButtonMorph roundedButtonCorners: true. - FillInTheBlankMorph roundedDialogCorners: true. - SystemWindow roundedWindowCorners: true. - Preferences restoreDefaultFontsForSqueakland. - Cursor useBiggerCursors: true. - TrashCanMorph - slideDismissalsToTrash: true; - preserveTrash: true. - SugarNavigatorBar - showHideButton: false; - showSugarNavigator: true. - - "Make fonts larger and the image thus more friendly" - "Preferences restoreDefaultFonts. - #(BalloonHelp Button Code HaloLabel List Menu System) do: [:fnt | - | standardFont | - standardFont := Preferences perform: ('standard', fnt, 'Font') asSymbol. - Preferences - perform: ('set', fnt, 'FontTo:') asSymbol - with: (standardFont textStyle fontOfPointSize: standardFont pointSize + 3)]. - Preferences setWindowTitleFontTo: (Preferences standardSystemFont textStyle fontOfPointSize: Preferences standardSystemFont pointSize)."! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>installReleaseSpecifics (in category 'utilities') ----- - installReleaseSpecifics - "ReleaseBuilderSqueakland new installReleaseSpecifics" - - ExternalSettings registerClient: ServerDirectory.! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>installVersionInfo (in category 'utilities') ----- - installVersionInfo - "ReleaseBuilderSqueakland new installVersionInfo" - - | newVersion | - " highestUpdate := SystemVersion current highestUpdate. - (self confirm: 'Reset highest update (' , highestUpdate printString , ')?') - ifTrue: [SystemVersion current highestUpdate: 0]. - " - newVersion := SystemVersion current version copyReplaceAll: 'Squeak' with: 'Etoys'. - (newVersion includesSubString: '5.1') ifTrue: ["this can go away if we release 6.0" - newVersion := newVersion copyReplaceAll: '5.1' with: '6.0'. - (newVersion includesSubString: 'beta') ifFalse: [ - newVersion := newVersion copyReplaceAll: '6.0' with: '6.0beta']]. - SystemVersion newVersion: newVersion. - "self inform: 'System version is now:', String cr, SystemVersion current asString"! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>makeSqueaklandRelease (in category 'squeakland') ----- - makeSqueaklandRelease - "self new makeSqueaklandRelease" - - self - makeSqueaklandReleasePhasePrepare; makeSqueaklandReleasePhaseStripping; makeSqueaklandReleasePhaseFinalSettings; makeSqueaklandReleasePhaseCleanup! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>makeSqueaklandReleasePhaseCleanup (in category 'squeakland') ----- - makeSqueaklandReleasePhaseCleanup - "ReleaseBuilder new makeSqueaklandReleasePhaseCleanup" - - Browser initialize. - ChangeSorter - removeChangeSetsNamedSuchThat: [:cs | cs name ~= ChangeSet current name]. - ChangeSet current clear. - ChangeSet current name: 'Unnamed1'. - Smalltalk garbageCollect. - "Reinitialize DataStream; it may hold on to some zapped entitities" - DataStream initialize. - "Remove existing player references" - References keys do: [:k | References removeKey: k]. - Smalltalk garbageCollect. - ScheduledControllers := nil. - Behavior flushObsoleteSubclasses. - Smalltalk - garbageCollect; - garbageCollect. - SystemNavigation default obsoleteBehaviors isEmpty - ifFalse: [self inform: 'Still have obsolete behaviors!!']. - - "Reinitialize DataStream; it may hold on to some zapped entitities" - DataStream initialize. - Smalltalk fixObsoleteReferences. - "Smalltalk abandonTempNames." - Smalltalk zapAllOtherProjects. - Smalltalk forgetDoIts. - Smalltalk flushClassNameCache. - 3 timesRepeat: - [Smalltalk garbageCollect. - Symbol compactSymbolTable]! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>makeSqueaklandReleasePhaseFinalSettings (in category 'squeakland') ----- - makeSqueaklandReleasePhaseFinalSettings - "ReleaseBuilder new makeSqueaklandReleasePhaseFinalSettings" - - | serverName serverURL serverDir updateServer highestUpdate newVersion | - - "ProjectLauncher splashMorph: (FileDirectory default readOnlyFileNamed: 'scripts\SqueaklandSplash.morph') fileInObjectAndCode." - - "Dump all morphs so we don't hold onto anything" - "World submorphsDo:[:m| m delete]." - - #( - (honorDesktopCmdKeys false) - (warnIfNoChangesFile false) - (warnIfNoSourcesFile false) - (showDirectionForSketches true) - (menuColorFromWorld false) - (unlimitedPaintArea true) - (useGlobalFlaps false) - (mvcProjectsAllowed false) - (projectViewsInWindows false) - (automaticKeyGeneration true) - (securityChecksEnabled true) - (showSecurityStatus false) - (startInUntrustedDirectory true) - (warnAboutInsecureContent false) - (promptForUpdateServer false) - (fastDragWindowForMorphic false) - - (externalServerDefsOnly true) - (expandedFormat false) - (allowCelesteTell false) - (eToyFriendly true) - (eToyLoginEnabled true) - (magicHalos true) - (mouseOverHalos true) - (biggerHandles false) - (selectiveHalos true) - (includeSoundControlInNavigator true) - (readDocumentAtStartup true) - (preserveTrash true) - (slideDismissalsToTrash true) - - ) do:[:spec| - Preferences setPreference: spec first toValue: spec last]. - "Workaround for bug" - Preferences enable: #readDocumentAtStartup. - - World color: (Color r: 0.9 g: 0.9 b: 1.0). - - "Clear all server entries" - ServerDirectory serverNames do: [:each | ServerDirectory removeServerNamed: each]. - SystemVersion current resetHighestUpdate. - - "Add the squeakalpha update stream" - serverName := 'Squeakalpha'. - serverURL := 'squeakalpha.org'. - serverDir := serverURL , '/'. - - updateServer := ServerDirectory new. - updateServer - server: serverURL; - directory: 'updates/'; - altUrl: serverDir; - user: 'sqland'; - password: nil. - Utilities updateUrlLists addFirst: {serverName. {serverDir. }.}. - - "Add the squeakland update stream" - serverName := 'Squeakland'. - serverURL := 'squeakland.org'. - serverDir := serverURL , '/'. - - updateServer := ServerDirectory new. - updateServer - server: serverURL; - directory: 'public_html/updates/'; - altUrl: serverDir. - Utilities updateUrlLists addFirst: {serverName. {serverDir. }.}. - - highestUpdate := SystemVersion current highestUpdate. - (self confirm: 'Reset highest update (' , highestUpdate printString , ')?') - ifTrue: [SystemVersion current highestUpdate: 0]. - - newVersion := FillInTheBlank request: 'New version designation:' initialAnswer: 'Squeakland 3.8.' , highestUpdate printString. - SystemVersion newVersion: newVersion. - (self confirm: SystemVersion current asString, ' - Is this the correct version designation? - If not, choose no, and fix it.') ifFalse: [^ self]. - ! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>makeSqueaklandReleasePhasePrepare (in category 'squeakland') ----- - makeSqueaklandReleasePhasePrepare - "ReleaseBuilder new makeSqueaklandReleasePhasePrepare" - - Undeclared removeUnreferencedKeys. - StandardScriptingSystem initialize. - Preferences initialize. - "(Object classPool at: #DependentsFields) size > 1 ifTrue: [self error:'Still have dependents']." - "Undeclared isEmpty ifFalse: [self error:'Please clean out Undeclared']." - - "Dump all projects" - Project allSubInstancesDo:[:prj| prj == Project current ifFalse:[Project deletingProject: prj]]. - - "Set new look so we don't need older fonts later" - "StandardScriptingSystem applyNewEToyLook." - - Browser initialize. - ScriptingSystem deletePrivateGraphics. - ChangeSorter removeChangeSetsNamedSuchThat: - [:cs| cs name ~= ChangeSet current name]. - ChangeSet current clear. - ChangeSet current name: 'Unnamed1'. - Smalltalk garbageCollect. - "Reinitialize DataStream; it may hold on to some zapped entitities" - DataStream initialize. - "Remove existing player references" - References keys do:[:k| References removeKey: k]. - - Smalltalk garbageCollect. - ScheduledControllers := nil. - Smalltalk garbageCollect. - ! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>makeSqueaklandReleasePhaseStripping (in category 'squeakland') ----- - makeSqueaklandReleasePhaseStripping - "ReleaseBuilder new makeSqueaklandReleasePhaseStripping" - - #(#Helvetica #Palatino #Courier #ComicSansMS ) - do: [:n | TextConstants - removeKey: n - ifAbsent: []]. - Smalltalk - at: #Player - ifPresent: [:superCls | superCls - allSubclassesDo: [:cls | - cls isSystemDefined - ifFalse: [cls removeFromSystem]. - cls := nil]]. - Smalltalk garbageCollect. - "Smalltalk discardFFI; discardSUnit; discardSpeech; yourself." - "discardMVC;" - SystemOrganization removeEmptyCategories. - Smalltalk garbageCollect. - ScheduledControllers := nil. - Behavior flushObsoleteSubclasses. - Smalltalk garbageCollect; garbageCollect. - DataStream initialize. - Smalltalk fixObsoleteReferences! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>prepareReleaseImage (in category 'utilities') ----- - prepareReleaseImage - "Perform various image cleanups in preparation for making a Squeak gamma release candidate image." - "ReleaseBuilder new prepareReleaseImage" - - Utilities authorInitialsPerSe ifNotEmpty: [ - (self confirm: 'Are you sure you want to prepare a release image? - This will perform several irreversible cleanups on this image.') - ifFalse: [^ self]]. - - self - initialCleanup; - installPreferences; - finalStripping; - installReleaseSpecifics; - finalCleanup; - installVersionInfo. - - DeferredTask := [ProjectLoading openFromImagePath: 'Home'].! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>setupServerDirectoryForSqueakland (in category 'squeakland') ----- - setupServerDirectoryForSqueakland - - | d | - " - ReleaseBuilderSqueakland new setupServerDirectoryForSqueakland - " - Utilities authorName: nil. - - d := (Smalltalk classNamed: 'DAVMultiUserServerDirectory') on: 'http://content.squeakland.org/showcase/'. - d altUrl: 'http://content.squeakland.org/showcase/'. - d moniker: 'My Squeakland'. - d acceptsUploads: true. - d useDefaultAccount: true. - d origDirectory: '/showcase'. - d setupSelector: #setupPersonalDirectory:. - ServerDirectory inImageServers at: 'My Squeakland' put: d. - - d := (Smalltalk classNamed: 'DAVMultiUserServerDirectory') on: 'http://content.squeakland.org/showcase/'. - d altUrl: 'http://content.squeakland.org/showcase/'. - d moniker: 'Squeakland Showcase'. - d user: 'etoys'. - d useDefaultAccount: true. - d acceptsUploads: false. - d instVarNamed: 'passwordHolder' put: 'kaeuqs'. - ServerDirectory inImageServers at: 'Squeakland Showcase' put: d. - EtoysUtilities loggedIn: false. - - ! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>setupUpdateStreamForSqueakland (in category 'squeakland') ----- - setupUpdateStreamForSqueakland - - | base url d | - base := 'etoys.squeak.org/'. - url := 'http://', base, 'updates'. - d := (Smalltalk classNamed: 'DAVMultiUserServerDirectory') on: url. - d altUrl: url. - d moniker: 'Etoys Updates'. - d groupName: 'etoys'. - Utilities classPool at: #UpdateUrlLists put: nil. - ServerDirectory inImageServers keysDo: [:k | ServerDirectory inImageServers removeKey: k]. - ServerDirectory inImageServers at: d moniker put: d. - Utilities updateUrlLists add: {d moniker. {base}}. - - "SystemVersion newVersion: 'etoys4.1'." - "SystemVersion current resetHighestUpdate." - ! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>testPrerequired (in category 'squeakland') ----- - testPrerequired - | directory entries projectNames | - projectNames := #('Gallery' 'Tutorials' 'Home'). - directory := FileDirectory on: Smalltalk imagePath. - entries := FileList2 projectOnlySelectionMethod: directory entries. - projectNames - do: [:projectName | (entries - anySatisfy: [:each | (Project parseProjectFileName: each first) first = projectName]) - ifFalse: [^ self error: projectName , ' is not found']]. - self checkCopyright. - "Test if the screen resolution is correct" - DisplayScreen actualScreenSize = (800 @ 600) - ifFalse: [^ self error: 'The Etoys window be 800 @ 600']. - Display extent = (1200 @ 900) - ifFalse: [^ self error: 'The virtual screen extent should be 1200 @ 900']. - ! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>updateAll (in category 'utilities') ----- - updateAll - | logFile logWindow | - logWindow := Transcript openLabel: self name. - Utilities updateFromServer. - Transcript cr; show: '-----'. - Transcript cr; show: SmalltalkImage current systemInformationString. - logFile := FileDirectory default forceNewFileNamed: self name , '.log'. - [logFile nextPutAll: logWindow contents text] - ensure: [logFile close]! Item was removed: - ----- Method: ReleaseBuilderSqueakland>>updateGettext (in category 'squeakland') ----- - updateGettext - "ReleaseBuilderSqueakland new updateGettext" - "Export gettext template and import all translation in po/" - GetTextExporter exportTemplate. - GetTextImporter importAll.! Item was removed: - ----- Method: SystemDictionary>>makeSqueaklandReleasePhaseCleanup (in category '*Etoys-Squeakland-squeakland') ----- - makeSqueaklandReleasePhaseCleanup - "Smalltalk makeSqueaklandReleasePhaseCleanup" - - Browser initialize. - ChangeSorter removeChangeSetsNamedSuchThat: - [:cs| cs name ~= ChangeSet current name]. - ChangeSet current clear. - ChangeSet current name: 'Unnamed' translated , '1'. - Smalltalk garbageCollect. - "Reinitialize DataStream; it may hold on to some zapped entitities" - DataStream initialize. - "Remove existing player references" - References keys do:[:k| References removeKey: k]. - - Smalltalk garbageCollect. - ScheduledControllers := nil. - Behavior flushObsoleteSubclasses. - Smalltalk garbageCollect; garbageCollect. - Smalltalk obsoleteBehaviors isEmpty ifFalse:[self error:'Still have obsolete behaviors']. - - "Reinitialize DataStream; it may hold on to some zapped entitities" - DataStream initialize. - Smalltalk fixObsoleteReferences. - Smalltalk abandonTempNames. - Smalltalk zapAllOtherProjects. - Smalltalk forgetDoIts. - Smalltalk flushClassNameCache. - 3 timesRepeat: [ - Smalltalk garbageCollect. - Symbol compactSymbolTable. - ]. - ! From commits at source.squeak.org Tue Aug 30 15:08:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 15:08:16 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-tfel.193.mcz Message-ID: Tim Felgentreff uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-tfel.193.mcz ==================== Summary ==================== Name: MorphicExtras-tfel.193 Author: tfel Time: 30 August 2016, 5:07:14.81504 pm UUID: 0ebc958c-31d5-c34b-9216-6612162cac96 Ancestors: MorphicExtras-tfel.192 fix deprecated method =============== Diff against MorphicExtras-tfel.192 =============== Item was changed: ----- Method: BooklikeMorph>>makePageControlsFrom: (in category 'page controls') ----- makePageControlsFrom: controlSpecs "From the controlSpecs, create a set of page control and return them -- this method does *not* add the controls to the receiver." | c col row | c := (color saturation > 0.1) ifTrue: [color slightlyLighter] ifFalse: [color slightlyDarker]. col := AlignmentMorph newColumn. col color: c; borderWidth: 0; layoutInset: 0. col hResizing: #spaceFill; vResizing: #shrinkWrap; extent: 5@5. row := AlignmentMorph newRow. row color: c; borderWidth: 0; layoutInset: 0. row hResizing: #spaceFill; vResizing: #shrinkWrap; extent: 5@5. controlSpecs do: [:spec | | lastGuy b | spec == #showDescription ifTrue: [row addMorphBack: self makeDescriptionViewer]. spec == #pageNumber ifTrue: [row addMorphBack: self makePageNumberItem]. spec == #spacer ifTrue: [row addTransparentSpacerOfSize: (10 @ 0)]. spec == #variableSpacer ifTrue: [ row addMorphBack: AlignmentMorph newVariableTransparentSpacer]. spec class == Array ifTrue: [ spec first isSymbol ifTrue: [b := ThreePhaseButtonMorph labelSymbol: spec first] ifFalse: [b := SimpleButtonMorph new borderWidth: 2; borderColor: Color black; color: Color veryLightGray. b label: spec first font: Preferences standardMenuFont]. b target: self; actionSelector: spec second; setBalloonText: spec third. (spec atPin: 4) = #border ifTrue: [b actWhen: #buttonDown] ifFalse: [b borderWidth: 0]. "default is none" row addMorphBack: b. + (((lastGuy := spec last asLowercase) includesSubstring: 'menu') or: + [lastGuy includesSubstring: 'designations']) - (((lastGuy := spec last asLowercase) includesSubString: 'menu') or: - [lastGuy includesSubString: 'designations']) ifTrue: [b actWhen: #buttonDown]]]. "pop up menu on mouseDown" col addMorphBack: row. ^ col! From commits at source.squeak.org Tue Aug 30 15:13:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 15:13:10 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.215.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.215.mcz ==================== Summary ==================== Name: EToys-tfel.215 Author: tfel Time: 30 August 2016, 5:12:02.14204 pm UUID: a6ef1339-ed42-d14d-9046-7c8dded0b72d Ancestors: EToys-tfel.214 - fix deprecation warnings - Components and their subclasses are not uniclasses - sugarnavbar should re-initialize when the theme changes =============== Diff against EToys-tfel.214 =============== Item was added: + ----- Method: Component class>>isUniClass (in category 'other') ----- + isUniClass + "UnscriptedPlayer reimplements to false" + + ^ false! Item was changed: ----- Method: EtoysTheme class>>create (in category 'instance creation') ----- create + "doIt: [self create apply.]" - "doIt: [self createDark apply.]" | themeName | themeName := 'Etoys'. ^ (self named: themeName) in: [:theme | theme merge: (self named: 'Squeak') overwrite: true. theme name: themeName. theme set: #background for: #MorphicProject to: (SolidFillStyle color: (Color r: 0.9 g: 0.9 b: 1)). - theme set: #standardListFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); set: #standardFlapFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: TextEmphasis bold emphasisCode); set: #eToysButtonFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); set: #eToysFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: TextEmphasis bold emphasisCode); set: #eToysCodeFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); set: #eToysTitleFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 32 emphasis: 0); + set: #paintBoxButtonFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 12 emphasis: 0); - set: #paintBoxButtonFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 9 emphasis: 0); set: #standardMenuFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #standardButtonFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); set: #windowTitleFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); set: #balloonHelpFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); set: #connectorsLabelFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); set: #standardCodeFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); + set: #standardDefaultTextFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0); set: #standardSystemFont to: (TTCFont familyName: 'BitstreamVeraSans' pointSize: 15 emphasis: 0). theme]! Item was changed: ----- Method: KedamaMorph>>makePrototypeOfExampler:color: (in category 'turtles') ----- makePrototypeOfExampler: examplerPlayer color: cPixel | array inst info ind | array := examplerPlayer turtles. info := array info. array size > 0 ifTrue: [ inst := array makePrototypeFromFirstInstance. cPixel ifNotNil: [inst at: (info at: #color) put: cPixel]. ^ inst. ]. inst := Array new: array instSize. info associationsDo: [:assoc | ind := assoc value. (examplerPlayer turtles types at: ind) = #Boolean ifTrue: [ ind = 7 ifTrue: [inst at: ind put: 1] ifFalse: [ + inst at: ind put: ((examplerPlayer perform: (assoc key asString asGetterSelector)) ifTrue: [1] ifFalse: [0]). - inst at: ind put: ((examplerPlayer perform: (Utilities getterSelectorFor: assoc key)) ifTrue: [1] ifFalse: [0]). ] ] ifFalse: [ + inst at: ind put: (examplerPlayer perform: (assoc key asString asGetterSelector)). - inst at: ind put: (examplerPlayer perform: (Utilities getterSelectorFor: assoc key)). ]. ]. cPixel ifNotNil: [inst at: (info at: #color) put: cPixel] ifNil: [inst at: (info at: #color) put: ((examplerPlayer getColor pixelValueForDepth: 32) bitAnd: 16rFFFFFF)]. ^ inst. ! Item was added: + ----- Method: Morph>>isButton (in category '*Etoys-Squeakland-testing') ----- + isButton + + ^ false! Item was changed: ----- Method: PreferencesPanel>>findPreferencesMatching: (in category 'initialization') ----- findPreferencesMatching: incomingTextOrString "find all preferences matching incomingTextOrString" | result aList aPalette controlPage | result := incomingTextOrString asString asLowercase. result := result asLowercase withBlanksTrimmed. result isEmptyOrNil ifTrue: [^ self]. + aList := Preferences allPreferences select: - aList := Preferences allPreferenceObjects select: [:aPreference | (aPreference name includesSubstring: result caseSensitive: false) or: [aPreference helpString includesSubstring: result caseSensitive: false]]. aPalette := (self containingWindow ifNil: [^ self]) findDeeplyA: TabbedPalette. aPalette ifNil: [^ self]. aPalette selectTabNamed: 'search results'. aPalette currentPage ifNil: [^ self]. "bkwd compat" controlPage := aPalette currentPage. controlPage removeAllMorphs. controlPage addMorph: (StringMorph contents: ('Preferences matching "', self searchString, '"') font: Preferences standardEToysButtonFont). aList := aList asSortedCollection: [:a :b | a name < b name]. aList do: [:aPreference | | button | button := aPreference representativeButtonWithColor: Color white inPanel: self. button ifNotNil: [controlPage addMorphBack: button]]. aPalette world startSteppingSubmorphsOf: aPalette! Item was changed: ----- Method: ReleaseBuilderSqueakland class>>prepareEnvironment (in category 'preparing') ----- prepareEnvironment | directory entries projectNames | super prepareEnvironment. projectNames := #('Gallery' 'Tutorials' 'Home'). directory := FileDirectory on: Smalltalk imagePath. entries := FileList2 projectOnlySelectionMethod: directory entries. projectNames do: [:projectName | (entries anySatisfy: [:each | (Project parseProjectFileName: each first) first = projectName]) + ifFalse: [self inform: projectName , ' is not found']]. - ifFalse: [^ self error: projectName , ' is not found']]. DeferredTask := [ProjectLoading openFromImagePath: 'Home'].! Item was changed: ----- Method: ReleaseBuilderSqueakland class>>setPreferences (in category 'scripts') ----- setPreferences super setPreferences. Preferences cambridge. + Preferences allPreferences do: [:each | - Preferences allPreferenceObjects do: [:each | each defaultValue: each preferenceValue]. Preferences disable: #alternativeWindowBoxesLook; enable: #magicHalos; enable: #mouseOverHalos; enable: #roundedScrollBarLook; enable: #roundedWindowCorners; enable: #showAdvancedNavigatorButtons; disable: #honorDesktopCmdKeys; disable: #warnIfNoChangesFile; disable: #warnIfNoSourcesFile; enable: #unlimitedPaintArea; enable: #fastDragWindowForMorphic; enable: #noviceMode; disable: #generalizedYellowButtonMenu; disable: #showAdvancedNavigatorButtons; disable: #signProjectFiles; disable: #warnIfNoChangesFile; disable: #warnIfChangesFileReadOnly; disable: #warnIfNoSourcesFile. Morph preferredCornerRadius: 8. PluggableButtonMorph roundedButtonCorners: true. FillInTheBlankMorph roundedDialogCorners: true. SystemWindow roundedWindowCorners: true. - Preferences restoreDefaultFontsForSqueakland. Cursor useBiggerCursors: true. TrashCanMorph slideDismissalsToTrash: true; preserveTrash: true. SugarNavigatorBar showHideButton: false; showSugarNavigator: true.! Item was added: + ----- Method: SimpleButtonMorph>>isButton (in category '*Etoys-Squeakland-testing') ----- + isButton + + ^ true! Item was added: + ----- Method: SugarNavigatorBar class>>themeProperties (in category 'nil') ----- + themeProperties + + ^ {}! Item was added: + ----- Method: SugarNavigatorBar>>applyUserInterfaceTheme (in category 'updating') ----- + applyUserInterfaceTheme + + self class showSugarNavigator: self class showSugarNavigator.! Item was added: + ----- Method: SugarNavigatorBar>>canApplyUserInterfaceTheme (in category 'nil') ----- + canApplyUserInterfaceTheme + + ^ true! Item was removed: - ----- Method: SystemDictionary>>makeSqueaklandReleasePhaseFinalSettings (in category '*Etoys-Squeakland-squeakland') ----- - makeSqueaklandReleasePhaseFinalSettings - "Smalltalk makeSqueaklandReleasePhaseFinalSettings" - - | serverName serverURL serverDir updateServer highestUpdate newVersion | - - ProjectLauncher splashMorph: ((FileDirectory default directoryNamed: 'scripts' )readOnlyFileNamed: 'SqueaklandSplash.morph') fileInObjectAndCode. - - "Dump all morphs so we don't hold onto anything" - World submorphsDo:[:m| m delete]. - - #( - (honorDesktopCmdKeys false) - (warnIfNoChangesFile false) - (warnIfNoSourcesFile false) - (showDirectionForSketches true) - (menuColorFromWorld false) - (unlimitedPaintArea true) - (useGlobalFlaps false) - (mvcProjectsAllowed false) - (projectViewsInWindows false) - (automaticKeyGeneration true) - (securityChecksEnabled true) - (showSecurityStatus false) - (startInUntrustedDirectory true) - (warnAboutInsecureContent false) - (promptForUpdateServer false) - (fastDragWindowForMorphic false) - - (externalServerDefsOnly true) - (expandedFormat false) - (allowCelesteTell false) - (eToyFriendly true) - (eToyLoginEnabled true) - (magicHalos true) - (mouseOverHalos true) - (biggerHandles false) - (selectiveHalos true) - (includeSoundControlInNavigator true) - (readDocumentAtStartup true) - (preserveTrash true) - (slideDismissalsToTrash true) - - ) do:[:spec| - Preferences setPreference: spec first toValue: spec last]. - "Workaround for bug" - Preferences enable: #readDocumentAtStartup. - - World color: (Color r: 0.9 g: 0.9 b: 1.0). - - "Clear all server entries" - ServerDirectory serverNames do: [:each | ServerDirectory removeServerNamed: each]. - SystemVersion current resetHighestUpdate. - - "Add the squeakalpha update stream" - serverName := 'Squeakalpha'. - serverURL := 'squeakalpha.org'. - serverDir := serverURL , '/'. - - updateServer := ServerDirectory new. - updateServer - server: serverURL; - directory: 'updates/'; - altUrl: serverDir; - user: 'sqland'; - password: nil. - Utilities updateUrlLists addFirst: {serverName. {serverDir. }.}. - - "Add the squeakland update stream" - serverName := 'Squeakland'. - serverURL := 'squeakland.org'. - serverDir := serverURL , '/'. - - updateServer := ServerDirectory new. - updateServer - server: serverURL; - directory: 'public_html/updates/'; - altUrl: serverDir. - Utilities updateUrlLists addFirst: {serverName. {serverDir. }.}. - - highestUpdate := SystemVersion current highestUpdate. - (self confirm: 'Reset highest update (' , highestUpdate printString , ')?') - ifTrue: [SystemVersion current highestUpdate: 0]. - - newVersion := FillInTheBlank request: 'New version designation:' initialAnswer: 'Squeakland 3.8.' , highestUpdate printString. - SystemVersion newVersion: newVersion. - (self confirm: self version , ' - Is this the correct version designation? - If not, choose no, and fix it.') ifFalse: [^ self]. - ! From commits at source.squeak.org Tue Aug 30 15:43:01 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 15:43:03 2016 Subject: [squeak-dev] The Trunk: System-tfel.912.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.912.mcz ==================== Summary ==================== Name: System-tfel.912 Author: tfel Time: 30 August 2016, 5:41:54.643349 pm UUID: 584b46ac-71c6-604e-8f4b-1de61ca8c0a8 Ancestors: System-tfel.911 Fix setSystemFontTo: to correctly set the default text style =============== Diff against System-tfel.911 =============== Item was changed: ----- Method: Preferences class>>setSystemFontTo: (in category 'prefs - fonts') ----- setSystemFontTo: aFont "Establish the default text font and style" | aStyle newDefaultStyle | aFont ifNil: [^ self]. aStyle := aFont textStyle ifNil: [^ self]. + newDefaultStyle := TextStyle fontArray: {aFont}. - newDefaultStyle := aStyle copy. - newDefaultStyle defaultFontIndex: (aStyle fontIndexOf: aFont). UserInterfaceTheme current set: #standardSystemFont to: aFont; apply. TextStyle setDefault: newDefaultStyle. Flaps replaceToolsFlap. ScriptingSystem resetStandardPartsBin. ! From commits at source.squeak.org Tue Aug 30 15:47:23 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 15:47:25 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.216.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.216.mcz ==================== Summary ==================== Name: EToys-tfel.216 Author: tfel Time: 30 August 2016, 5:45:56.624349 pm UUID: abd6125f-13ab-8849-9ca9-ecbfe7dc6f6d Ancestors: EToys-tfel.215, EToys-jl.210 merge =============== Diff against EToys-tfel.215 =============== Item was changed: ----- Method: ScriptInstantiation>>updateAllStatusMorphs (in category 'status control') ----- updateAllStatusMorphs "Update all status morphs bound to the receiver. Done with a sledge-hammer at present." + | w | + w := self currentWorld. + + (w hasProperty: #foo) ifFalse: [ + w setProperty: #updateStatusMorph toValue: true. + Project current addDeferredUIMessage: [ + (w hasProperty: #foo) ifTrue: [ + w removeProperty: #updateStatusMorph. + (w allMorphs select: [:m | (m isKindOf: ScriptStatusControl) and: + [m scriptInstantiation == self]]) do: + [:aStatusControl | self updateStatusMorph: aStatusControl] . + ] + ] + ] + + ! - (self currentWorld allMorphs select: [:m | (m isKindOf: ScriptStatusControl) and: - [m scriptInstantiation == self]]) do: - [:aStatusControl | self updateStatusMorph: aStatusControl]! From commits at source.squeak.org Tue Aug 30 15:49:26 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 15:49:30 2016 Subject: [squeak-dev] The Trunk: Morphic-tfel.1302.mcz Message-ID: Tim Felgentreff uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tfel.1302.mcz ==================== Summary ==================== Name: Morphic-tfel.1302 Author: tfel Time: 30 August 2016, 5:47:28.089349 pm UUID: 654a8863-1a78-5d41-b7b6-17b545bda287 Ancestors: Morphic-mt.1301, Morphic-jl.1291 merge =============== Diff against Morphic-mt.1301 =============== Item was changed: ----- Method: Morph>>usableSiblingInstance (in category 'copying') ----- usableSiblingInstance "Return another similar morph whose Player is of the same class as mine. Do not open it in the world." + | aName newPlayer newMorph topRenderer counter world | - | aName usedNames newPlayer newMorph topRenderer | (topRenderer := self topRendererOrSelf) == self ifFalse: [^topRenderer usableSiblingInstance]. self assuredPlayer assureUniClass. newMorph := self veryDeepCopySibling. newPlayer := newMorph player. newPlayer resetCostumeList. (aName := self knownName) isNil ifTrue: [self player notNil ifTrue: [aName := newMorph innocuousName]]. "Force a difference here" + + aName := aName stemAndNumericSuffix at: 1. + + world := self world ifNil: [Project current world]. + (world hasProperty: #nameCounter) ifFalse: [ + (world setProperty: #nameCounter toValue: Dictionary new) + ]. + + counter := (world valueOfProperty: #nameCounter) at: aName ifAbsent: [1]. + newMorph setNameTo: aName, counter. + (world valueOfProperty: #nameCounter) at: aName put: counter + 1. + - aName notNil - ifTrue: - [usedNames := (self world ifNil: [OrderedCollection new] - ifNotNil: [self world allKnownNames]) copyWith: aName. - newMorph setNameTo: (Utilities keyLike: aName - satisfying: [:f | (usedNames includes: f) not])]. newMorph privateOwner: nil. newPlayer assureEventHandlerRepresentsStatus. self presenter flushPlayerListCache. ^newMorph! Item was changed: ----- Method: TransformationMorph>>removeFlexShell (in category 'menu') ----- removeFlexShell "Remove the shell used to make a morph rotatable and scalable." | oldHalo unflexed pensDown myWorld refPos aPosition | + self isInWorld ifFalse: [^self]. refPos := self referencePosition. myWorld := self world. oldHalo := self halo. submorphs isEmpty ifTrue: [^ self delete]. aPosition := (owner submorphIndexOf: self) ifNil: [1]. unflexed := self firstSubmorph. pensDown := OrderedCollection new. self allMorphsDo: "Note any pens down -- must not be down during the move" [:m | | player | ((player := m player) notNil and: [player getPenDown]) ifTrue: [m == player costume ifTrue: [pensDown add: player. player setPenDown: false]]]. self submorphs do: [:m | m position: self center - (m extent // 2). owner addMorph: m asElementNumber: aPosition]. unflexed absorbStateFromRenderer: self. pensDown do: [:p | p setPenDown: true]. oldHalo ifNotNil: [oldHalo setTarget: unflexed]. myWorld ifNotNil: [myWorld startSteppingSubmorphsOf: unflexed]. self delete. unflexed referencePosition: refPos. ^ unflexed! From commits at source.squeak.org Tue Aug 30 16:52:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 16:52:28 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.217.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.217.mcz ==================== Summary ==================== Name: EToys-tfel.217 Author: tfel Time: 30 August 2016, 6:51:11.622793 pm UUID: e2a60eff-eb01-5845-8e80-27de2788ffd3 Ancestors: EToys-tfel.216 - no deprecation warnings - override compilation on Player to work around decompiler bugs =============== Diff against EToys-tfel.216 =============== Item was added: + ----- Method: Player class>>compile:classified:withStamp:notifying:logSource:for: (in category '*Etoys-Squeakland-private') ----- + compile: text classified: category withStamp: changeStamp notifying: requestor logSource: logSource for: anInstance + | methodAndNode trailer | + trailer := self defaultMethodTrailer. + trailer sourceCode: text. + methodAndNode := self basicCompile: text asString notifying: requestor + trailer: trailer ifFail: [^nil] for: anInstance. + logSource ifTrue: [ + self logMethodSource: text forMethodWithNode: methodAndNode + inCategory: category withStamp: changeStamp notifying: requestor. + ]. + self addAndClassifySelector: methodAndNode selector withMethod: methodAndNode + method inProtocol: category notifying: requestor. + self theNonMetaClass noteCompilationOf: methodAndNode selector meta: self isMeta. + ^ methodAndNode selector! Item was changed: ----- Method: ReleaseBuilderSqueakland class>>setPreferences (in category 'scripts') ----- setPreferences super setPreferences. Preferences cambridge. Preferences allPreferences do: [:each | each defaultValue: each preferenceValue]. Preferences disable: #alternativeWindowBoxesLook; enable: #magicHalos; enable: #mouseOverHalos; enable: #roundedScrollBarLook; enable: #roundedWindowCorners; enable: #showAdvancedNavigatorButtons; disable: #honorDesktopCmdKeys; disable: #warnIfNoChangesFile; disable: #warnIfNoSourcesFile; enable: #unlimitedPaintArea; enable: #fastDragWindowForMorphic; enable: #noviceMode; disable: #generalizedYellowButtonMenu; disable: #showAdvancedNavigatorButtons; disable: #signProjectFiles; disable: #warnIfNoChangesFile; disable: #warnIfChangesFileReadOnly; disable: #warnIfNoSourcesFile. Morph preferredCornerRadius: 8. PluggableButtonMorph roundedButtonCorners: true. FillInTheBlankMorph roundedDialogCorners: true. SystemWindow roundedWindowCorners: true. Cursor useBiggerCursors: true. TrashCanMorph slideDismissalsToTrash: true; preserveTrash: true. SugarNavigatorBar showHideButton: false; + showSugarNavigator: true. + Deprecation showDeprecationWarnings: false.! - showSugarNavigator: true.! From commits at source.squeak.org Tue Aug 30 16:57:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 16:57:03 2016 Subject: [squeak-dev] The Trunk: Morphic-tfel.1303.mcz Message-ID: Tim Felgentreff uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tfel.1303.mcz ==================== Summary ==================== Name: Morphic-tfel.1303 Author: tfel Time: 30 August 2016, 6:55:39.577793 pm UUID: 95624237-35b6-0440-b7a5-fba1489427d7 Ancestors: Morphic-tfel.1302 unhibernate FlapTabs when switching into a project in case they were hibernated =============== Diff against Morphic-tfel.1302 =============== Item was changed: ----- Method: PasteUpMorph>>installFlaps (in category 'world state') ----- installFlaps "Get flaps installed within the bounds of the receiver" | localFlapTabs | Project current assureFlapIntegrity. self addGlobalFlaps. localFlapTabs := self localFlapTabs. localFlapTabs do: [:each | each visible: false]. Preferences eToyFriendly ifTrue: [ ProgressInitiationException display: 'Building Viewers...' translated during: [:bar | localFlapTabs keysAndValuesDo: [:i :each | each adaptToWorld. each visible: true. + each unhibernate. self displayWorld. bar value: i / self localFlapTabs size]]. ] ifFalse: [ localFlapTabs keysAndValuesDo: [:i :each | each adaptToWorld. each visible: true. self displayWorld]]. self assureFlapTabsFitOnScreen. self bringTopmostsToFront! From commits at source.squeak.org Tue Aug 30 16:58:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 16:58:05 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-tfel.194.mcz Message-ID: Tim Felgentreff uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-tfel.194.mcz ==================== Summary ==================== Name: MorphicExtras-tfel.194 Author: tfel Time: 30 August 2016, 6:57:05.056793 pm UUID: 16e1e153-f298-0c42-84b0-11e192cec7aa Ancestors: MorphicExtras-tfel.193 fix test in ViewerFlapTab>>unhibernate to actually test a boolean =============== Diff against MorphicExtras-tfel.193 =============== Item was changed: ----- Method: ViewerFlapTab>>unhibernate (in category 'transition') ----- unhibernate "recreate my viewer" | wasShowing viewer | + referent ifNotNil: [referent isViewer ifTrue: [^self]]. - referent ifNotNil: [(referent isViewer) ifNotNil: [^self]]. wasShowing := flapShowing. "guard against not-quite-player-players" viewer := ((scriptedPlayer respondsTo: #costume) and: [scriptedPlayer costume isMorph]) ifTrue: [self presenter viewMorph: scriptedPlayer costume] ifFalse: [self presenter viewObjectDirectly: scriptedPlayer]. wasShowing ifFalse: [self hideFlap]. ^viewer! From commits at source.squeak.org Tue Aug 30 17:04:54 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:04:57 2016 Subject: [squeak-dev] The Trunk: Tools-tfel.720.mcz Message-ID: Tim Felgentreff uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-tfel.720.mcz ==================== Summary ==================== Name: Tools-tfel.720 Author: tfel Time: 21 August 2016, 4:50:38.603391 pm UUID: 470a43f5-8185-4b55-b196-1863ed506913 Ancestors: Tools-mt.719, Tools-tfel.716 merge trunk =============== Diff against Tools-mt.719 =============== Item was changed: ----- Method: ArchiveViewer class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Zip Tool' translatedNoop + categories: #() + documentation: 'A viewer and editor for Zip archive files' translatedNoop - ^ self partName: 'Zip Tool' - categories: #(Tools) - documentation: 'A viewer and editor for Zip archive files' ! Item was changed: ----- Method: ArchiveViewer class>>serviceAddToNewZip (in category 'file list services') ----- serviceAddToNewZip "Answer a service for adding the file to a new zip" ^ FileModifyingSimpleServiceEntry provider: self + label: 'add file to new zip' translatedNoop - label: 'add file to new zip' selector: #addFileToNewZip: + description: 'add file to new zip' translatedNoop + buttonLabel: 'to new zip' translatedNoop! - description: 'add file to new zip' - buttonLabel: 'to new zip'! Item was changed: ----- Method: ArchiveViewer class>>serviceExtractAll (in category 'file list services') ----- serviceExtractAll "Answer a service for opening in a zip viewer" ^ FileModifyingSimpleServiceEntry provider: self + label: 'extract all to...' translatedNoop - label: 'extract all to...' selector: #extractAllFrom: + description: 'extract all files to a user-specified directory' translatedNoop + buttonLabel: 'extract all' translatedNoop! - description: 'extract all files to a user-specified directory' - buttonLabel: 'extract all'! Item was changed: ----- Method: ArchiveViewer class>>serviceOpenInZipViewer (in category 'class initialization') ----- serviceOpenInZipViewer "Answer a service for opening in a zip viewer" ^ SimpleServiceEntry provider: self + label: 'open in zip viewer' translatedNoop - label: 'open in zip viewer' selector: #openOn: + description: 'open in zip viewer' translatedNoop + buttonLabel: 'open zip' translatedNoop! - description: 'open in zip viewer' - buttonLabel: 'open zip'! Item was changed: ----- Method: ArchiveViewer>>writePrependingFile (in category 'archive operations') ----- writePrependingFile | result name prependedName | self canSaveArchive ifFalse: [ ^self ]. + result _ (StandardFileMenu newFileMenu: FileDirectory default) + startUpWithCaption: 'Destination Zip File Name:' translated. - result := (StandardFileMenu newFileMenu: FileDirectory default) - startUpWithCaption: 'Destination Zip File Name:'. result ifNil: [ ^self ]. + name _ result directory fullNameFor: result name. - name := result directory fullNameFor: result name. (archive canWriteToFileNamed: name) ifFalse: [ self inform: name, ' is used by one or more members in your archive, and cannot be overwritten. + Try writing to another file name' translated. - Try writing to another file name'. ^self ]. + result _ (StandardFileMenu oldFileMenu: FileDirectory default) + startUpWithCaption: 'Prepended File:' translated. - result := (StandardFileMenu oldFileMenu: FileDirectory default) - startUpWithCaption: 'Prepended File:'. result ifNil: [ ^self ]. + prependedName _ result directory fullNameFor: result name. - prependedName := result directory fullNameFor: result name. [ archive writeToFileNamed: name prependingFileNamed: prependedName ] on: Error do: [ :ex | self inform: ex description. ]. self changed: #memberList "in case CRC's and compressed sizes got set"! Item was changed: ----- Method: Browser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Browser. #prototypicalToolWindow. 'Browser' translatedNoop. 'A Browser is a tool that allows you to view all the code of all the classes in the system' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(#Browser #prototypicalToolWindow 'Browser' 'A Browser is a tool that allows you to view all the code of all the classes in the system' ) forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeList class>>serviceBrowseChangeFile (in category 'fileIn/Out') ----- serviceBrowseChangeFile "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseStream: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop) - description: 'open a changelist tool on this file' - buttonLabel: 'changes') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: ChangeList class>>serviceBrowseCompressedChangeFile (in category 'fileIn/Out') ----- serviceBrowseCompressedChangeFile "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseCompressedChangesFile: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop! - description: 'open a changelist tool on this file' - buttonLabel: 'changes'! Item was changed: ----- Method: ChangeList class>>serviceBrowseDotChangesFile (in category 'fileIn/Out') ----- serviceBrowseDotChangesFile "Answer a service for opening a changelist browser on the tail end of a .changes file" ^ SimpleServiceEntry provider: self + label: 'recent changes in file' translatedNoop - label: 'recent changes in file' selector: #browseRecentLogOnPath: + description: 'open a changelist tool on recent changes in file' translatedNoop + buttonLabel: 'recent changes' translatedNoop! - description: 'open a changelist tool on recent changes in file' - buttonLabel: 'recent changes'! Item was changed: ----- Method: ChangeSorter class>>registerInFlapsRegistry (in category 'deprecated') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ChangeSorter. #prototypicalToolWindow. 'Change Set' translatedNoop. 'A tool that allows you to view and manipulate all the code changes in a single change set' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ChangeSorter prototypicalToolWindow 'Change Set' 'A tool that allows you to view and manipulate all the code changes in a single change set') forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeSorter>>checkThatSidesDiffer: (in category 'changeSet menu') ----- checkThatSidesDiffer: escapeBlock "If the change sets on both sides of the dual sorter are the same, put up an error message and escape via escapeBlock, else proceed happily" + parent ifNil: [^ escapeBlock value]. "Not relevant unless in dual change sorter." + (myChangeSet == (parent other: self) changeSet) ifTrue: [self inform: 'This command requires that the change sets selected on the two sides of the change sorter *not* + be the same.' translated. - be the same.'. ^ escapeBlock value] ! Item was changed: ----- Method: Debugger>>preDebugMessageString (in category 'toolbuilder') ----- preDebugMessageString + ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!' translated].! - ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!'].! Item was changed: ----- Method: DualChangeSorter class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#DualChangeSorter, #prototypicalToolWindow. 'Change Sorter' translatedNoop. 'Shows two change sets side by side' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(DualChangeSorter prototypicalToolWindow 'Change Sorter' 'Shows two change sets side by side') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCode (in category 'file list services') ----- serviceBrowseCode "Answer the service of opening a file-contents browser" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCodeFiles (in category 'file list services') ----- serviceBrowseCodeFiles ^ (SimpleServiceEntry provider: self + label: 'browse code files' translatedNoop - label: 'browse code files' selector: #selectAndBrowseFile:) argumentGetter: [ :fileList | fileList ]; yourself! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCompressedCode (in category 'file list services') ----- serviceBrowseCompressedCode "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseCompressedCodeStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileList class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#FileList . #prototypicalToolWindow, 'File List' translatedNoop. 'A File List is a tool for browsing folders and files on disks and on ftp types.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(FileList prototypicalToolWindow 'File List' 'A File List is a tool for browsing folders and files on disks and on ftp types.') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileList>>deleteDirectory (in category 'volume list and pattern') ----- deleteDirectory "Remove the currently selected directory" | localDirName | + directory entries size = 0 ifFalse:[^self inform:'Directory must be empty' translated]. + localDirName _ directory localName. + (self confirm: ('Really delete {1}?' translated format: {localDirName})) ifFalse: [^ self]. - directory entries size = 0 ifFalse:[^self inform:'Directory must be empty']. - localDirName := directory localName. - (self confirm: 'Really delete ' , localDirName , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. directory deleteDirectory: localDirName. self updateFileList.! Item was changed: ----- Method: FileList>>serviceAddNewDirectory (in category 'own services') ----- serviceAddNewDirectory "Answer a service entry characterizing the 'add new directory' command" ^ SimpleServiceEntry provider: self + label: 'add new directory' translatedNoop - label: 'add new directory' selector: #addNewDirectory + description: 'adds a new, empty directory (folder)' translatedNoop! - description: 'adds a new, empty directory (folder)' ! Item was changed: ----- Method: FileList>>serviceAddNewFile (in category 'own services') ----- serviceAddNewFile "Answer a service entry characterizing the 'add new file' command" + ^ SimpleServiceEntry + provider: self + label: 'add new file' translatedNoop + selector: #addNewFile + description: 'create a new,. empty file, and add it to the current directory.' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'add new file' selector: #addNewFile description: 'create a new,. empty file, and add it to the current directory.'! Item was changed: ----- Method: FileList>>serviceAllFileOptions (in category 'own services') ----- serviceAllFileOptions + ^ {SimpleServiceEntry + provider: self + label: 'more...' translatedNoop + selector: #offerAllFileOptions + description: 'show all the options available' translatedNoop}! - ^ {SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions description: 'show all the options available'}! Item was changed: ----- Method: FileList>>serviceCompressFile (in category 'own services') ----- serviceCompressFile "Answer a service for compressing a file" + ^ SimpleServiceEntry + provider: self + label: 'compress' translatedNoop + selector: #compressFile + description: 'compress file' translatedNoop + buttonLabel: 'compress' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'compress' selector: #compressFile description: 'compress file' buttonLabel: 'compress'! Item was changed: ----- Method: FileList>>serviceCopyName (in category 'own services') ----- serviceCopyName + ^ (SimpleServiceEntry + provider: self + label: 'copy name to clipboard' translatedNoop + selector: #copyName + description:'copy name to clipboard' translatedNoop )! - ^ (SimpleServiceEntry provider: self label: 'copy name to clipboard' selector: #copyName description:'copy name to clipboard' )! Item was changed: ----- Method: FileList>>serviceDeleteFile (in category 'own services') ----- serviceDeleteFile + ^ (SimpleServiceEntry + provider: self + label: 'delete' translatedNoop + selector: #deleteFile) + description: 'delete the seleted item' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'delete' selector: #deleteFile) - description: 'delete the seleted item'! Item was changed: ----- Method: FileList>>serviceGet (in category 'own services') ----- serviceGet "Answer a service for getting the entire file" ^ (SimpleServiceEntry provider: self + label: 'get entire file' translatedNoop - label: 'get entire file' selector: #get + description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.' translatedNoop)! - description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.')! Item was changed: ----- Method: FileList>>serviceGetEncodedText (in category 'own services') ----- serviceGetEncodedText ^ (SimpleServiceEntry provider: self + label: 'view as encoded text' translatedNoop - label: 'view as encoded text' selector: #getEncodedText + description: 'view as encoded text' translatedNoop) - description: 'view as encoded text') ! Item was changed: ----- Method: FileList>>serviceGetHex (in category 'own services') ----- serviceGetHex ^ (SimpleServiceEntry provider: self + label: 'view as hex' translatedNoop - label: 'view as hex' selector: #getHex + description: 'view as hex' translatedNoop) - description: 'view as hex') ! Item was changed: ----- Method: FileList>>serviceRenameFile (in category 'own services') ----- serviceRenameFile + ^ (SimpleServiceEntry + provider: self + label: 'rename' translatedNoop + selector: #renameFile + description: 'rename file' translatedNoop)! - ^ (SimpleServiceEntry provider: self label: 'rename' selector: #renameFile description: 'rename file')! Item was changed: ----- Method: FileList>>serviceSortByDate (in category 'own services') ----- serviceSortByDate "Answer a service for sorting by date" ^ (SimpleServiceEntry new provider: self + label: 'by date' translatedNoop - label: 'by date' selector: #sortByDate + description: 'sort entries by date' translatedNoop) - description: 'sort entries by date') extraSelector: #sortingByDate; + buttonLabel: 'date' translatedNoop! - buttonLabel: 'date'! Item was changed: ----- Method: FileList>>serviceSortByName (in category 'own services') ----- serviceSortByName "Answer a service for soring by name" ^ (SimpleServiceEntry new + provider: self label: 'by name' translatedNoop + selector: #sortByName + description: 'sort entries by name' translatedNoop) - provider: self label: 'by name' selector: #sortByName - description: 'sort entries by name') extraSelector: #sortingByName; + buttonLabel: 'name' translatedNoop! - buttonLabel: 'name'! Item was changed: ----- Method: FileList>>serviceSortBySize (in category 'own services') ----- serviceSortBySize "Answer a service for sorting by size" ^ (SimpleServiceEntry provider: self + label: 'by size' translatedNoop - label: 'by size' selector: #sortBySize + description: 'sort entries by size' translatedNoop) - description: 'sort entries by size') extraSelector: #sortingBySize; + buttonLabel: 'size' translatedNoop! - buttonLabel: 'size'! Item was changed: ----- Method: FileList>>serviceViewContentsInWorkspace (in category 'own services') ----- serviceViewContentsInWorkspace "Answer a service for viewing the contents of a file in a workspace" + ^ (SimpleServiceEntry provider: self label: 'workspace with contents' translatedNoop + selector: #viewContentsInWorkspace) + description: 'open a new Workspace whose contents are set to the contents of this file' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'workspace with contents' selector: #viewContentsInWorkspace) - description: 'open a new Workspace whose contents are set to the contents of this file'! Item was changed: ----- Method: FileList2 class>>modalFileSelectorForSuffixes: (in category 'modal dialogs') ----- modalFileSelectorForSuffixes: aList | window aFileList | window := self morphicViewFileSelectorForSuffixes: aList. aFileList := window valueOfProperty: #fileListModel. + aFileList resort: #name. window openCenteredInWorld. - UserInterfaceTheme current applyTo: window allMorphs. self modalLoopOn: window. ^aFileList getSelectedFile! Item was changed: ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld:reallyLoad:dirFilterType: (in category 'blue ui') ----- morphicViewProjectLoader2InWorld: aWorld reallyLoad: aBoolean dirFilterType: aSymbol | window aFileList buttons treePane textColor1 fileListPane pane2a pane2b treeExtent filesExtent | window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: FileDirectory default. + aFileList resort: #name. aFileList optionalButtonSpecs: aFileList servicesForProjectLoader; fileSelectionBlock: ( aSymbol == #limitedSuperSwikiDirectoryList ifTrue: [ MessageSend receiver: self selector: #projectOnlySelectionMethod: ] ifFalse: [ self projectOnlySelectionBlock ] ); "dirSelectionBlock: self hideSqueakletDirectoryBlock;" modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each | self blueButtonText: each first textColor: textColor1 color: each second inWindow: window ]. aWorld width < 800 ifTrue: [ treeExtent := 150@300. filesExtent := 350@300. ] ifFalse: [ treeExtent := 250@300. filesExtent := 350@300. ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: aSymbol) extent: treeExtent; retractable: false; borderWidth: 0. fileListPane := aFileList morphicFileListPane extent: filesExtent; retractable: false; borderWidth: 0. window addARow: { window fancyText: 'Load A Project' translated font: Preferences standardEToysTitleFont color: textColor1 }; addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second }; addARow: { window fancyText: 'Please select a project' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { (window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. (window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " buttons first on: #mouseUp send: (aBoolean ifTrue: [#okHitForProjectLoader] ifFalse: [#okHit]) to: aFileList. buttons second on: #mouseUp send: #cancelHit to: aFileList. aFileList postOpen. window position: aWorld topLeft + (aWorld extent - window extent // 2). window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). window becomeModal. ^ window openInWorld: aWorld.! Item was changed: ----- Method: FileList2 class>>morphicViewProjectSaverFor: (in category 'blue ui') ----- morphicViewProjectSaverFor: aProject " (FileList2 morphicViewProjectSaverFor: Project current) openInWorld " | window aFileList buttons treePane pane2 textColor1 option treeExtent buttonData buttonRow | + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: ServerDirectory projectDefaultDirectory. aFileList dirSelectionBlock: self hideSqueakletDirectoryBlock. window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. aFileList modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttonData := Preferences enableLocalSave ifTrue: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Save on local disk only'. #saveLocalOnlyHit. 'saves in the Squeaklets folder'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }] ifFalse: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }]. buttons := buttonData collect: [ :each | (self blueButtonText: each first textColor: textColor1 color: each fourth inWindow: window) setBalloonText: each third translated; hResizing: #shrinkWrap; on: #mouseUp send: each second to: aFileList ]. option := aProject world valueOfProperty: #SuperSwikiPublishOptions ifAbsent: [#initialDirectoryList]. aProject world removeProperty: #SuperSwikiPublishOptions. treeExtent := World height < 500 ifTrue: [ 350@150 ] ifFalse: [ 350@300 ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: option) extent: treeExtent; retractable: false; borderWidth: 0. window addARowCentered: { window fancyText: 'Publish This Project' translated font: Preferences standardEToysTitleFont color: textColor1 }. buttonRow := OrderedCollection new. buttons do: [:button | buttonRow add: button] separatedBy: [buttonRow add: ((Morph new extent: 30@5) color: Color transparent)]. " addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second. (Morph new extent: 30@5) color: Color transparent. buttons third };" window addARowCentered: buttonRow; addARowCentered: { (window inAColumn: {(ProjectViewMorph on: aProject) lock}) layoutInset: 4}; addARowCentered: { window fancyText: 'Please select a folder' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { ( window inAColumn: { (pane2 := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor } ) layoutInset: 10 }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2 fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " window setProperty: #morphicLayerNumber toValue: 11. aFileList postOpen. window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). ^ window ! Item was changed: ----- Method: FileList2>>serviceCancel (in category 'own services') ----- serviceCancel "Answer a service for hitting the cancel button" ^ (SimpleServiceEntry new + provider: self + label: 'cancel' translatedNoop + selector: #cancelHit + description: 'hit here to cancel ' translatedNoop) + buttonLabel: 'cancel' translatedNoop! - provider: self label: 'cancel' selector: #cancelHit - description: 'hit here to cancel ') - buttonLabel: 'cancel'! Item was changed: ----- Method: FileList2>>serviceOkay (in category 'own services') ----- serviceOkay "Answer a service for hitting the okay button" ^ (SimpleServiceEntry new + provider: self + label: 'okay' translatedNoop + selector: #okHit + description: 'hit here to accept the current selection' translatedNoop) + buttonLabel: 'ok' translatedNoop! - provider: self label: 'okay' selector: #okHit - description: 'hit here to accept the current selection') - buttonLabel: 'ok'! Item was changed: ----- Method: FileList2>>serviceOpenProjectFromFile (in category 'own services') ----- serviceOpenProjectFromFile "Answer a service for opening a .pr project file" ^ SimpleServiceEntry provider: self + label: 'load as project' translatedNoop - label: 'load as project' selector: #openProjectFromFile + description: 'open project from file' translatedNoop + buttonLabel: 'load' translatedNoop! - description: 'open project from file' - buttonLabel: 'load'! Item was changed: ----- Method: ProcessBrowser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ProcessBrowser. #prototypicalToolWindow. 'Processes' translatedNoop. 'A Process Browser shows you all the running processes' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ProcessBrowser prototypicalToolWindow 'Processes' 'A Process Browser shows you all the running processes') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Tue Aug 30 17:05:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:05:23 2016 Subject: [squeak-dev] The Trunk: Tools-tfel.716.mcz Message-ID: Tim Felgentreff uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-tfel.716.mcz ==================== Summary ==================== Name: Tools-tfel.716 Author: tfel Time: 10 August 2016, 3:42:16.337665 pm UUID: fd84a0f7-d401-ae43-9d4c-5ceec941cd6f Ancestors: Tools-tfel.715 sort these by name by default =============== Diff against Tools-mt.712 =============== Item was changed: ----- Method: ArchiveViewer class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Zip Tool' translatedNoop + categories: #() + documentation: 'A viewer and editor for Zip archive files' translatedNoop - ^ self partName: 'Zip Tool' - categories: #(Tools) - documentation: 'A viewer and editor for Zip archive files' ! Item was changed: ----- Method: ArchiveViewer class>>serviceAddToNewZip (in category 'file list services') ----- serviceAddToNewZip "Answer a service for adding the file to a new zip" ^ FileModifyingSimpleServiceEntry provider: self + label: 'add file to new zip' translatedNoop - label: 'add file to new zip' selector: #addFileToNewZip: + description: 'add file to new zip' translatedNoop + buttonLabel: 'to new zip' translatedNoop! - description: 'add file to new zip' - buttonLabel: 'to new zip'! Item was changed: ----- Method: ArchiveViewer class>>serviceExtractAll (in category 'file list services') ----- serviceExtractAll "Answer a service for opening in a zip viewer" ^ FileModifyingSimpleServiceEntry provider: self + label: 'extract all to...' translatedNoop - label: 'extract all to...' selector: #extractAllFrom: + description: 'extract all files to a user-specified directory' translatedNoop + buttonLabel: 'extract all' translatedNoop! - description: 'extract all files to a user-specified directory' - buttonLabel: 'extract all'! Item was changed: ----- Method: ArchiveViewer class>>serviceOpenInZipViewer (in category 'class initialization') ----- serviceOpenInZipViewer "Answer a service for opening in a zip viewer" ^ SimpleServiceEntry provider: self + label: 'open in zip viewer' translatedNoop - label: 'open in zip viewer' selector: #openOn: + description: 'open in zip viewer' translatedNoop + buttonLabel: 'open zip' translatedNoop! - description: 'open in zip viewer' - buttonLabel: 'open zip'! Item was changed: ----- Method: ArchiveViewer>>writePrependingFile (in category 'archive operations') ----- writePrependingFile | result name prependedName | self canSaveArchive ifFalse: [ ^self ]. + result _ (StandardFileMenu newFileMenu: FileDirectory default) + startUpWithCaption: 'Destination Zip File Name:' translated. - result := (StandardFileMenu newFileMenu: FileDirectory default) - startUpWithCaption: 'Destination Zip File Name:'. result ifNil: [ ^self ]. + name _ result directory fullNameFor: result name. - name := result directory fullNameFor: result name. (archive canWriteToFileNamed: name) ifFalse: [ self inform: name, ' is used by one or more members in your archive, and cannot be overwritten. + Try writing to another file name' translated. - Try writing to another file name'. ^self ]. + result _ (StandardFileMenu oldFileMenu: FileDirectory default) + startUpWithCaption: 'Prepended File:' translated. - result := (StandardFileMenu oldFileMenu: FileDirectory default) - startUpWithCaption: 'Prepended File:'. result ifNil: [ ^self ]. + prependedName _ result directory fullNameFor: result name. - prependedName := result directory fullNameFor: result name. [ archive writeToFileNamed: name prependingFileNamed: prependedName ] on: Error do: [ :ex | self inform: ex description. ]. self changed: #memberList "in case CRC's and compressed sizes got set"! Item was changed: ----- Method: Browser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Browser. #prototypicalToolWindow. 'Browser' translatedNoop. 'A Browser is a tool that allows you to view all the code of all the classes in the system' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(#Browser #prototypicalToolWindow 'Browser' 'A Browser is a tool that allows you to view all the code of all the classes in the system' ) forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeList class>>serviceBrowseChangeFile (in category 'fileIn/Out') ----- serviceBrowseChangeFile "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseStream: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop) - description: 'open a changelist tool on this file' - buttonLabel: 'changes') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: ChangeList class>>serviceBrowseCompressedChangeFile (in category 'fileIn/Out') ----- serviceBrowseCompressedChangeFile "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseCompressedChangesFile: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop! - description: 'open a changelist tool on this file' - buttonLabel: 'changes'! Item was changed: ----- Method: ChangeList class>>serviceBrowseDotChangesFile (in category 'fileIn/Out') ----- serviceBrowseDotChangesFile "Answer a service for opening a changelist browser on the tail end of a .changes file" ^ SimpleServiceEntry provider: self + label: 'recent changes in file' translatedNoop - label: 'recent changes in file' selector: #browseRecentLogOnPath: + description: 'open a changelist tool on recent changes in file' translatedNoop + buttonLabel: 'recent changes' translatedNoop! - description: 'open a changelist tool on recent changes in file' - buttonLabel: 'recent changes'! Item was changed: ----- Method: ChangeSorter class>>registerInFlapsRegistry (in category 'deprecated') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ChangeSorter. #prototypicalToolWindow. 'Change Set' translatedNoop. 'A tool that allows you to view and manipulate all the code changes in a single change set' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ChangeSorter prototypicalToolWindow 'Change Set' 'A tool that allows you to view and manipulate all the code changes in a single change set') forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeSorter>>checkThatSidesDiffer: (in category 'changeSet menu') ----- checkThatSidesDiffer: escapeBlock "If the change sets on both sides of the dual sorter are the same, put up an error message and escape via escapeBlock, else proceed happily" + parent ifNil: [^ escapeBlock value]. "Not relevant unless in dual change sorter." + (myChangeSet == (parent other: self) changeSet) ifTrue: [self inform: 'This command requires that the change sets selected on the two sides of the change sorter *not* + be the same.' translated. - be the same.'. ^ escapeBlock value] ! Item was changed: ----- Method: Debugger>>preDebugMessageString (in category 'toolbuilder') ----- preDebugMessageString + ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!' translated].! - ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!'].! Item was changed: ----- Method: DualChangeSorter class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#DualChangeSorter, #prototypicalToolWindow. 'Change Sorter' translatedNoop. 'Shows two change sets side by side' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(DualChangeSorter prototypicalToolWindow 'Change Sorter' 'Shows two change sets side by side') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCode (in category 'file list services') ----- serviceBrowseCode "Answer the service of opening a file-contents browser" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCodeFiles (in category 'file list services') ----- serviceBrowseCodeFiles ^ (SimpleServiceEntry provider: self + label: 'browse code files' translatedNoop - label: 'browse code files' selector: #selectAndBrowseFile:) argumentGetter: [ :fileList | fileList ]; yourself! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCompressedCode (in category 'file list services') ----- serviceBrowseCompressedCode "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseCompressedCodeStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileList class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#FileList . #prototypicalToolWindow, 'File List' translatedNoop. 'A File List is a tool for browsing folders and files on disks and on ftp types.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(FileList prototypicalToolWindow 'File List' 'A File List is a tool for browsing folders and files on disks and on ftp types.') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileList>>deleteDirectory (in category 'volume list and pattern') ----- deleteDirectory "Remove the currently selected directory" | localDirName | + directory entries size = 0 ifFalse:[^self inform:'Directory must be empty' translated]. + localDirName _ directory localName. + (self confirm: ('Really delete {1}?' translated format: {localDirName})) ifFalse: [^ self]. - directory entries size = 0 ifFalse:[^self inform:'Directory must be empty']. - localDirName := directory localName. - (self confirm: 'Really delete ' , localDirName , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. directory deleteDirectory: localDirName. self updateFileList.! Item was changed: ----- Method: FileList>>serviceAddNewDirectory (in category 'own services') ----- serviceAddNewDirectory "Answer a service entry characterizing the 'add new directory' command" ^ SimpleServiceEntry provider: self + label: 'add new directory' translatedNoop - label: 'add new directory' selector: #addNewDirectory + description: 'adds a new, empty directory (folder)' translatedNoop! - description: 'adds a new, empty directory (folder)' ! Item was changed: ----- Method: FileList>>serviceAddNewFile (in category 'own services') ----- serviceAddNewFile "Answer a service entry characterizing the 'add new file' command" + ^ SimpleServiceEntry + provider: self + label: 'add new file' translatedNoop + selector: #addNewFile + description: 'create a new,. empty file, and add it to the current directory.' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'add new file' selector: #addNewFile description: 'create a new,. empty file, and add it to the current directory.'! Item was changed: ----- Method: FileList>>serviceAllFileOptions (in category 'own services') ----- serviceAllFileOptions + ^ {SimpleServiceEntry + provider: self + label: 'more...' translatedNoop + selector: #offerAllFileOptions + description: 'show all the options available' translatedNoop}! - ^ {SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions description: 'show all the options available'}! Item was changed: ----- Method: FileList>>serviceCompressFile (in category 'own services') ----- serviceCompressFile "Answer a service for compressing a file" + ^ SimpleServiceEntry + provider: self + label: 'compress' translatedNoop + selector: #compressFile + description: 'compress file' translatedNoop + buttonLabel: 'compress' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'compress' selector: #compressFile description: 'compress file' buttonLabel: 'compress'! Item was changed: ----- Method: FileList>>serviceCopyName (in category 'own services') ----- serviceCopyName + ^ (SimpleServiceEntry + provider: self + label: 'copy name to clipboard' translatedNoop + selector: #copyName + description:'copy name to clipboard' translatedNoop )! - ^ (SimpleServiceEntry provider: self label: 'copy name to clipboard' selector: #copyName description:'copy name to clipboard' )! Item was changed: ----- Method: FileList>>serviceDeleteFile (in category 'own services') ----- serviceDeleteFile + ^ (SimpleServiceEntry + provider: self + label: 'delete' translatedNoop + selector: #deleteFile) + description: 'delete the seleted item' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'delete' selector: #deleteFile) - description: 'delete the seleted item'! Item was changed: ----- Method: FileList>>serviceGet (in category 'own services') ----- serviceGet "Answer a service for getting the entire file" ^ (SimpleServiceEntry provider: self + label: 'get entire file' translatedNoop - label: 'get entire file' selector: #get + description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.' translatedNoop)! - description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.')! Item was changed: ----- Method: FileList>>serviceGetEncodedText (in category 'own services') ----- serviceGetEncodedText ^ (SimpleServiceEntry provider: self + label: 'view as encoded text' translatedNoop - label: 'view as encoded text' selector: #getEncodedText + description: 'view as encoded text' translatedNoop) - description: 'view as encoded text') ! Item was changed: ----- Method: FileList>>serviceGetHex (in category 'own services') ----- serviceGetHex ^ (SimpleServiceEntry provider: self + label: 'view as hex' translatedNoop - label: 'view as hex' selector: #getHex + description: 'view as hex' translatedNoop) - description: 'view as hex') ! Item was changed: ----- Method: FileList>>serviceRenameFile (in category 'own services') ----- serviceRenameFile + ^ (SimpleServiceEntry + provider: self + label: 'rename' translatedNoop + selector: #renameFile + description: 'rename file' translatedNoop)! - ^ (SimpleServiceEntry provider: self label: 'rename' selector: #renameFile description: 'rename file')! Item was changed: ----- Method: FileList>>serviceSortByDate (in category 'own services') ----- serviceSortByDate "Answer a service for sorting by date" ^ (SimpleServiceEntry new provider: self + label: 'by date' translatedNoop - label: 'by date' selector: #sortByDate + description: 'sort entries by date' translatedNoop) - description: 'sort entries by date') extraSelector: #sortingByDate; + buttonLabel: 'date' translatedNoop! - buttonLabel: 'date'! Item was changed: ----- Method: FileList>>serviceSortByName (in category 'own services') ----- serviceSortByName "Answer a service for soring by name" ^ (SimpleServiceEntry new + provider: self label: 'by name' translatedNoop + selector: #sortByName + description: 'sort entries by name' translatedNoop) - provider: self label: 'by name' selector: #sortByName - description: 'sort entries by name') extraSelector: #sortingByName; + buttonLabel: 'name' translatedNoop! - buttonLabel: 'name'! Item was changed: ----- Method: FileList>>serviceSortBySize (in category 'own services') ----- serviceSortBySize "Answer a service for sorting by size" ^ (SimpleServiceEntry provider: self + label: 'by size' translatedNoop - label: 'by size' selector: #sortBySize + description: 'sort entries by size' translatedNoop) - description: 'sort entries by size') extraSelector: #sortingBySize; + buttonLabel: 'size' translatedNoop! - buttonLabel: 'size'! Item was changed: ----- Method: FileList>>serviceViewContentsInWorkspace (in category 'own services') ----- serviceViewContentsInWorkspace "Answer a service for viewing the contents of a file in a workspace" + ^ (SimpleServiceEntry provider: self label: 'workspace with contents' translatedNoop + selector: #viewContentsInWorkspace) + description: 'open a new Workspace whose contents are set to the contents of this file' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'workspace with contents' selector: #viewContentsInWorkspace) - description: 'open a new Workspace whose contents are set to the contents of this file'! Item was changed: ----- Method: FileList2 class>>modalFileSelectorForSuffixes: (in category 'modal dialogs') ----- modalFileSelectorForSuffixes: aList | window aFileList | window := self morphicViewFileSelectorForSuffixes: aList. aFileList := window valueOfProperty: #fileListModel. + aFileList resort: #name. window openCenteredInWorld. self modalLoopOn: window. ^aFileList getSelectedFile! Item was changed: ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld:reallyLoad:dirFilterType: (in category 'blue ui') ----- morphicViewProjectLoader2InWorld: aWorld reallyLoad: aBoolean dirFilterType: aSymbol | window aFileList buttons treePane textColor1 fileListPane pane2a pane2b treeExtent filesExtent | window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: FileDirectory default. + aFileList resort: #name. aFileList optionalButtonSpecs: aFileList servicesForProjectLoader; fileSelectionBlock: ( aSymbol == #limitedSuperSwikiDirectoryList ifTrue: [ MessageSend receiver: self selector: #projectOnlySelectionMethod: ] ifFalse: [ self projectOnlySelectionBlock ] ); "dirSelectionBlock: self hideSqueakletDirectoryBlock;" modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each | self blueButtonText: each first textColor: textColor1 color: each second inWindow: window ]. aWorld width < 800 ifTrue: [ treeExtent := 150@300. filesExtent := 350@300. ] ifFalse: [ treeExtent := 250@300. filesExtent := 350@300. ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: aSymbol) extent: treeExtent; retractable: false; borderWidth: 0. fileListPane := aFileList morphicFileListPane extent: filesExtent; retractable: false; borderWidth: 0. window addARow: { window fancyText: 'Load A Project' translated font: Preferences standardEToysTitleFont color: textColor1 }; addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second }; addARow: { window fancyText: 'Please select a project' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { (window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. (window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " buttons first on: #mouseUp send: (aBoolean ifTrue: [#okHitForProjectLoader] ifFalse: [#okHit]) to: aFileList. buttons second on: #mouseUp send: #cancelHit to: aFileList. aFileList postOpen. window position: aWorld topLeft + (aWorld extent - window extent // 2). window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). window becomeModal. ^ window openInWorld: aWorld.! Item was changed: ----- Method: FileList2 class>>morphicViewProjectSaverFor: (in category 'blue ui') ----- morphicViewProjectSaverFor: aProject " (FileList2 morphicViewProjectSaverFor: Project current) openInWorld " | window aFileList buttons treePane pane2 textColor1 option treeExtent buttonData buttonRow | + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: ServerDirectory projectDefaultDirectory. aFileList dirSelectionBlock: self hideSqueakletDirectoryBlock. window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. aFileList modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttonData := Preferences enableLocalSave ifTrue: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Save on local disk only'. #saveLocalOnlyHit. 'saves in the Squeaklets folder'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }] ifFalse: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }]. buttons := buttonData collect: [ :each | (self blueButtonText: each first textColor: textColor1 color: each fourth inWindow: window) setBalloonText: each third translated; hResizing: #shrinkWrap; on: #mouseUp send: each second to: aFileList ]. option := aProject world valueOfProperty: #SuperSwikiPublishOptions ifAbsent: [#initialDirectoryList]. aProject world removeProperty: #SuperSwikiPublishOptions. treeExtent := World height < 500 ifTrue: [ 350@150 ] ifFalse: [ 350@300 ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: option) extent: treeExtent; retractable: false; borderWidth: 0. window addARowCentered: { window fancyText: 'Publish This Project' translated font: Preferences standardEToysTitleFont color: textColor1 }. buttonRow := OrderedCollection new. buttons do: [:button | buttonRow add: button] separatedBy: [buttonRow add: ((Morph new extent: 30@5) color: Color transparent)]. " addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second. (Morph new extent: 30@5) color: Color transparent. buttons third };" window addARowCentered: buttonRow; addARowCentered: { (window inAColumn: {(ProjectViewMorph on: aProject) lock}) layoutInset: 4}; addARowCentered: { window fancyText: 'Please select a folder' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { ( window inAColumn: { (pane2 := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor } ) layoutInset: 10 }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2 fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " window setProperty: #morphicLayerNumber toValue: 11. aFileList postOpen. window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). ^ window ! Item was changed: ----- Method: FileList2>>serviceCancel (in category 'own services') ----- serviceCancel "Answer a service for hitting the cancel button" ^ (SimpleServiceEntry new + provider: self + label: 'cancel' translatedNoop + selector: #cancelHit + description: 'hit here to cancel ' translatedNoop) + buttonLabel: 'cancel' translatedNoop! - provider: self label: 'cancel' selector: #cancelHit - description: 'hit here to cancel ') - buttonLabel: 'cancel'! Item was changed: ----- Method: FileList2>>serviceOkay (in category 'own services') ----- serviceOkay "Answer a service for hitting the okay button" ^ (SimpleServiceEntry new + provider: self + label: 'okay' translatedNoop + selector: #okHit + description: 'hit here to accept the current selection' translatedNoop) + buttonLabel: 'ok' translatedNoop! - provider: self label: 'okay' selector: #okHit - description: 'hit here to accept the current selection') - buttonLabel: 'ok'! Item was changed: ----- Method: FileList2>>serviceOpenProjectFromFile (in category 'own services') ----- serviceOpenProjectFromFile "Answer a service for opening a .pr project file" ^ SimpleServiceEntry provider: self + label: 'load as project' translatedNoop - label: 'load as project' selector: #openProjectFromFile + description: 'open project from file' translatedNoop + buttonLabel: 'load' translatedNoop! - description: 'open project from file' - buttonLabel: 'load'! Item was changed: ----- Method: ProcessBrowser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ProcessBrowser. #prototypicalToolWindow. 'Processes' translatedNoop. 'A Process Browser shows you all the running processes' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ProcessBrowser prototypicalToolWindow 'Processes' 'A Process Browser shows you all the running processes') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Tue Aug 30 17:05:31 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:05:37 2016 Subject: [squeak-dev] The Trunk: Tools-tfel.715.mcz Message-ID: Tim Felgentreff uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-tfel.715.mcz ==================== Summary ==================== Name: Tools-tfel.715 Author: tfel Time: 10 August 2016, 9:45:46.282314 am UUID: 55a13266-cbbd-c545-8ad7-2ed2234fe96c Ancestors: Tools-mt.712, Tools-tfel.714 merge with trunk =============== Diff against Tools-mt.712 =============== Item was changed: ----- Method: ArchiveViewer class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Zip Tool' translatedNoop + categories: #() + documentation: 'A viewer and editor for Zip archive files' translatedNoop - ^ self partName: 'Zip Tool' - categories: #(Tools) - documentation: 'A viewer and editor for Zip archive files' ! Item was changed: ----- Method: ArchiveViewer class>>serviceAddToNewZip (in category 'file list services') ----- serviceAddToNewZip "Answer a service for adding the file to a new zip" ^ FileModifyingSimpleServiceEntry provider: self + label: 'add file to new zip' translatedNoop - label: 'add file to new zip' selector: #addFileToNewZip: + description: 'add file to new zip' translatedNoop + buttonLabel: 'to new zip' translatedNoop! - description: 'add file to new zip' - buttonLabel: 'to new zip'! Item was changed: ----- Method: ArchiveViewer class>>serviceExtractAll (in category 'file list services') ----- serviceExtractAll "Answer a service for opening in a zip viewer" ^ FileModifyingSimpleServiceEntry provider: self + label: 'extract all to...' translatedNoop - label: 'extract all to...' selector: #extractAllFrom: + description: 'extract all files to a user-specified directory' translatedNoop + buttonLabel: 'extract all' translatedNoop! - description: 'extract all files to a user-specified directory' - buttonLabel: 'extract all'! Item was changed: ----- Method: ArchiveViewer class>>serviceOpenInZipViewer (in category 'class initialization') ----- serviceOpenInZipViewer "Answer a service for opening in a zip viewer" ^ SimpleServiceEntry provider: self + label: 'open in zip viewer' translatedNoop - label: 'open in zip viewer' selector: #openOn: + description: 'open in zip viewer' translatedNoop + buttonLabel: 'open zip' translatedNoop! - description: 'open in zip viewer' - buttonLabel: 'open zip'! Item was changed: ----- Method: ArchiveViewer>>writePrependingFile (in category 'archive operations') ----- writePrependingFile | result name prependedName | self canSaveArchive ifFalse: [ ^self ]. + result _ (StandardFileMenu newFileMenu: FileDirectory default) + startUpWithCaption: 'Destination Zip File Name:' translated. - result := (StandardFileMenu newFileMenu: FileDirectory default) - startUpWithCaption: 'Destination Zip File Name:'. result ifNil: [ ^self ]. + name _ result directory fullNameFor: result name. - name := result directory fullNameFor: result name. (archive canWriteToFileNamed: name) ifFalse: [ self inform: name, ' is used by one or more members in your archive, and cannot be overwritten. + Try writing to another file name' translated. - Try writing to another file name'. ^self ]. + result _ (StandardFileMenu oldFileMenu: FileDirectory default) + startUpWithCaption: 'Prepended File:' translated. - result := (StandardFileMenu oldFileMenu: FileDirectory default) - startUpWithCaption: 'Prepended File:'. result ifNil: [ ^self ]. + prependedName _ result directory fullNameFor: result name. - prependedName := result directory fullNameFor: result name. [ archive writeToFileNamed: name prependingFileNamed: prependedName ] on: Error do: [ :ex | self inform: ex description. ]. self changed: #memberList "in case CRC's and compressed sizes got set"! Item was changed: ----- Method: Browser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Browser. #prototypicalToolWindow. 'Browser' translatedNoop. 'A Browser is a tool that allows you to view all the code of all the classes in the system' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(#Browser #prototypicalToolWindow 'Browser' 'A Browser is a tool that allows you to view all the code of all the classes in the system' ) forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeList class>>serviceBrowseChangeFile (in category 'fileIn/Out') ----- serviceBrowseChangeFile "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseStream: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop) - description: 'open a changelist tool on this file' - buttonLabel: 'changes') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: ChangeList class>>serviceBrowseCompressedChangeFile (in category 'fileIn/Out') ----- serviceBrowseCompressedChangeFile "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseCompressedChangesFile: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop! - description: 'open a changelist tool on this file' - buttonLabel: 'changes'! Item was changed: ----- Method: ChangeList class>>serviceBrowseDotChangesFile (in category 'fileIn/Out') ----- serviceBrowseDotChangesFile "Answer a service for opening a changelist browser on the tail end of a .changes file" ^ SimpleServiceEntry provider: self + label: 'recent changes in file' translatedNoop - label: 'recent changes in file' selector: #browseRecentLogOnPath: + description: 'open a changelist tool on recent changes in file' translatedNoop + buttonLabel: 'recent changes' translatedNoop! - description: 'open a changelist tool on recent changes in file' - buttonLabel: 'recent changes'! Item was changed: ----- Method: ChangeSorter class>>registerInFlapsRegistry (in category 'deprecated') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ChangeSorter. #prototypicalToolWindow. 'Change Set' translatedNoop. 'A tool that allows you to view and manipulate all the code changes in a single change set' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ChangeSorter prototypicalToolWindow 'Change Set' 'A tool that allows you to view and manipulate all the code changes in a single change set') forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeSorter>>checkThatSidesDiffer: (in category 'changeSet menu') ----- checkThatSidesDiffer: escapeBlock "If the change sets on both sides of the dual sorter are the same, put up an error message and escape via escapeBlock, else proceed happily" + parent ifNil: [^ escapeBlock value]. "Not relevant unless in dual change sorter." + (myChangeSet == (parent other: self) changeSet) ifTrue: [self inform: 'This command requires that the change sets selected on the two sides of the change sorter *not* + be the same.' translated. - be the same.'. ^ escapeBlock value] ! Item was changed: ----- Method: Debugger>>preDebugMessageString (in category 'toolbuilder') ----- preDebugMessageString + ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!' translated].! - ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!'].! Item was changed: ----- Method: DualChangeSorter class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#DualChangeSorter, #prototypicalToolWindow. 'Change Sorter' translatedNoop. 'Shows two change sets side by side' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(DualChangeSorter prototypicalToolWindow 'Change Sorter' 'Shows two change sets side by side') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCode (in category 'file list services') ----- serviceBrowseCode "Answer the service of opening a file-contents browser" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCodeFiles (in category 'file list services') ----- serviceBrowseCodeFiles ^ (SimpleServiceEntry provider: self + label: 'browse code files' translatedNoop - label: 'browse code files' selector: #selectAndBrowseFile:) argumentGetter: [ :fileList | fileList ]; yourself! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCompressedCode (in category 'file list services') ----- serviceBrowseCompressedCode "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseCompressedCodeStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileList class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#FileList . #prototypicalToolWindow, 'File List' translatedNoop. 'A File List is a tool for browsing folders and files on disks and on ftp types.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(FileList prototypicalToolWindow 'File List' 'A File List is a tool for browsing folders and files on disks and on ftp types.') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileList>>deleteDirectory (in category 'volume list and pattern') ----- deleteDirectory "Remove the currently selected directory" | localDirName | + directory entries size = 0 ifFalse:[^self inform:'Directory must be empty' translated]. + localDirName _ directory localName. + (self confirm: ('Really delete {1}?' translated format: {localDirName})) ifFalse: [^ self]. - directory entries size = 0 ifFalse:[^self inform:'Directory must be empty']. - localDirName := directory localName. - (self confirm: 'Really delete ' , localDirName , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. directory deleteDirectory: localDirName. self updateFileList.! Item was changed: ----- Method: FileList>>serviceAddNewDirectory (in category 'own services') ----- serviceAddNewDirectory "Answer a service entry characterizing the 'add new directory' command" ^ SimpleServiceEntry provider: self + label: 'add new directory' translatedNoop - label: 'add new directory' selector: #addNewDirectory + description: 'adds a new, empty directory (folder)' translatedNoop! - description: 'adds a new, empty directory (folder)' ! Item was changed: ----- Method: FileList>>serviceAddNewFile (in category 'own services') ----- serviceAddNewFile "Answer a service entry characterizing the 'add new file' command" + ^ SimpleServiceEntry + provider: self + label: 'add new file' translatedNoop + selector: #addNewFile + description: 'create a new,. empty file, and add it to the current directory.' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'add new file' selector: #addNewFile description: 'create a new,. empty file, and add it to the current directory.'! Item was changed: ----- Method: FileList>>serviceAllFileOptions (in category 'own services') ----- serviceAllFileOptions + ^ {SimpleServiceEntry + provider: self + label: 'more...' translatedNoop + selector: #offerAllFileOptions + description: 'show all the options available' translatedNoop}! - ^ {SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions description: 'show all the options available'}! Item was changed: ----- Method: FileList>>serviceCompressFile (in category 'own services') ----- serviceCompressFile "Answer a service for compressing a file" + ^ SimpleServiceEntry + provider: self + label: 'compress' translatedNoop + selector: #compressFile + description: 'compress file' translatedNoop + buttonLabel: 'compress' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'compress' selector: #compressFile description: 'compress file' buttonLabel: 'compress'! Item was changed: ----- Method: FileList>>serviceCopyName (in category 'own services') ----- serviceCopyName + ^ (SimpleServiceEntry + provider: self + label: 'copy name to clipboard' translatedNoop + selector: #copyName + description:'copy name to clipboard' translatedNoop )! - ^ (SimpleServiceEntry provider: self label: 'copy name to clipboard' selector: #copyName description:'copy name to clipboard' )! Item was changed: ----- Method: FileList>>serviceDeleteFile (in category 'own services') ----- serviceDeleteFile + ^ (SimpleServiceEntry + provider: self + label: 'delete' translatedNoop + selector: #deleteFile) + description: 'delete the seleted item' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'delete' selector: #deleteFile) - description: 'delete the seleted item'! Item was changed: ----- Method: FileList>>serviceGet (in category 'own services') ----- serviceGet "Answer a service for getting the entire file" ^ (SimpleServiceEntry provider: self + label: 'get entire file' translatedNoop - label: 'get entire file' selector: #get + description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.' translatedNoop)! - description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.')! Item was changed: ----- Method: FileList>>serviceGetEncodedText (in category 'own services') ----- serviceGetEncodedText ^ (SimpleServiceEntry provider: self + label: 'view as encoded text' translatedNoop - label: 'view as encoded text' selector: #getEncodedText + description: 'view as encoded text' translatedNoop) - description: 'view as encoded text') ! Item was changed: ----- Method: FileList>>serviceGetHex (in category 'own services') ----- serviceGetHex ^ (SimpleServiceEntry provider: self + label: 'view as hex' translatedNoop - label: 'view as hex' selector: #getHex + description: 'view as hex' translatedNoop) - description: 'view as hex') ! Item was changed: ----- Method: FileList>>serviceRenameFile (in category 'own services') ----- serviceRenameFile + ^ (SimpleServiceEntry + provider: self + label: 'rename' translatedNoop + selector: #renameFile + description: 'rename file' translatedNoop)! - ^ (SimpleServiceEntry provider: self label: 'rename' selector: #renameFile description: 'rename file')! Item was changed: ----- Method: FileList>>serviceSortByDate (in category 'own services') ----- serviceSortByDate "Answer a service for sorting by date" ^ (SimpleServiceEntry new provider: self + label: 'by date' translatedNoop - label: 'by date' selector: #sortByDate + description: 'sort entries by date' translatedNoop) - description: 'sort entries by date') extraSelector: #sortingByDate; + buttonLabel: 'date' translatedNoop! - buttonLabel: 'date'! Item was changed: ----- Method: FileList>>serviceSortByName (in category 'own services') ----- serviceSortByName "Answer a service for soring by name" ^ (SimpleServiceEntry new + provider: self label: 'by name' translatedNoop + selector: #sortByName + description: 'sort entries by name' translatedNoop) - provider: self label: 'by name' selector: #sortByName - description: 'sort entries by name') extraSelector: #sortingByName; + buttonLabel: 'name' translatedNoop! - buttonLabel: 'name'! Item was changed: ----- Method: FileList>>serviceSortBySize (in category 'own services') ----- serviceSortBySize "Answer a service for sorting by size" ^ (SimpleServiceEntry provider: self + label: 'by size' translatedNoop - label: 'by size' selector: #sortBySize + description: 'sort entries by size' translatedNoop) - description: 'sort entries by size') extraSelector: #sortingBySize; + buttonLabel: 'size' translatedNoop! - buttonLabel: 'size'! Item was changed: ----- Method: FileList>>serviceViewContentsInWorkspace (in category 'own services') ----- serviceViewContentsInWorkspace "Answer a service for viewing the contents of a file in a workspace" + ^ (SimpleServiceEntry provider: self label: 'workspace with contents' translatedNoop + selector: #viewContentsInWorkspace) + description: 'open a new Workspace whose contents are set to the contents of this file' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'workspace with contents' selector: #viewContentsInWorkspace) - description: 'open a new Workspace whose contents are set to the contents of this file'! Item was changed: ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld:reallyLoad:dirFilterType: (in category 'blue ui') ----- morphicViewProjectLoader2InWorld: aWorld reallyLoad: aBoolean dirFilterType: aSymbol | window aFileList buttons treePane textColor1 fileListPane pane2a pane2b treeExtent filesExtent | window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: FileDirectory default. aFileList optionalButtonSpecs: aFileList servicesForProjectLoader; fileSelectionBlock: ( aSymbol == #limitedSuperSwikiDirectoryList ifTrue: [ MessageSend receiver: self selector: #projectOnlySelectionMethod: ] ifFalse: [ self projectOnlySelectionBlock ] ); "dirSelectionBlock: self hideSqueakletDirectoryBlock;" modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each | self blueButtonText: each first textColor: textColor1 color: each second inWindow: window ]. aWorld width < 800 ifTrue: [ treeExtent := 150@300. filesExtent := 350@300. ] ifFalse: [ treeExtent := 250@300. filesExtent := 350@300. ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: aSymbol) extent: treeExtent; retractable: false; borderWidth: 0. fileListPane := aFileList morphicFileListPane extent: filesExtent; retractable: false; borderWidth: 0. window addARow: { window fancyText: 'Load A Project' translated font: Preferences standardEToysTitleFont color: textColor1 }; addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second }; addARow: { window fancyText: 'Please select a project' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { (window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. (window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " buttons first on: #mouseUp send: (aBoolean ifTrue: [#okHitForProjectLoader] ifFalse: [#okHit]) to: aFileList. buttons second on: #mouseUp send: #cancelHit to: aFileList. aFileList postOpen. window position: aWorld topLeft + (aWorld extent - window extent // 2). window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). window becomeModal. ^ window openInWorld: aWorld.! Item was changed: ----- Method: FileList2 class>>morphicViewProjectSaverFor: (in category 'blue ui') ----- morphicViewProjectSaverFor: aProject " (FileList2 morphicViewProjectSaverFor: Project current) openInWorld " | window aFileList buttons treePane pane2 textColor1 option treeExtent buttonData buttonRow | + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: ServerDirectory projectDefaultDirectory. aFileList dirSelectionBlock: self hideSqueakletDirectoryBlock. window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. aFileList modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttonData := Preferences enableLocalSave ifTrue: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Save on local disk only'. #saveLocalOnlyHit. 'saves in the Squeaklets folder'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }] ifFalse: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }]. buttons := buttonData collect: [ :each | (self blueButtonText: each first textColor: textColor1 color: each fourth inWindow: window) setBalloonText: each third translated; hResizing: #shrinkWrap; on: #mouseUp send: each second to: aFileList ]. option := aProject world valueOfProperty: #SuperSwikiPublishOptions ifAbsent: [#initialDirectoryList]. aProject world removeProperty: #SuperSwikiPublishOptions. treeExtent := World height < 500 ifTrue: [ 350@150 ] ifFalse: [ 350@300 ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: option) extent: treeExtent; retractable: false; borderWidth: 0. window addARowCentered: { window fancyText: 'Publish This Project' translated font: Preferences standardEToysTitleFont color: textColor1 }. buttonRow := OrderedCollection new. buttons do: [:button | buttonRow add: button] separatedBy: [buttonRow add: ((Morph new extent: 30@5) color: Color transparent)]. " addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second. (Morph new extent: 30@5) color: Color transparent. buttons third };" window addARowCentered: buttonRow; addARowCentered: { (window inAColumn: {(ProjectViewMorph on: aProject) lock}) layoutInset: 4}; addARowCentered: { window fancyText: 'Please select a folder' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { ( window inAColumn: { (pane2 := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor } ) layoutInset: 10 }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2 fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " window setProperty: #morphicLayerNumber toValue: 11. aFileList postOpen. window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). ^ window ! Item was changed: ----- Method: FileList2>>serviceCancel (in category 'own services') ----- serviceCancel "Answer a service for hitting the cancel button" ^ (SimpleServiceEntry new + provider: self + label: 'cancel' translatedNoop + selector: #cancelHit + description: 'hit here to cancel ' translatedNoop) + buttonLabel: 'cancel' translatedNoop! - provider: self label: 'cancel' selector: #cancelHit - description: 'hit here to cancel ') - buttonLabel: 'cancel'! Item was changed: ----- Method: FileList2>>serviceOkay (in category 'own services') ----- serviceOkay "Answer a service for hitting the okay button" ^ (SimpleServiceEntry new + provider: self + label: 'okay' translatedNoop + selector: #okHit + description: 'hit here to accept the current selection' translatedNoop) + buttonLabel: 'ok' translatedNoop! - provider: self label: 'okay' selector: #okHit - description: 'hit here to accept the current selection') - buttonLabel: 'ok'! Item was changed: ----- Method: FileList2>>serviceOpenProjectFromFile (in category 'own services') ----- serviceOpenProjectFromFile "Answer a service for opening a .pr project file" ^ SimpleServiceEntry provider: self + label: 'load as project' translatedNoop - label: 'load as project' selector: #openProjectFromFile + description: 'open project from file' translatedNoop + buttonLabel: 'load' translatedNoop! - description: 'open project from file' - buttonLabel: 'load'! Item was changed: ----- Method: ProcessBrowser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ProcessBrowser. #prototypicalToolWindow. 'Processes' translatedNoop. 'A Process Browser shows you all the running processes' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ProcessBrowser prototypicalToolWindow 'Processes' 'A Process Browser shows you all the running processes') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Tue Aug 30 17:06:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:06:36 2016 Subject: [squeak-dev] The Trunk: Tools-tfel.714.mcz Message-ID: Tim Felgentreff uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-tfel.714.mcz ==================== Summary ==================== Name: Tools-tfel.714 Author: tfel Time: 8 August 2016, 9:50:17.477458 am UUID: ed8d5345-107f-144d-a15a-95841e2e33fb Ancestors: Tools-tfel.713 Translate this debugger string =============== Diff against Tools-mt.711 =============== Item was changed: ----- Method: ArchiveViewer class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Zip Tool' translatedNoop + categories: #() + documentation: 'A viewer and editor for Zip archive files' translatedNoop - ^ self partName: 'Zip Tool' - categories: #(Tools) - documentation: 'A viewer and editor for Zip archive files' ! Item was changed: ----- Method: ArchiveViewer class>>serviceAddToNewZip (in category 'file list services') ----- serviceAddToNewZip "Answer a service for adding the file to a new zip" ^ FileModifyingSimpleServiceEntry provider: self + label: 'add file to new zip' translatedNoop - label: 'add file to new zip' selector: #addFileToNewZip: + description: 'add file to new zip' translatedNoop + buttonLabel: 'to new zip' translatedNoop! - description: 'add file to new zip' - buttonLabel: 'to new zip'! Item was changed: ----- Method: ArchiveViewer class>>serviceExtractAll (in category 'file list services') ----- serviceExtractAll "Answer a service for opening in a zip viewer" ^ FileModifyingSimpleServiceEntry provider: self + label: 'extract all to...' translatedNoop - label: 'extract all to...' selector: #extractAllFrom: + description: 'extract all files to a user-specified directory' translatedNoop + buttonLabel: 'extract all' translatedNoop! - description: 'extract all files to a user-specified directory' - buttonLabel: 'extract all'! Item was changed: ----- Method: ArchiveViewer class>>serviceOpenInZipViewer (in category 'class initialization') ----- serviceOpenInZipViewer "Answer a service for opening in a zip viewer" ^ SimpleServiceEntry provider: self + label: 'open in zip viewer' translatedNoop - label: 'open in zip viewer' selector: #openOn: + description: 'open in zip viewer' translatedNoop + buttonLabel: 'open zip' translatedNoop! - description: 'open in zip viewer' - buttonLabel: 'open zip'! Item was changed: ----- Method: ArchiveViewer>>writePrependingFile (in category 'archive operations') ----- writePrependingFile | result name prependedName | self canSaveArchive ifFalse: [ ^self ]. + result _ (StandardFileMenu newFileMenu: FileDirectory default) + startUpWithCaption: 'Destination Zip File Name:' translated. - result := (StandardFileMenu newFileMenu: FileDirectory default) - startUpWithCaption: 'Destination Zip File Name:'. result ifNil: [ ^self ]. + name _ result directory fullNameFor: result name. - name := result directory fullNameFor: result name. (archive canWriteToFileNamed: name) ifFalse: [ self inform: name, ' is used by one or more members in your archive, and cannot be overwritten. + Try writing to another file name' translated. - Try writing to another file name'. ^self ]. + result _ (StandardFileMenu oldFileMenu: FileDirectory default) + startUpWithCaption: 'Prepended File:' translated. - result := (StandardFileMenu oldFileMenu: FileDirectory default) - startUpWithCaption: 'Prepended File:'. result ifNil: [ ^self ]. + prependedName _ result directory fullNameFor: result name. - prependedName := result directory fullNameFor: result name. [ archive writeToFileNamed: name prependingFileNamed: prependedName ] on: Error do: [ :ex | self inform: ex description. ]. self changed: #memberList "in case CRC's and compressed sizes got set"! Item was changed: ----- Method: Browser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Browser. #prototypicalToolWindow. 'Browser' translatedNoop. 'A Browser is a tool that allows you to view all the code of all the classes in the system' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(#Browser #prototypicalToolWindow 'Browser' 'A Browser is a tool that allows you to view all the code of all the classes in the system' ) forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeList class>>serviceBrowseChangeFile (in category 'fileIn/Out') ----- serviceBrowseChangeFile "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseStream: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop) - description: 'open a changelist tool on this file' - buttonLabel: 'changes') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: ChangeList class>>serviceBrowseCompressedChangeFile (in category 'fileIn/Out') ----- serviceBrowseCompressedChangeFile "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseCompressedChangesFile: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop! - description: 'open a changelist tool on this file' - buttonLabel: 'changes'! Item was changed: ----- Method: ChangeList class>>serviceBrowseDotChangesFile (in category 'fileIn/Out') ----- serviceBrowseDotChangesFile "Answer a service for opening a changelist browser on the tail end of a .changes file" ^ SimpleServiceEntry provider: self + label: 'recent changes in file' translatedNoop - label: 'recent changes in file' selector: #browseRecentLogOnPath: + description: 'open a changelist tool on recent changes in file' translatedNoop + buttonLabel: 'recent changes' translatedNoop! - description: 'open a changelist tool on recent changes in file' - buttonLabel: 'recent changes'! Item was changed: ----- Method: ChangeSorter class>>registerInFlapsRegistry (in category 'deprecated') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ChangeSorter. #prototypicalToolWindow. 'Change Set' translatedNoop. 'A tool that allows you to view and manipulate all the code changes in a single change set' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ChangeSorter prototypicalToolWindow 'Change Set' 'A tool that allows you to view and manipulate all the code changes in a single change set') forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeSorter>>checkThatSidesDiffer: (in category 'changeSet menu') ----- checkThatSidesDiffer: escapeBlock "If the change sets on both sides of the dual sorter are the same, put up an error message and escape via escapeBlock, else proceed happily" + parent ifNil: [^ escapeBlock value]. "Not relevant unless in dual change sorter." + (myChangeSet == (parent other: self) changeSet) ifTrue: [self inform: 'This command requires that the change sets selected on the two sides of the change sorter *not* + be the same.' translated. - be the same.'. ^ escapeBlock value] ! Item was changed: ----- Method: Debugger>>preDebugMessageString (in category 'toolbuilder') ----- preDebugMessageString + ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!' translated].! - ^ message ifNil: ['An error has occurred; you should probably just hit ''abandon''. Sorry!!'].! Item was changed: ----- Method: DualChangeSorter class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#DualChangeSorter, #prototypicalToolWindow. 'Change Sorter' translatedNoop. 'Shows two change sets side by side' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(DualChangeSorter prototypicalToolWindow 'Change Sorter' 'Shows two change sets side by side') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCode (in category 'file list services') ----- serviceBrowseCode "Answer the service of opening a file-contents browser" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCodeFiles (in category 'file list services') ----- serviceBrowseCodeFiles ^ (SimpleServiceEntry provider: self + label: 'browse code files' translatedNoop - label: 'browse code files' selector: #selectAndBrowseFile:) argumentGetter: [ :fileList | fileList ]; yourself! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCompressedCode (in category 'file list services') ----- serviceBrowseCompressedCode "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseCompressedCodeStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileList class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#FileList . #prototypicalToolWindow, 'File List' translatedNoop. 'A File List is a tool for browsing folders and files on disks and on ftp types.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(FileList prototypicalToolWindow 'File List' 'A File List is a tool for browsing folders and files on disks and on ftp types.') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileList>>deleteDirectory (in category 'volume list and pattern') ----- deleteDirectory "Remove the currently selected directory" | localDirName | + directory entries size = 0 ifFalse:[^self inform:'Directory must be empty' translated]. + localDirName _ directory localName. + (self confirm: ('Really delete {1}?' translated format: {localDirName})) ifFalse: [^ self]. - directory entries size = 0 ifFalse:[^self inform:'Directory must be empty']. - localDirName := directory localName. - (self confirm: 'Really delete ' , localDirName , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. directory deleteDirectory: localDirName. self updateFileList.! Item was changed: ----- Method: FileList>>serviceAddNewDirectory (in category 'own services') ----- serviceAddNewDirectory "Answer a service entry characterizing the 'add new directory' command" ^ SimpleServiceEntry provider: self + label: 'add new directory' translatedNoop - label: 'add new directory' selector: #addNewDirectory + description: 'adds a new, empty directory (folder)' translatedNoop! - description: 'adds a new, empty directory (folder)' ! Item was changed: ----- Method: FileList>>serviceAddNewFile (in category 'own services') ----- serviceAddNewFile "Answer a service entry characterizing the 'add new file' command" + ^ SimpleServiceEntry + provider: self + label: 'add new file' translatedNoop + selector: #addNewFile + description: 'create a new,. empty file, and add it to the current directory.' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'add new file' selector: #addNewFile description: 'create a new,. empty file, and add it to the current directory.'! Item was changed: ----- Method: FileList>>serviceAllFileOptions (in category 'own services') ----- serviceAllFileOptions + ^ {SimpleServiceEntry + provider: self + label: 'more...' translatedNoop + selector: #offerAllFileOptions + description: 'show all the options available' translatedNoop}! - ^ {SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions description: 'show all the options available'}! Item was changed: ----- Method: FileList>>serviceCompressFile (in category 'own services') ----- serviceCompressFile "Answer a service for compressing a file" + ^ SimpleServiceEntry + provider: self + label: 'compress' translatedNoop + selector: #compressFile + description: 'compress file' translatedNoop + buttonLabel: 'compress' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'compress' selector: #compressFile description: 'compress file' buttonLabel: 'compress'! Item was changed: ----- Method: FileList>>serviceCopyName (in category 'own services') ----- serviceCopyName + ^ (SimpleServiceEntry + provider: self + label: 'copy name to clipboard' translatedNoop + selector: #copyName + description:'copy name to clipboard' translatedNoop )! - ^ (SimpleServiceEntry provider: self label: 'copy name to clipboard' selector: #copyName description:'copy name to clipboard' )! Item was changed: ----- Method: FileList>>serviceDeleteFile (in category 'own services') ----- serviceDeleteFile + ^ (SimpleServiceEntry + provider: self + label: 'delete' translatedNoop + selector: #deleteFile) + description: 'delete the seleted item' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'delete' selector: #deleteFile) - description: 'delete the seleted item'! Item was changed: ----- Method: FileList>>serviceGet (in category 'own services') ----- serviceGet "Answer a service for getting the entire file" ^ (SimpleServiceEntry provider: self + label: 'get entire file' translatedNoop - label: 'get entire file' selector: #get + description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.' translatedNoop)! - description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.')! Item was changed: ----- Method: FileList>>serviceGetEncodedText (in category 'own services') ----- serviceGetEncodedText ^ (SimpleServiceEntry provider: self + label: 'view as encoded text' translatedNoop - label: 'view as encoded text' selector: #getEncodedText + description: 'view as encoded text' translatedNoop) - description: 'view as encoded text') ! Item was changed: ----- Method: FileList>>serviceGetHex (in category 'own services') ----- serviceGetHex ^ (SimpleServiceEntry provider: self + label: 'view as hex' translatedNoop - label: 'view as hex' selector: #getHex + description: 'view as hex' translatedNoop) - description: 'view as hex') ! Item was changed: ----- Method: FileList>>serviceRenameFile (in category 'own services') ----- serviceRenameFile + ^ (SimpleServiceEntry + provider: self + label: 'rename' translatedNoop + selector: #renameFile + description: 'rename file' translatedNoop)! - ^ (SimpleServiceEntry provider: self label: 'rename' selector: #renameFile description: 'rename file')! Item was changed: ----- Method: FileList>>serviceSortByDate (in category 'own services') ----- serviceSortByDate "Answer a service for sorting by date" ^ (SimpleServiceEntry new provider: self + label: 'by date' translatedNoop - label: 'by date' selector: #sortByDate + description: 'sort entries by date' translatedNoop) - description: 'sort entries by date') extraSelector: #sortingByDate; + buttonLabel: 'date' translatedNoop! - buttonLabel: 'date'! Item was changed: ----- Method: FileList>>serviceSortByName (in category 'own services') ----- serviceSortByName "Answer a service for soring by name" ^ (SimpleServiceEntry new + provider: self label: 'by name' translatedNoop + selector: #sortByName + description: 'sort entries by name' translatedNoop) - provider: self label: 'by name' selector: #sortByName - description: 'sort entries by name') extraSelector: #sortingByName; + buttonLabel: 'name' translatedNoop! - buttonLabel: 'name'! Item was changed: ----- Method: FileList>>serviceSortBySize (in category 'own services') ----- serviceSortBySize "Answer a service for sorting by size" ^ (SimpleServiceEntry provider: self + label: 'by size' translatedNoop - label: 'by size' selector: #sortBySize + description: 'sort entries by size' translatedNoop) - description: 'sort entries by size') extraSelector: #sortingBySize; + buttonLabel: 'size' translatedNoop! - buttonLabel: 'size'! Item was changed: ----- Method: FileList>>serviceViewContentsInWorkspace (in category 'own services') ----- serviceViewContentsInWorkspace "Answer a service for viewing the contents of a file in a workspace" + ^ (SimpleServiceEntry provider: self label: 'workspace with contents' translatedNoop + selector: #viewContentsInWorkspace) + description: 'open a new Workspace whose contents are set to the contents of this file' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'workspace with contents' selector: #viewContentsInWorkspace) - description: 'open a new Workspace whose contents are set to the contents of this file'! Item was changed: ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld:reallyLoad:dirFilterType: (in category 'blue ui') ----- morphicViewProjectLoader2InWorld: aWorld reallyLoad: aBoolean dirFilterType: aSymbol | window aFileList buttons treePane textColor1 fileListPane pane2a pane2b treeExtent filesExtent | window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: FileDirectory default. aFileList optionalButtonSpecs: aFileList servicesForProjectLoader; fileSelectionBlock: ( aSymbol == #limitedSuperSwikiDirectoryList ifTrue: [ MessageSend receiver: self selector: #projectOnlySelectionMethod: ] ifFalse: [ self projectOnlySelectionBlock ] ); "dirSelectionBlock: self hideSqueakletDirectoryBlock;" modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each | self blueButtonText: each first textColor: textColor1 color: each second inWindow: window ]. aWorld width < 800 ifTrue: [ treeExtent := 150@300. filesExtent := 350@300. ] ifFalse: [ treeExtent := 250@300. filesExtent := 350@300. ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: aSymbol) extent: treeExtent; retractable: false; borderWidth: 0. fileListPane := aFileList morphicFileListPane extent: filesExtent; retractable: false; borderWidth: 0. window addARow: { window fancyText: 'Load A Project' translated font: Preferences standardEToysTitleFont color: textColor1 }; addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second }; addARow: { window fancyText: 'Please select a project' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { (window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. (window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " buttons first on: #mouseUp send: (aBoolean ifTrue: [#okHitForProjectLoader] ifFalse: [#okHit]) to: aFileList. buttons second on: #mouseUp send: #cancelHit to: aFileList. aFileList postOpen. window position: aWorld topLeft + (aWorld extent - window extent // 2). window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). window becomeModal. ^ window openInWorld: aWorld.! Item was changed: ----- Method: FileList2 class>>morphicViewProjectSaverFor: (in category 'blue ui') ----- morphicViewProjectSaverFor: aProject " (FileList2 morphicViewProjectSaverFor: Project current) openInWorld " | window aFileList buttons treePane pane2 textColor1 option treeExtent buttonData buttonRow | + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: ServerDirectory projectDefaultDirectory. aFileList dirSelectionBlock: self hideSqueakletDirectoryBlock. window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. aFileList modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttonData := Preferences enableLocalSave ifTrue: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Save on local disk only'. #saveLocalOnlyHit. 'saves in the Squeaklets folder'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }] ifFalse: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }]. buttons := buttonData collect: [ :each | (self blueButtonText: each first textColor: textColor1 color: each fourth inWindow: window) setBalloonText: each third translated; hResizing: #shrinkWrap; on: #mouseUp send: each second to: aFileList ]. option := aProject world valueOfProperty: #SuperSwikiPublishOptions ifAbsent: [#initialDirectoryList]. aProject world removeProperty: #SuperSwikiPublishOptions. treeExtent := World height < 500 ifTrue: [ 350@150 ] ifFalse: [ 350@300 ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: option) extent: treeExtent; retractable: false; borderWidth: 0. window addARowCentered: { window fancyText: 'Publish This Project' translated font: Preferences standardEToysTitleFont color: textColor1 }. buttonRow := OrderedCollection new. buttons do: [:button | buttonRow add: button] separatedBy: [buttonRow add: ((Morph new extent: 30@5) color: Color transparent)]. " addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second. (Morph new extent: 30@5) color: Color transparent. buttons third };" window addARowCentered: buttonRow; addARowCentered: { (window inAColumn: {(ProjectViewMorph on: aProject) lock}) layoutInset: 4}; addARowCentered: { window fancyText: 'Please select a folder' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { ( window inAColumn: { (pane2 := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor } ) layoutInset: 10 }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2 fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " window setProperty: #morphicLayerNumber toValue: 11. aFileList postOpen. window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). ^ window ! Item was changed: ----- Method: FileList2>>serviceCancel (in category 'own services') ----- serviceCancel "Answer a service for hitting the cancel button" ^ (SimpleServiceEntry new + provider: self + label: 'cancel' translatedNoop + selector: #cancelHit + description: 'hit here to cancel ' translatedNoop) + buttonLabel: 'cancel' translatedNoop! - provider: self label: 'cancel' selector: #cancelHit - description: 'hit here to cancel ') - buttonLabel: 'cancel'! Item was changed: ----- Method: FileList2>>serviceOkay (in category 'own services') ----- serviceOkay "Answer a service for hitting the okay button" ^ (SimpleServiceEntry new + provider: self + label: 'okay' translatedNoop + selector: #okHit + description: 'hit here to accept the current selection' translatedNoop) + buttonLabel: 'ok' translatedNoop! - provider: self label: 'okay' selector: #okHit - description: 'hit here to accept the current selection') - buttonLabel: 'ok'! Item was changed: ----- Method: FileList2>>serviceOpenProjectFromFile (in category 'own services') ----- serviceOpenProjectFromFile "Answer a service for opening a .pr project file" ^ SimpleServiceEntry provider: self + label: 'load as project' translatedNoop - label: 'load as project' selector: #openProjectFromFile + description: 'open project from file' translatedNoop + buttonLabel: 'load' translatedNoop! - description: 'open project from file' - buttonLabel: 'load'! Item was changed: ----- Method: ProcessBrowser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ProcessBrowser. #prototypicalToolWindow. 'Processes' translatedNoop. 'A Process Browser shows you all the running processes' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ProcessBrowser prototypicalToolWindow 'Processes' 'A Process Browser shows you all the running processes') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Tue Aug 30 17:06:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:06:51 2016 Subject: [squeak-dev] The Trunk: Tools-tfel.713.mcz Message-ID: Tim Felgentreff uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-tfel.713.mcz ==================== Summary ==================== Name: Tools-tfel.713 Author: tfel Time: 7 August 2016, 12:23:14.060169 pm UUID: 49f4e8ed-6302-4bcd-93dc-a1c9072eebb0 Ancestors: Tools-tfel.712 fix font color in Project load and save dialogs, you really cannot see the default =============== Diff against Tools-mt.711 =============== Item was changed: ----- Method: ArchiveViewer class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Zip Tool' translatedNoop + categories: #() + documentation: 'A viewer and editor for Zip archive files' translatedNoop - ^ self partName: 'Zip Tool' - categories: #(Tools) - documentation: 'A viewer and editor for Zip archive files' ! Item was changed: ----- Method: ArchiveViewer class>>serviceAddToNewZip (in category 'file list services') ----- serviceAddToNewZip "Answer a service for adding the file to a new zip" ^ FileModifyingSimpleServiceEntry provider: self + label: 'add file to new zip' translatedNoop - label: 'add file to new zip' selector: #addFileToNewZip: + description: 'add file to new zip' translatedNoop + buttonLabel: 'to new zip' translatedNoop! - description: 'add file to new zip' - buttonLabel: 'to new zip'! Item was changed: ----- Method: ArchiveViewer class>>serviceExtractAll (in category 'file list services') ----- serviceExtractAll "Answer a service for opening in a zip viewer" ^ FileModifyingSimpleServiceEntry provider: self + label: 'extract all to...' translatedNoop - label: 'extract all to...' selector: #extractAllFrom: + description: 'extract all files to a user-specified directory' translatedNoop + buttonLabel: 'extract all' translatedNoop! - description: 'extract all files to a user-specified directory' - buttonLabel: 'extract all'! Item was changed: ----- Method: ArchiveViewer class>>serviceOpenInZipViewer (in category 'class initialization') ----- serviceOpenInZipViewer "Answer a service for opening in a zip viewer" ^ SimpleServiceEntry provider: self + label: 'open in zip viewer' translatedNoop - label: 'open in zip viewer' selector: #openOn: + description: 'open in zip viewer' translatedNoop + buttonLabel: 'open zip' translatedNoop! - description: 'open in zip viewer' - buttonLabel: 'open zip'! Item was changed: ----- Method: ArchiveViewer>>writePrependingFile (in category 'archive operations') ----- writePrependingFile | result name prependedName | self canSaveArchive ifFalse: [ ^self ]. + result _ (StandardFileMenu newFileMenu: FileDirectory default) + startUpWithCaption: 'Destination Zip File Name:' translated. - result := (StandardFileMenu newFileMenu: FileDirectory default) - startUpWithCaption: 'Destination Zip File Name:'. result ifNil: [ ^self ]. + name _ result directory fullNameFor: result name. - name := result directory fullNameFor: result name. (archive canWriteToFileNamed: name) ifFalse: [ self inform: name, ' is used by one or more members in your archive, and cannot be overwritten. + Try writing to another file name' translated. - Try writing to another file name'. ^self ]. + result _ (StandardFileMenu oldFileMenu: FileDirectory default) + startUpWithCaption: 'Prepended File:' translated. - result := (StandardFileMenu oldFileMenu: FileDirectory default) - startUpWithCaption: 'Prepended File:'. result ifNil: [ ^self ]. + prependedName _ result directory fullNameFor: result name. - prependedName := result directory fullNameFor: result name. [ archive writeToFileNamed: name prependingFileNamed: prependedName ] on: Error do: [ :ex | self inform: ex description. ]. self changed: #memberList "in case CRC's and compressed sizes got set"! Item was changed: ----- Method: Browser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Browser. #prototypicalToolWindow. 'Browser' translatedNoop. 'A Browser is a tool that allows you to view all the code of all the classes in the system' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(#Browser #prototypicalToolWindow 'Browser' 'A Browser is a tool that allows you to view all the code of all the classes in the system' ) forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeList class>>serviceBrowseChangeFile (in category 'fileIn/Out') ----- serviceBrowseChangeFile "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseStream: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop) - description: 'open a changelist tool on this file' - buttonLabel: 'changes') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: ChangeList class>>serviceBrowseCompressedChangeFile (in category 'fileIn/Out') ----- serviceBrowseCompressedChangeFile "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseCompressedChangesFile: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop! - description: 'open a changelist tool on this file' - buttonLabel: 'changes'! Item was changed: ----- Method: ChangeList class>>serviceBrowseDotChangesFile (in category 'fileIn/Out') ----- serviceBrowseDotChangesFile "Answer a service for opening a changelist browser on the tail end of a .changes file" ^ SimpleServiceEntry provider: self + label: 'recent changes in file' translatedNoop - label: 'recent changes in file' selector: #browseRecentLogOnPath: + description: 'open a changelist tool on recent changes in file' translatedNoop + buttonLabel: 'recent changes' translatedNoop! - description: 'open a changelist tool on recent changes in file' - buttonLabel: 'recent changes'! Item was changed: ----- Method: ChangeSorter class>>registerInFlapsRegistry (in category 'deprecated') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ChangeSorter. #prototypicalToolWindow. 'Change Set' translatedNoop. 'A tool that allows you to view and manipulate all the code changes in a single change set' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ChangeSorter prototypicalToolWindow 'Change Set' 'A tool that allows you to view and manipulate all the code changes in a single change set') forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeSorter>>checkThatSidesDiffer: (in category 'changeSet menu') ----- checkThatSidesDiffer: escapeBlock "If the change sets on both sides of the dual sorter are the same, put up an error message and escape via escapeBlock, else proceed happily" + parent ifNil: [^ escapeBlock value]. "Not relevant unless in dual change sorter." + (myChangeSet == (parent other: self) changeSet) ifTrue: [self inform: 'This command requires that the change sets selected on the two sides of the change sorter *not* + be the same.' translated. - be the same.'. ^ escapeBlock value] ! Item was changed: ----- Method: DualChangeSorter class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#DualChangeSorter, #prototypicalToolWindow. 'Change Sorter' translatedNoop. 'Shows two change sets side by side' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(DualChangeSorter prototypicalToolWindow 'Change Sorter' 'Shows two change sets side by side') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCode (in category 'file list services') ----- serviceBrowseCode "Answer the service of opening a file-contents browser" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCodeFiles (in category 'file list services') ----- serviceBrowseCodeFiles ^ (SimpleServiceEntry provider: self + label: 'browse code files' translatedNoop - label: 'browse code files' selector: #selectAndBrowseFile:) argumentGetter: [ :fileList | fileList ]; yourself! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCompressedCode (in category 'file list services') ----- serviceBrowseCompressedCode "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseCompressedCodeStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileList class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#FileList . #prototypicalToolWindow, 'File List' translatedNoop. 'A File List is a tool for browsing folders and files on disks and on ftp types.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(FileList prototypicalToolWindow 'File List' 'A File List is a tool for browsing folders and files on disks and on ftp types.') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileList>>deleteDirectory (in category 'volume list and pattern') ----- deleteDirectory "Remove the currently selected directory" | localDirName | + directory entries size = 0 ifFalse:[^self inform:'Directory must be empty' translated]. + localDirName _ directory localName. + (self confirm: ('Really delete {1}?' translated format: {localDirName})) ifFalse: [^ self]. - directory entries size = 0 ifFalse:[^self inform:'Directory must be empty']. - localDirName := directory localName. - (self confirm: 'Really delete ' , localDirName , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. directory deleteDirectory: localDirName. self updateFileList.! Item was changed: ----- Method: FileList>>serviceAddNewDirectory (in category 'own services') ----- serviceAddNewDirectory "Answer a service entry characterizing the 'add new directory' command" ^ SimpleServiceEntry provider: self + label: 'add new directory' translatedNoop - label: 'add new directory' selector: #addNewDirectory + description: 'adds a new, empty directory (folder)' translatedNoop! - description: 'adds a new, empty directory (folder)' ! Item was changed: ----- Method: FileList>>serviceAddNewFile (in category 'own services') ----- serviceAddNewFile "Answer a service entry characterizing the 'add new file' command" + ^ SimpleServiceEntry + provider: self + label: 'add new file' translatedNoop + selector: #addNewFile + description: 'create a new,. empty file, and add it to the current directory.' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'add new file' selector: #addNewFile description: 'create a new,. empty file, and add it to the current directory.'! Item was changed: ----- Method: FileList>>serviceAllFileOptions (in category 'own services') ----- serviceAllFileOptions + ^ {SimpleServiceEntry + provider: self + label: 'more...' translatedNoop + selector: #offerAllFileOptions + description: 'show all the options available' translatedNoop}! - ^ {SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions description: 'show all the options available'}! Item was changed: ----- Method: FileList>>serviceCompressFile (in category 'own services') ----- serviceCompressFile "Answer a service for compressing a file" + ^ SimpleServiceEntry + provider: self + label: 'compress' translatedNoop + selector: #compressFile + description: 'compress file' translatedNoop + buttonLabel: 'compress' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'compress' selector: #compressFile description: 'compress file' buttonLabel: 'compress'! Item was changed: ----- Method: FileList>>serviceCopyName (in category 'own services') ----- serviceCopyName + ^ (SimpleServiceEntry + provider: self + label: 'copy name to clipboard' translatedNoop + selector: #copyName + description:'copy name to clipboard' translatedNoop )! - ^ (SimpleServiceEntry provider: self label: 'copy name to clipboard' selector: #copyName description:'copy name to clipboard' )! Item was changed: ----- Method: FileList>>serviceDeleteFile (in category 'own services') ----- serviceDeleteFile + ^ (SimpleServiceEntry + provider: self + label: 'delete' translatedNoop + selector: #deleteFile) + description: 'delete the seleted item' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'delete' selector: #deleteFile) - description: 'delete the seleted item'! Item was changed: ----- Method: FileList>>serviceGet (in category 'own services') ----- serviceGet "Answer a service for getting the entire file" ^ (SimpleServiceEntry provider: self + label: 'get entire file' translatedNoop - label: 'get entire file' selector: #get + description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.' translatedNoop)! - description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.')! Item was changed: ----- Method: FileList>>serviceGetEncodedText (in category 'own services') ----- serviceGetEncodedText ^ (SimpleServiceEntry provider: self + label: 'view as encoded text' translatedNoop - label: 'view as encoded text' selector: #getEncodedText + description: 'view as encoded text' translatedNoop) - description: 'view as encoded text') ! Item was changed: ----- Method: FileList>>serviceGetHex (in category 'own services') ----- serviceGetHex ^ (SimpleServiceEntry provider: self + label: 'view as hex' translatedNoop - label: 'view as hex' selector: #getHex + description: 'view as hex' translatedNoop) - description: 'view as hex') ! Item was changed: ----- Method: FileList>>serviceRenameFile (in category 'own services') ----- serviceRenameFile + ^ (SimpleServiceEntry + provider: self + label: 'rename' translatedNoop + selector: #renameFile + description: 'rename file' translatedNoop)! - ^ (SimpleServiceEntry provider: self label: 'rename' selector: #renameFile description: 'rename file')! Item was changed: ----- Method: FileList>>serviceSortByDate (in category 'own services') ----- serviceSortByDate "Answer a service for sorting by date" ^ (SimpleServiceEntry new provider: self + label: 'by date' translatedNoop - label: 'by date' selector: #sortByDate + description: 'sort entries by date' translatedNoop) - description: 'sort entries by date') extraSelector: #sortingByDate; + buttonLabel: 'date' translatedNoop! - buttonLabel: 'date'! Item was changed: ----- Method: FileList>>serviceSortByName (in category 'own services') ----- serviceSortByName "Answer a service for soring by name" ^ (SimpleServiceEntry new + provider: self label: 'by name' translatedNoop + selector: #sortByName + description: 'sort entries by name' translatedNoop) - provider: self label: 'by name' selector: #sortByName - description: 'sort entries by name') extraSelector: #sortingByName; + buttonLabel: 'name' translatedNoop! - buttonLabel: 'name'! Item was changed: ----- Method: FileList>>serviceSortBySize (in category 'own services') ----- serviceSortBySize "Answer a service for sorting by size" ^ (SimpleServiceEntry provider: self + label: 'by size' translatedNoop - label: 'by size' selector: #sortBySize + description: 'sort entries by size' translatedNoop) - description: 'sort entries by size') extraSelector: #sortingBySize; + buttonLabel: 'size' translatedNoop! - buttonLabel: 'size'! Item was changed: ----- Method: FileList>>serviceViewContentsInWorkspace (in category 'own services') ----- serviceViewContentsInWorkspace "Answer a service for viewing the contents of a file in a workspace" + ^ (SimpleServiceEntry provider: self label: 'workspace with contents' translatedNoop + selector: #viewContentsInWorkspace) + description: 'open a new Workspace whose contents are set to the contents of this file' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'workspace with contents' selector: #viewContentsInWorkspace) - description: 'open a new Workspace whose contents are set to the contents of this file'! Item was changed: ----- Method: FileList2 class>>morphicViewProjectLoader2InWorld:reallyLoad:dirFilterType: (in category 'blue ui') ----- morphicViewProjectLoader2InWorld: aWorld reallyLoad: aBoolean dirFilterType: aSymbol | window aFileList buttons treePane textColor1 fileListPane pane2a pane2b treeExtent filesExtent | window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: FileDirectory default. aFileList optionalButtonSpecs: aFileList servicesForProjectLoader; fileSelectionBlock: ( aSymbol == #limitedSuperSwikiDirectoryList ifTrue: [ MessageSend receiver: self selector: #projectOnlySelectionMethod: ] ifFalse: [ self projectOnlySelectionBlock ] ); "dirSelectionBlock: self hideSqueakletDirectoryBlock;" modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttons := {{'OK'. ColorTheme current okColor}. {'Cancel'. ColorTheme current cancelColor}} collect: [ :each | self blueButtonText: each first textColor: textColor1 color: each second inWindow: window ]. aWorld width < 800 ifTrue: [ treeExtent := 150@300. filesExtent := 350@300. ] ifFalse: [ treeExtent := 250@300. filesExtent := 350@300. ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: aSymbol) extent: treeExtent; retractable: false; borderWidth: 0. fileListPane := aFileList morphicFileListPane extent: filesExtent; retractable: false; borderWidth: 0. window addARow: { window fancyText: 'Load A Project' translated font: Preferences standardEToysTitleFont color: textColor1 }; addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second }; addARow: { window fancyText: 'Please select a project' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { (window inAColumn: {(pane2a := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. (window inAColumn: {(pane2b := window inARow: {window inAColumn: {fileListPane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor }) layoutInset: 10. }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2a fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). pane2b fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " buttons first on: #mouseUp send: (aBoolean ifTrue: [#okHitForProjectLoader] ifFalse: [#okHit]) to: aFileList. buttons second on: #mouseUp send: #cancelHit to: aFileList. aFileList postOpen. window position: aWorld topLeft + (aWorld extent - window extent // 2). window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). window becomeModal. ^ window openInWorld: aWorld.! Item was changed: ----- Method: FileList2 class>>morphicViewProjectSaverFor: (in category 'blue ui') ----- morphicViewProjectSaverFor: aProject " (FileList2 morphicViewProjectSaverFor: Project current) openInWorld " | window aFileList buttons treePane pane2 textColor1 option treeExtent buttonData buttonRow | + textColor1 := Color black. - textColor1 := Color r: 0.742 g: 0.839 b: 1.0. aFileList := self new directory: ServerDirectory projectDefaultDirectory. aFileList dirSelectionBlock: self hideSqueakletDirectoryBlock. window := AlignmentMorphBob1 newColumn. window hResizing: #shrinkWrap; vResizing: #shrinkWrap. aFileList modalView: window. window setProperty: #FileList toValue: aFileList; wrapCentering: #center; cellPositioning: #topCenter; borderWidth: ColorTheme current dialogBorderWidth; borderColor: ColorTheme current dialogBorderColor; useRoundedCorners. buttonData := Preferences enableLocalSave ifTrue: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Save on local disk only'. #saveLocalOnlyHit. 'saves in the Squeaklets folder'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }] ifFalse: [{ {'Save'. #okHit. 'Save in the place specified below, and in the Squeaklets folder on your local disk'. ColorTheme current okColor}. {'Cancel'. #cancelHit. 'return without saving'. ColorTheme current cancelColor} }]. buttons := buttonData collect: [ :each | (self blueButtonText: each first textColor: textColor1 color: each fourth inWindow: window) setBalloonText: each third translated; hResizing: #shrinkWrap; on: #mouseUp send: each second to: aFileList ]. option := aProject world valueOfProperty: #SuperSwikiPublishOptions ifAbsent: [#initialDirectoryList]. aProject world removeProperty: #SuperSwikiPublishOptions. treeExtent := World height < 500 ifTrue: [ 350@150 ] ifFalse: [ 350@300 ]. (treePane := aFileList morphicDirectoryTreePaneFiltered: option) extent: treeExtent; retractable: false; borderWidth: 0. window addARowCentered: { window fancyText: 'Publish This Project' translated font: Preferences standardEToysTitleFont color: textColor1 }. buttonRow := OrderedCollection new. buttons do: [:button | buttonRow add: button] separatedBy: [buttonRow add: ((Morph new extent: 30@5) color: Color transparent)]. " addARowCentered: { buttons first. (Morph new extent: 30@5) color: Color transparent. buttons second. (Morph new extent: 30@5) color: Color transparent. buttons third };" window addARowCentered: buttonRow; addARowCentered: { (window inAColumn: {(ProjectViewMorph on: aProject) lock}) layoutInset: 4}; addARowCentered: { window fancyText: 'Please select a folder' translated font: Preferences standardEToysFont color: textColor1 }; addARow: { ( window inAColumn: { (pane2 := window inARow: {window inAColumn: {treePane}}) useRoundedCorners; layoutInset: 0; borderWidth: ColorTheme current dialogPaneBorderWidth; borderColor: ColorTheme current dialogPaneBorderColor } ) layoutInset: 10 }. window fullBounds. window fillWithRamp: ColorTheme current dialogRampOrColor oriented: 0.65. pane2 fillWithRamp: ColorTheme current dialogPaneRampOrColor oriented: (0.7 @ 0.35). " buttons do: [ :each | each fillWithRamp: ColorTheme current dialogButtonsRampOrColor oriented: (0.75 @ 0). ]. " window setProperty: #morphicLayerNumber toValue: 11. aFileList postOpen. window adoptPaneColor: (Color r: 0.548 g: 0.677 b: 1.0). ^ window ! Item was changed: ----- Method: FileList2>>serviceCancel (in category 'own services') ----- serviceCancel "Answer a service for hitting the cancel button" ^ (SimpleServiceEntry new + provider: self + label: 'cancel' translatedNoop + selector: #cancelHit + description: 'hit here to cancel ' translatedNoop) + buttonLabel: 'cancel' translatedNoop! - provider: self label: 'cancel' selector: #cancelHit - description: 'hit here to cancel ') - buttonLabel: 'cancel'! Item was changed: ----- Method: FileList2>>serviceOkay (in category 'own services') ----- serviceOkay "Answer a service for hitting the okay button" ^ (SimpleServiceEntry new + provider: self + label: 'okay' translatedNoop + selector: #okHit + description: 'hit here to accept the current selection' translatedNoop) + buttonLabel: 'ok' translatedNoop! - provider: self label: 'okay' selector: #okHit - description: 'hit here to accept the current selection') - buttonLabel: 'ok'! Item was changed: ----- Method: FileList2>>serviceOpenProjectFromFile (in category 'own services') ----- serviceOpenProjectFromFile "Answer a service for opening a .pr project file" ^ SimpleServiceEntry provider: self + label: 'load as project' translatedNoop - label: 'load as project' selector: #openProjectFromFile + description: 'open project from file' translatedNoop + buttonLabel: 'load' translatedNoop! - description: 'open project from file' - buttonLabel: 'load'! Item was changed: ----- Method: ProcessBrowser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ProcessBrowser. #prototypicalToolWindow. 'Processes' translatedNoop. 'A Process Browser shows you all the running processes' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ProcessBrowser prototypicalToolWindow 'Processes' 'A Process Browser shows you all the running processes') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Tue Aug 30 17:06:44 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:06:57 2016 Subject: [squeak-dev] The Trunk: Tools-tfel.712.mcz Message-ID: Tim Felgentreff uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-tfel.712.mcz ==================== Summary ==================== Name: Tools-tfel.712 Author: tfel Time: 2 August 2016, 10:05:33.741368 am UUID: dde7b8ae-d306-0941-b920-5dca4cacf558 Ancestors: Tools-mt.711, Tools-kfr.15 merge from Squeakland Etoys image =============== Diff against Tools-mt.711 =============== Item was changed: ----- Method: ArchiveViewer class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Zip Tool' translatedNoop + categories: #() + documentation: 'A viewer and editor for Zip archive files' translatedNoop - ^ self partName: 'Zip Tool' - categories: #(Tools) - documentation: 'A viewer and editor for Zip archive files' ! Item was changed: ----- Method: ArchiveViewer class>>serviceAddToNewZip (in category 'file list services') ----- serviceAddToNewZip "Answer a service for adding the file to a new zip" ^ FileModifyingSimpleServiceEntry provider: self + label: 'add file to new zip' translatedNoop - label: 'add file to new zip' selector: #addFileToNewZip: + description: 'add file to new zip' translatedNoop + buttonLabel: 'to new zip' translatedNoop! - description: 'add file to new zip' - buttonLabel: 'to new zip'! Item was changed: ----- Method: ArchiveViewer class>>serviceExtractAll (in category 'file list services') ----- serviceExtractAll "Answer a service for opening in a zip viewer" ^ FileModifyingSimpleServiceEntry provider: self + label: 'extract all to...' translatedNoop - label: 'extract all to...' selector: #extractAllFrom: + description: 'extract all files to a user-specified directory' translatedNoop + buttonLabel: 'extract all' translatedNoop! - description: 'extract all files to a user-specified directory' - buttonLabel: 'extract all'! Item was changed: ----- Method: ArchiveViewer class>>serviceOpenInZipViewer (in category 'class initialization') ----- serviceOpenInZipViewer "Answer a service for opening in a zip viewer" ^ SimpleServiceEntry provider: self + label: 'open in zip viewer' translatedNoop - label: 'open in zip viewer' selector: #openOn: + description: 'open in zip viewer' translatedNoop + buttonLabel: 'open zip' translatedNoop! - description: 'open in zip viewer' - buttonLabel: 'open zip'! Item was changed: ----- Method: ArchiveViewer>>writePrependingFile (in category 'archive operations') ----- writePrependingFile | result name prependedName | self canSaveArchive ifFalse: [ ^self ]. + result _ (StandardFileMenu newFileMenu: FileDirectory default) + startUpWithCaption: 'Destination Zip File Name:' translated. - result := (StandardFileMenu newFileMenu: FileDirectory default) - startUpWithCaption: 'Destination Zip File Name:'. result ifNil: [ ^self ]. + name _ result directory fullNameFor: result name. - name := result directory fullNameFor: result name. (archive canWriteToFileNamed: name) ifFalse: [ self inform: name, ' is used by one or more members in your archive, and cannot be overwritten. + Try writing to another file name' translated. - Try writing to another file name'. ^self ]. + result _ (StandardFileMenu oldFileMenu: FileDirectory default) + startUpWithCaption: 'Prepended File:' translated. - result := (StandardFileMenu oldFileMenu: FileDirectory default) - startUpWithCaption: 'Prepended File:'. result ifNil: [ ^self ]. + prependedName _ result directory fullNameFor: result name. - prependedName := result directory fullNameFor: result name. [ archive writeToFileNamed: name prependingFileNamed: prependedName ] on: Error do: [ :ex | self inform: ex description. ]. self changed: #memberList "in case CRC's and compressed sizes got set"! Item was changed: ----- Method: Browser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Browser. #prototypicalToolWindow. 'Browser' translatedNoop. 'A Browser is a tool that allows you to view all the code of all the classes in the system' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(#Browser #prototypicalToolWindow 'Browser' 'A Browser is a tool that allows you to view all the code of all the classes in the system' ) forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeList class>>serviceBrowseChangeFile (in category 'fileIn/Out') ----- serviceBrowseChangeFile "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseStream: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop) - description: 'open a changelist tool on this file' - buttonLabel: 'changes') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: ChangeList class>>serviceBrowseCompressedChangeFile (in category 'fileIn/Out') ----- serviceBrowseCompressedChangeFile "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'changelist browser' translatedNoop - label: 'changelist browser' selector: #browseCompressedChangesFile: + description: 'open a changelist tool on this file' translatedNoop + buttonLabel: 'changes' translatedNoop! - description: 'open a changelist tool on this file' - buttonLabel: 'changes'! Item was changed: ----- Method: ChangeList class>>serviceBrowseDotChangesFile (in category 'fileIn/Out') ----- serviceBrowseDotChangesFile "Answer a service for opening a changelist browser on the tail end of a .changes file" ^ SimpleServiceEntry provider: self + label: 'recent changes in file' translatedNoop - label: 'recent changes in file' selector: #browseRecentLogOnPath: + description: 'open a changelist tool on recent changes in file' translatedNoop + buttonLabel: 'recent changes' translatedNoop! - description: 'open a changelist tool on recent changes in file' - buttonLabel: 'recent changes'! Item was changed: ----- Method: ChangeSorter class>>registerInFlapsRegistry (in category 'deprecated') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ChangeSorter. #prototypicalToolWindow. 'Change Set' translatedNoop. 'A tool that allows you to view and manipulate all the code changes in a single change set' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ChangeSorter prototypicalToolWindow 'Change Set' 'A tool that allows you to view and manipulate all the code changes in a single change set') forFlapNamed: 'Tools']! Item was changed: ----- Method: ChangeSorter>>checkThatSidesDiffer: (in category 'changeSet menu') ----- checkThatSidesDiffer: escapeBlock "If the change sets on both sides of the dual sorter are the same, put up an error message and escape via escapeBlock, else proceed happily" + parent ifNil: [^ escapeBlock value]. "Not relevant unless in dual change sorter." + (myChangeSet == (parent other: self) changeSet) ifTrue: [self inform: 'This command requires that the change sets selected on the two sides of the change sorter *not* + be the same.' translated. - be the same.'. ^ escapeBlock value] ! Item was changed: ----- Method: DualChangeSorter class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#DualChangeSorter, #prototypicalToolWindow. 'Change Sorter' translatedNoop. 'Shows two change sets side by side' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(DualChangeSorter prototypicalToolWindow 'Change Sorter' 'Shows two change sets side by side') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCode (in category 'file list services') ----- serviceBrowseCode "Answer the service of opening a file-contents browser" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCodeFiles (in category 'file list services') ----- serviceBrowseCodeFiles ^ (SimpleServiceEntry provider: self + label: 'browse code files' translatedNoop - label: 'browse code files' selector: #selectAndBrowseFile:) argumentGetter: [ :fileList | fileList ]; yourself! Item was changed: ----- Method: FileContentsBrowser class>>serviceBrowseCompressedCode (in category 'file list services') ----- serviceBrowseCompressedCode "Answer a service for opening a changelist browser on a file" ^ (SimpleServiceEntry provider: self + label: 'code-file browser' translatedNoop - label: 'code-file browser' selector: #browseCompressedCodeStream: + description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' translatedNoop + buttonLabel: 'code' translatedNoop) - description: 'open a "file-contents browser" on this file, allowing you to view and selectively load its code' - buttonLabel: 'code') argumentGetter: [ :fileList | fileList readOnlyStream ]! Item was changed: ----- Method: FileList class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#FileList . #prototypicalToolWindow, 'File List' translatedNoop. 'A File List is a tool for browsing folders and files on disks and on ftp types.' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(FileList prototypicalToolWindow 'File List' 'A File List is a tool for browsing folders and files on disks and on ftp types.') forFlapNamed: 'Tools']! Item was changed: ----- Method: FileList>>deleteDirectory (in category 'volume list and pattern') ----- deleteDirectory "Remove the currently selected directory" | localDirName | + directory entries size = 0 ifFalse:[^self inform:'Directory must be empty' translated]. + localDirName _ directory localName. + (self confirm: ('Really delete {1}?' translated format: {localDirName})) ifFalse: [^ self]. - directory entries size = 0 ifFalse:[^self inform:'Directory must be empty']. - localDirName := directory localName. - (self confirm: 'Really delete ' , localDirName , '?') ifFalse: [^ self]. self volumeListIndex: self volumeListIndex-1. directory deleteDirectory: localDirName. self updateFileList.! Item was changed: ----- Method: FileList>>serviceAddNewDirectory (in category 'own services') ----- serviceAddNewDirectory "Answer a service entry characterizing the 'add new directory' command" ^ SimpleServiceEntry provider: self + label: 'add new directory' translatedNoop - label: 'add new directory' selector: #addNewDirectory + description: 'adds a new, empty directory (folder)' translatedNoop! - description: 'adds a new, empty directory (folder)' ! Item was changed: ----- Method: FileList>>serviceAddNewFile (in category 'own services') ----- serviceAddNewFile "Answer a service entry characterizing the 'add new file' command" + ^ SimpleServiceEntry + provider: self + label: 'add new file' translatedNoop + selector: #addNewFile + description: 'create a new,. empty file, and add it to the current directory.' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'add new file' selector: #addNewFile description: 'create a new,. empty file, and add it to the current directory.'! Item was changed: ----- Method: FileList>>serviceAllFileOptions (in category 'own services') ----- serviceAllFileOptions + ^ {SimpleServiceEntry + provider: self + label: 'more...' translatedNoop + selector: #offerAllFileOptions + description: 'show all the options available' translatedNoop}! - ^ {SimpleServiceEntry provider: self label: 'more...' selector: #offerAllFileOptions description: 'show all the options available'}! Item was changed: ----- Method: FileList>>serviceCompressFile (in category 'own services') ----- serviceCompressFile "Answer a service for compressing a file" + ^ SimpleServiceEntry + provider: self + label: 'compress' translatedNoop + selector: #compressFile + description: 'compress file' translatedNoop + buttonLabel: 'compress' translatedNoop! - ^ SimpleServiceEntry provider: self label: 'compress' selector: #compressFile description: 'compress file' buttonLabel: 'compress'! Item was changed: ----- Method: FileList>>serviceCopyName (in category 'own services') ----- serviceCopyName + ^ (SimpleServiceEntry + provider: self + label: 'copy name to clipboard' translatedNoop + selector: #copyName + description:'copy name to clipboard' translatedNoop )! - ^ (SimpleServiceEntry provider: self label: 'copy name to clipboard' selector: #copyName description:'copy name to clipboard' )! Item was changed: ----- Method: FileList>>serviceDeleteFile (in category 'own services') ----- serviceDeleteFile + ^ (SimpleServiceEntry + provider: self + label: 'delete' translatedNoop + selector: #deleteFile) + description: 'delete the seleted item' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'delete' selector: #deleteFile) - description: 'delete the seleted item'! Item was changed: ----- Method: FileList>>serviceGet (in category 'own services') ----- serviceGet "Answer a service for getting the entire file" ^ (SimpleServiceEntry provider: self + label: 'get entire file' translatedNoop - label: 'get entire file' selector: #get + description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.' translatedNoop)! - description: 'if the file has only been partially read in, because it is very large, read the entire file in at this time.')! Item was changed: ----- Method: FileList>>serviceGetEncodedText (in category 'own services') ----- serviceGetEncodedText ^ (SimpleServiceEntry provider: self + label: 'view as encoded text' translatedNoop - label: 'view as encoded text' selector: #getEncodedText + description: 'view as encoded text' translatedNoop) - description: 'view as encoded text') ! Item was changed: ----- Method: FileList>>serviceGetHex (in category 'own services') ----- serviceGetHex ^ (SimpleServiceEntry provider: self + label: 'view as hex' translatedNoop - label: 'view as hex' selector: #getHex + description: 'view as hex' translatedNoop) - description: 'view as hex') ! Item was changed: ----- Method: FileList>>serviceRenameFile (in category 'own services') ----- serviceRenameFile + ^ (SimpleServiceEntry + provider: self + label: 'rename' translatedNoop + selector: #renameFile + description: 'rename file' translatedNoop)! - ^ (SimpleServiceEntry provider: self label: 'rename' selector: #renameFile description: 'rename file')! Item was changed: ----- Method: FileList>>serviceSortByDate (in category 'own services') ----- serviceSortByDate "Answer a service for sorting by date" ^ (SimpleServiceEntry new provider: self + label: 'by date' translatedNoop - label: 'by date' selector: #sortByDate + description: 'sort entries by date' translatedNoop) - description: 'sort entries by date') extraSelector: #sortingByDate; + buttonLabel: 'date' translatedNoop! - buttonLabel: 'date'! Item was changed: ----- Method: FileList>>serviceSortByName (in category 'own services') ----- serviceSortByName "Answer a service for soring by name" ^ (SimpleServiceEntry new + provider: self label: 'by name' translatedNoop + selector: #sortByName + description: 'sort entries by name' translatedNoop) - provider: self label: 'by name' selector: #sortByName - description: 'sort entries by name') extraSelector: #sortingByName; + buttonLabel: 'name' translatedNoop! - buttonLabel: 'name'! Item was changed: ----- Method: FileList>>serviceSortBySize (in category 'own services') ----- serviceSortBySize "Answer a service for sorting by size" ^ (SimpleServiceEntry provider: self + label: 'by size' translatedNoop - label: 'by size' selector: #sortBySize + description: 'sort entries by size' translatedNoop) - description: 'sort entries by size') extraSelector: #sortingBySize; + buttonLabel: 'size' translatedNoop! - buttonLabel: 'size'! Item was changed: ----- Method: FileList>>serviceViewContentsInWorkspace (in category 'own services') ----- serviceViewContentsInWorkspace "Answer a service for viewing the contents of a file in a workspace" + ^ (SimpleServiceEntry provider: self label: 'workspace with contents' translatedNoop + selector: #viewContentsInWorkspace) + description: 'open a new Workspace whose contents are set to the contents of this file' translatedNoop! - ^ (SimpleServiceEntry provider: self label: 'workspace with contents' selector: #viewContentsInWorkspace) - description: 'open a new Workspace whose contents are set to the contents of this file'! Item was changed: ----- Method: FileList2>>serviceCancel (in category 'own services') ----- serviceCancel "Answer a service for hitting the cancel button" ^ (SimpleServiceEntry new + provider: self + label: 'cancel' translatedNoop + selector: #cancelHit + description: 'hit here to cancel ' translatedNoop) + buttonLabel: 'cancel' translatedNoop! - provider: self label: 'cancel' selector: #cancelHit - description: 'hit here to cancel ') - buttonLabel: 'cancel'! Item was changed: ----- Method: FileList2>>serviceOkay (in category 'own services') ----- serviceOkay "Answer a service for hitting the okay button" ^ (SimpleServiceEntry new + provider: self + label: 'okay' translatedNoop + selector: #okHit + description: 'hit here to accept the current selection' translatedNoop) + buttonLabel: 'ok' translatedNoop! - provider: self label: 'okay' selector: #okHit - description: 'hit here to accept the current selection') - buttonLabel: 'ok'! Item was changed: ----- Method: FileList2>>serviceOpenProjectFromFile (in category 'own services') ----- serviceOpenProjectFromFile "Answer a service for opening a .pr project file" ^ SimpleServiceEntry provider: self + label: 'load as project' translatedNoop - label: 'load as project' selector: #openProjectFromFile + description: 'open project from file' translatedNoop + buttonLabel: 'load' translatedNoop! - description: 'open project from file' - buttonLabel: 'load'! Item was changed: ----- Method: ProcessBrowser class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#ProcessBrowser. #prototypicalToolWindow. 'Processes' translatedNoop. 'A Process Browser shows you all the running processes' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(ProcessBrowser prototypicalToolWindow 'Processes' 'A Process Browser shows you all the running processes') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Tue Aug 30 17:07:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:07:28 2016 Subject: [squeak-dev] The Trunk: Multilingual-tfel.216.mcz Message-ID: Tim Felgentreff uploaded a new version of Multilingual to project The Trunk: http://source.squeak.org/trunk/Multilingual-tfel.216.mcz ==================== Summary ==================== Name: Multilingual-tfel.216 Author: tfel Time: 2 August 2016, 10:01:52.413368 am UUID: a4287057-8e19-d549-852b-85fa1bcca8ef Ancestors: Multilingual-tfel.215, Multilingual-bf.24 merge from Squeakland Etoys image =============== Diff against Multilingual-tfel.215 =============== Item was changed: ----- Method: LanguageEnvironment class>>localeID: (in category 'accessing') ----- + localeID: localeID + "LanguageEnvironment localeID: (LocaleID isoString: 'ja-kid')" + "LanguageEnvironment localeID: (LocaleID isoString: 'xx')" + ^ self knownEnvironments + at: localeID + ifAbsent: [localeID hasParent + ifTrue: [self knownEnvironments + at: localeID parent + ifAbsent: [self + localeID: (LocaleID isoLanguage: 'en')]] + ifFalse: [self + localeID: (LocaleID isoLanguage: 'en')]]! - localeID: localeID - ^self knownEnvironments at: localeID ifAbsent: [self localeID: (LocaleID isoLanguage: 'en')]! Item was changed: ----- Method: StrikeFontSet class>>createExternalFontFileForUnicodeKorean: (in category 'as yet unclassified') ----- createExternalFontFileForUnicodeKorean: fileName " Smalltalk garbageCollect. StrikeFontSet createExternalFontFileForUnicodeKorean: 'uKoreanFont.out'. " | file array f installDirectory | + file _ FileStream newFileNamed: fileName. + installDirectory _ Smalltalk at: #M17nInstallDirectory ifAbsent: []. + installDirectory _ installDirectory - file := FileStream newFileNamed: fileName. - installDirectory := Smalltalk at: #M17nInstallDirectory ifAbsent: []. - installDirectory := installDirectory ifNil: [String new] ifNotNil: [installDirectory , FileDirectory pathNameDelimiter asString]. + array _ Array + with: (StrikeFont newForKoreanFromEFontBDFFile: installDirectory , 'b12.bdf' name: 'Korean10' overrideWith: 'shnmk12.bdf') + with: ((StrikeFont newForKoreanFromEFontBDFFile: installDirectory , 'b14.bdf' name: 'Korean12' overrideWith: 'shnmk14.bdf') "fixAscent: 14 andDescent: 1 head: 1") + with: ((StrikeFont newForKoreanFromEFontBDFFile: installDirectory , 'b16.bdf' name: 'Korean14' overrideWith: 'hanglg16.bdf') fixAscent: 16 andDescent: 4 head: 4) + with: (StrikeFont newForKoreanFromEFontBDFFile: installDirectory , 'b24.bdf' name: 'Korean18' overrideWith: 'hanglm24.bdf'). - array := Array - with: (StrikeFont newForKoreanFromEFontBDFFile: installDirectory , 'b12.bdf' name: 'Japanese10' overrideWith: 'shnmk12.bdf') - with: ((StrikeFont newForKoreanFromEFontBDFFile: installDirectory , 'b14.bdf' name: 'Japanese12' overrideWith: 'shnmk14.bdf') "fixAscent: 14 andDescent: 1 head: 1") - with: ((StrikeFont newForKoreanFromEFontBDFFile: installDirectory , 'b16.bdf' name: 'Japanese14' overrideWith: 'hanglg16.bdf') fixAscent: 16 andDescent: 4 head: 4) - with: (StrikeFont newForKoreanFromEFontBDFFile: installDirectory , 'b24.bdf' name: 'Japanese18' overrideWith: 'hanglm24.bdf'). TextConstants at: #forceFontWriting put: true. + f _ ReferenceStream on: file. - f := ReferenceStream on: file. f nextPut: array. file close. + TextConstants removeKey: #forceFontWriting.! - TextConstants removeKey: #forceFontWriting. - ! From commits at source.squeak.org Tue Aug 30 17:07:40 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:07:41 2016 Subject: [squeak-dev] The Trunk: Compression-tfel.49.mcz Message-ID: Tim Felgentreff uploaded a new version of Compression to project The Trunk: http://source.squeak.org/trunk/Compression-tfel.49.mcz ==================== Summary ==================== Name: Compression-tfel.49 Author: tfel Time: 2 August 2016, 9:58:09.947368 am UUID: 5a70e931-0a3d-0a4b-8a36-6a12e6ba8862 Ancestors: Compression-cmm.48, Compression-bf.1 merge from Squeakland Etoys image =============== Diff against Compression-cmm.48 =============== Item was changed: ----- Method: GZipReadStream class>>serviceDecompressToFile (in category 'fileIn/Out') ----- serviceDecompressToFile ^ FileModifyingSimpleServiceEntry provider: self + label: 'decompress to file' translatedNoop - label: 'decompress to file' selector: #saveContents: + description: 'decompress to file' translatedNoop! - description: 'decompress to file'! Item was changed: ----- Method: GZipReadStream class>>serviceFileIn (in category 'fileIn/Out') ----- serviceFileIn "Answer a service for filing in an entire file" ^ SimpleServiceEntry provider: self + label: 'fileIn entire file' translatedNoop - label: 'fileIn entire file' selector: #fileIn: + description: 'file in the entire decompressed contents of the file, which is expected to contain Smalltalk code in fileout ("chunk") format' translatedNoop + buttonLabel: 'filein' translatedNoop - description: 'file in the entire decompressed contents of the file, which is expected to contain Smalltalk code in fileout ("chunk") format' - buttonLabel: 'filein' ! Item was changed: ----- Method: GZipReadStream class>>serviceFileIntoNewChangeSet (in category 'fileIn/Out') ----- serviceFileIntoNewChangeSet "Answer a service for filing in an entire file" ^ SimpleServiceEntry provider: self + label: 'install into new change set' translatedNoop - label: 'install into new change set' selector: #fileIntoNewChangeSet: + description: 'install the decompressed contents of the file as a body of code in the image: create a new change set and file-in the selected file into it' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install the decompressed contents of the file as a body of code in the image: create a new change set and file-in the selected file into it' - buttonLabel: 'install'! Item was changed: ----- Method: GZipWriteStream class>>serviceCompressFile (in category 'file list services') ----- serviceCompressFile ^ FileModifyingSimpleServiceEntry provider: self + label: 'compress file' translatedNoop - label: 'compress file' selector: #compressFile: + description: 'compress file using gzip compression, making a new file' translatedNoop! - description: 'compress file using gzip compression, making a new file'! From commits at source.squeak.org Tue Aug 30 17:08:04 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:08:06 2016 Subject: [squeak-dev] The Trunk: ST80-tfel.217.mcz Message-ID: Tim Felgentreff uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-tfel.217.mcz ==================== Summary ==================== Name: ST80-tfel.217 Author: tfel Time: 21 August 2016, 4:49:01.892391 pm UUID: 07f50e90-ec86-40b7-ab12-e625698c861c Ancestors: ST80-nice.216, ST80-tfel.215 merge trunk =============== Diff against ST80-nice.216 =============== Item was changed: ----- Method: FillInTheBlankView class>>requestPassword:message:centerAt:answerHeight: (in category 'instance creation') ----- requestPassword: aFillInTheBlank message: queryString centerAt: aPoint answerHeight: answerHeight "Answer an instance of me on aFillInTheBlank asking the question queryString. Allow the reply to be multiple lines, and make the user input view the given height." | messageView answerView topView myPar pwdFont myArray myStyle | aFillInTheBlank acceptOnCR: true. + messageView _ DisplayTextView new - messageView := DisplayTextView new model: queryString asDisplayText; borderWidthLeft: 2 right: 2 top: 2 bottom: 0; controller: NoController new. messageView window: (0@0 extent: (messageView window extent max: 200@30)); centered. + answerView _ self new - answerView := self new model: aFillInTheBlank; window: (0@0 extent: (messageView window width@answerHeight)); borderWidth: 2. " now answerView to use the password font" + myPar _ answerView displayContents. + pwdFont _ FixedFaceFont new passwordFont. + myArray _ Array new: 1. - myPar := answerView displayContents. - pwdFont := (StrikeFont passwordFontSize: 12). - myArray := Array new: 1. myArray at: 1 put: pwdFont. + myStyle _ TextStyle fontArray: myArray. - myStyle := TextStyle fontArray: myArray. myPar setWithText: (myPar text) style: myStyle. + topView _ View new model: aFillInTheBlank. - topView := View new model: aFillInTheBlank. topView controller: ModalController new. topView addSubView: messageView. topView addSubView: answerView below: messageView. topView align: topView viewport center with: aPoint. topView window: (0 @ 0 extent: (messageView window width) @ (messageView window height + answerView window height)). topView translateBy: (topView displayBox amountToTranslateWithin: Display boundingBox). ^ topView ! Item was changed: ----- Method: ParagraphEditor>>sendContentsToPrinter (in category 'menu messages') ----- sendContentsToPrinter | textToPrint printer parentWindow | textToPrint := paragraph text. + textToPrint size == 0 ifTrue: [^self inform: 'nothing to print.' translated]. - textToPrint size = 0 ifTrue: [^self inform: 'nothing to print.']. printer := TextPrinter defaultTextPrinter. parentWindow := self model dependents detect: [:dep | dep isSystemWindow] ifNone: [nil]. parentWindow isNil ifTrue: [printer documentTitle: 'Untitled'] ifFalse: [printer documentTitle: parentWindow label]. printer printText: textToPrint! Item was changed: ----- Method: ParagraphEditor>>setEmphasisHere (in category 'typing support') ----- setEmphasisHere + (paragraph textStyle fontArray size = 1 and: [paragraph text size = 0]) ifTrue: [ + emphasisHere _ Array with: (TextFontReference toFont: paragraph textStyle fontArray first)] ifFalse: [ + emphasisHere _ (paragraph text attributesAt: (self pointIndex - 1 max: 1) forStyle: paragraph textStyle) + select: [:att | att mayBeExtended]].! - emphasisHere := (paragraph text attributesAt: (self pointIndex - 1 max: 1) forStyle: paragraph textStyle) - select: [:att | att mayBeExtended]! Item was changed: ----- Method: ScreenController>>setDisplayDepth (in category 'menu messages') ----- setDisplayDepth "Let the user choose a new depth for the display. " | result | + (result _ (SelectionMenu selections: Display supportedDisplayDepths) startUpWithCaption: ('Choose a display depth + (it is currently {1})' translated format: {Display depth printString})) == nil ifFalse: - (result := (SelectionMenu selections: Display supportedDisplayDepths) startUpWithCaption: 'Choose a display depth - (it is currently ' , Display depth printString , ')') == nil ifFalse: [Display newDepth: result]! From commits at source.squeak.org Tue Aug 30 17:08:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:08:25 2016 Subject: [squeak-dev] The Trunk: ST80-tfel.215.mcz Message-ID: Tim Felgentreff uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-tfel.215.mcz ==================== Summary ==================== Name: ST80-tfel.215 Author: tfel Time: 6 August 2016, 1:10:07.366764 pm UUID: 3304d1d1-df77-4491-8d68-9ea6b5d62eb9 Ancestors: ST80-mt.214, ST80-tfel.214 merge with trunk =============== Diff against ST80-mt.214 =============== Item was changed: ----- Method: FillInTheBlankView class>>requestPassword:message:centerAt:answerHeight: (in category 'instance creation') ----- requestPassword: aFillInTheBlank message: queryString centerAt: aPoint answerHeight: answerHeight "Answer an instance of me on aFillInTheBlank asking the question queryString. Allow the reply to be multiple lines, and make the user input view the given height." | messageView answerView topView myPar pwdFont myArray myStyle | aFillInTheBlank acceptOnCR: true. + messageView _ DisplayTextView new - messageView := DisplayTextView new model: queryString asDisplayText; borderWidthLeft: 2 right: 2 top: 2 bottom: 0; controller: NoController new. messageView window: (0@0 extent: (messageView window extent max: 200@30)); centered. + answerView _ self new - answerView := self new model: aFillInTheBlank; window: (0@0 extent: (messageView window width@answerHeight)); borderWidth: 2. " now answerView to use the password font" + myPar _ answerView displayContents. + pwdFont _ FixedFaceFont new passwordFont. + myArray _ Array new: 1. - myPar := answerView displayContents. - pwdFont := (StrikeFont passwordFontSize: 12). - myArray := Array new: 1. myArray at: 1 put: pwdFont. + myStyle _ TextStyle fontArray: myArray. - myStyle := TextStyle fontArray: myArray. myPar setWithText: (myPar text) style: myStyle. + topView _ View new model: aFillInTheBlank. - topView := View new model: aFillInTheBlank. topView controller: ModalController new. topView addSubView: messageView. topView addSubView: answerView below: messageView. topView align: topView viewport center with: aPoint. topView window: (0 @ 0 extent: (messageView window width) @ (messageView window height + answerView window height)). topView translateBy: (topView displayBox amountToTranslateWithin: Display boundingBox). ^ topView ! Item was changed: ----- Method: ParagraphEditor>>sendContentsToPrinter (in category 'menu messages') ----- sendContentsToPrinter | textToPrint printer parentWindow | textToPrint := paragraph text. + textToPrint size == 0 ifTrue: [^self inform: 'nothing to print.' translated]. - textToPrint size = 0 ifTrue: [^self inform: 'nothing to print.']. printer := TextPrinter defaultTextPrinter. parentWindow := self model dependents detect: [:dep | dep isSystemWindow] ifNone: [nil]. parentWindow isNil ifTrue: [printer documentTitle: 'Untitled'] ifFalse: [printer documentTitle: parentWindow label]. printer printText: textToPrint! Item was changed: ----- Method: ParagraphEditor>>setEmphasisHere (in category 'typing support') ----- setEmphasisHere + (paragraph textStyle fontArray size = 1 and: [paragraph text size = 0]) ifTrue: [ + emphasisHere _ Array with: (TextFontReference toFont: paragraph textStyle fontArray first)] ifFalse: [ + emphasisHere _ (paragraph text attributesAt: (self pointIndex - 1 max: 1) forStyle: paragraph textStyle) + select: [:att | att mayBeExtended]].! - emphasisHere := (paragraph text attributesAt: (self pointIndex - 1 max: 1) forStyle: paragraph textStyle) - select: [:att | att mayBeExtended]! Item was changed: ----- Method: ScreenController>>setDisplayDepth (in category 'menu messages') ----- setDisplayDepth "Let the user choose a new depth for the display. " | result | + (result _ (SelectionMenu selections: Display supportedDisplayDepths) startUpWithCaption: ('Choose a display depth + (it is currently {1})' translated format: {Display depth printString})) == nil ifFalse: - (result := (SelectionMenu selections: Display supportedDisplayDepths) startUpWithCaption: 'Choose a display depth - (it is currently ' , Display depth printString , ')') == nil ifFalse: [Display newDepth: result]! From commits at source.squeak.org Tue Aug 30 17:08:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:08:34 2016 Subject: [squeak-dev] The Trunk: ST80-tfel.214.mcz Message-ID: Tim Felgentreff uploaded a new version of ST80 to project The Trunk: http://source.squeak.org/trunk/ST80-tfel.214.mcz ==================== Summary ==================== Name: ST80-tfel.214 Author: tfel Time: 2 August 2016, 10:04:41.050368 am UUID: a62f6c24-cc9f-c54f-b59c-30c26119a58a Ancestors: ST80-mt.213, ST80-bf.5 merge from Squeakland Etoys image =============== Diff against ST80-mt.213 =============== Item was changed: ----- Method: FillInTheBlankView class>>requestPassword:message:centerAt:answerHeight: (in category 'instance creation') ----- requestPassword: aFillInTheBlank message: queryString centerAt: aPoint answerHeight: answerHeight "Answer an instance of me on aFillInTheBlank asking the question queryString. Allow the reply to be multiple lines, and make the user input view the given height." | messageView answerView topView myPar pwdFont myArray myStyle | aFillInTheBlank acceptOnCR: true. + messageView _ DisplayTextView new - messageView := DisplayTextView new model: queryString asDisplayText; borderWidthLeft: 2 right: 2 top: 2 bottom: 0; controller: NoController new. messageView window: (0@0 extent: (messageView window extent max: 200@30)); centered. + answerView _ self new - answerView := self new model: aFillInTheBlank; window: (0@0 extent: (messageView window width@answerHeight)); borderWidth: 2. " now answerView to use the password font" + myPar _ answerView displayContents. + pwdFont _ FixedFaceFont new passwordFont. + myArray _ Array new: 1. - myPar := answerView displayContents. - pwdFont := (StrikeFont passwordFontSize: 12). - myArray := Array new: 1. myArray at: 1 put: pwdFont. + myStyle _ TextStyle fontArray: myArray. - myStyle := TextStyle fontArray: myArray. myPar setWithText: (myPar text) style: myStyle. + topView _ View new model: aFillInTheBlank. - topView := View new model: aFillInTheBlank. topView controller: ModalController new. topView addSubView: messageView. topView addSubView: answerView below: messageView. topView align: topView viewport center with: aPoint. topView window: (0 @ 0 extent: (messageView window width) @ (messageView window height + answerView window height)). topView translateBy: (topView displayBox amountToTranslateWithin: Display boundingBox). ^ topView ! Item was changed: ----- Method: ParagraphEditor>>sendContentsToPrinter (in category 'menu messages') ----- sendContentsToPrinter | textToPrint printer parentWindow | textToPrint := paragraph text. + textToPrint size == 0 ifTrue: [^self inform: 'nothing to print.' translated]. - textToPrint size = 0 ifTrue: [^self inform: 'nothing to print.']. printer := TextPrinter defaultTextPrinter. parentWindow := self model dependents detect: [:dep | dep isSystemWindow] ifNone: [nil]. parentWindow isNil ifTrue: [printer documentTitle: 'Untitled'] ifFalse: [printer documentTitle: parentWindow label]. printer printText: textToPrint! Item was changed: ----- Method: ParagraphEditor>>setEmphasisHere (in category 'typing support') ----- setEmphasisHere + (paragraph textStyle fontArray size = 1 and: [paragraph text size = 0]) ifTrue: [ + emphasisHere _ Array with: (TextFontReference toFont: paragraph textStyle fontArray first)] ifFalse: [ + emphasisHere _ (paragraph text attributesAt: (self pointIndex - 1 max: 1) forStyle: paragraph textStyle) + select: [:att | att mayBeExtended]].! - emphasisHere := (paragraph text attributesAt: (self pointIndex - 1 max: 1) forStyle: paragraph textStyle) - select: [:att | att mayBeExtended]! Item was changed: ----- Method: ScreenController>>setDisplayDepth (in category 'menu messages') ----- setDisplayDepth "Let the user choose a new depth for the display. " | result | + (result _ (SelectionMenu selections: Display supportedDisplayDepths) startUpWithCaption: ('Choose a display depth + (it is currently {1})' translated format: {Display depth printString})) == nil ifFalse: - (result := (SelectionMenu selections: Display supportedDisplayDepths) startUpWithCaption: 'Choose a display depth - (it is currently ' , Display depth printString , ')') == nil ifFalse: [Display newDepth: result]! From commits at source.squeak.org Tue Aug 30 17:08:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:08:58 2016 Subject: [squeak-dev] The Trunk: Nebraska-tfel.45.mcz Message-ID: Tim Felgentreff uploaded a new version of Nebraska to project The Trunk: http://source.squeak.org/trunk/Nebraska-tfel.45.mcz ==================== Summary ==================== Name: Nebraska-tfel.45 Author: tfel Time: 10 August 2016, 11:43:23.394848 am UUID: a1353e80-aef1-7c43-9fe9-f360b49af877 Ancestors: Nebraska-tfel.44 avoid dependency on Etoys =============== Diff against Nebraska-mt.42 =============== Item was changed: - SystemOrganization addCategory: #'Nebraska-Audio Chat'! SystemOrganization addCategory: #'Nebraska-Morphic-Collaborative'! SystemOrganization addCategory: #'Nebraska-Morphic-Experimental'! SystemOrganization addCategory: #'Nebraska-Morphic-Remote'! SystemOrganization addCategory: #'Nebraska-Network-EToy Communications'! SystemOrganization addCategory: #'Nebraska-Network-ObjectSocket'! + SystemOrganization addCategory: #'Nebraska-Audio Chat'! Item was changed: ----- Method: CanvasDecoder class>>decodeTTCFont: (in category 'decoding') ----- decodeTTCFont: fontString "Decode a string that consists of (e.g. 'ComicSansMS 12 0') into a proper instance." | first second | + first _ fontString indexOf: $ startingAt: 1. + second _ fontString indexOf: $ startingAt: first + 1. - first := fontString indexOf: $ startingAt: 1. - second := fontString indexOf: $ startingAt: first + 1. (first ~= 0 and: [second ~= 0]) ifTrue: [ + ^ TTCFont familyName: (fontString copyFrom: 1 to: (first - 1)) + size: (fontString copyFrom: first + 1 to: second - 1) asNumber - ^ (TTCFont family: (fontString copyFrom: 1 to: (first - 1)) - size: (fontString copyFrom: first + 1 to: second - 1) asNumber) emphasized: (fontString copyFrom: second + 1 to: fontString size) asNumber. ]. ^ TextStyle defaultFont. ! Item was changed: ----- Method: CanvasEncoder>>image:at:sourceRect:rule: (in category 'drawing') ----- image: aForm at: aPoint sourceRect: sourceRect rule: argRule | cacheID cacheNew cacheReply formToSend cacheEntry destRect visRect aFormArea d2 rule | + rule _ argRule. - rule := argRule. "first if we are only going to be able to draw a small part of the form, it may be faster just to send the part of the form that will actually show up" + destRect _ aPoint extent: sourceRect extent. + d2 _ (lastTransform invertBoundsRect: destRect) expandBy: 1. - destRect := aPoint extent: sourceRect extent. - d2 := (lastTransform invertBoundsRect: destRect) expandBy: 1. (d2 intersects: lastClipRect) ifFalse: [ ^NebraskaDebug at: #bigImageSkipped add: {lastClipRect. d2}. ]. + aFormArea _ aForm boundingBox area. - aFormArea := aForm boundingBox area. (aFormArea > 20000 and: [aForm isStatic not and: [lastTransform isPureTranslation]]) ifTrue: [ + visRect _ destRect intersect: lastClipRect. - visRect := destRect intersect: lastClipRect. visRect area < (aFormArea // 20) ifTrue: [ "NebraskaDebug at: #bigImageReduced add: {lastClipRect. aPoint. sourceRect extent. lastTransform}." + formToSend _ aForm copy: (visRect translateBy: sourceRect origin - aPoint). + formToSend depth = 32 ifTrue: [ + formToSend _ formToSend asFormOfDepth: 16. + (rule = 24 or: [rule = 34]) ifTrue: [rule _ 25]]. - formToSend := aForm copy: (visRect translateBy: sourceRect origin - aPoint). - formToSend depth = 32 ifTrue: [formToSend := formToSend asFormOfDepth: 16. rule = 24 ifTrue: [rule := 25]]. ^self image: formToSend at: visRect origin sourceRect: formToSend boundingBox rule: rule cacheID: 0 "no point in trying to cache this - it's a one-timer" newToCache: false. ]. ]. + cacheID _ 0. + cacheNew _ false. + formToSend _ aForm. + (aFormArea > 1000 and: [(cacheReply _ self testCache: aForm) notNil]) ifTrue: [ + cacheID _ cacheReply first. + cacheEntry _ cacheReply third. + (cacheNew _ cacheReply second) ifFalse: [ + formToSend _ aForm isStatic - cacheID := 0. - cacheNew := false. - formToSend := aForm. - (aFormArea > 1000 and: [(cacheReply := self testCache: aForm) notNil]) ifTrue: [ - cacheID := cacheReply first. - cacheEntry := cacheReply third. - (cacheNew := cacheReply second) ifFalse: [ - formToSend := aForm isStatic ifTrue: [nil] ifFalse: [aForm depth <= 8 ifTrue: [aForm] ifFalse: [aForm deltaFrom: cacheEntry fourth]]. ]. cacheEntry at: 4 put: (aForm isStatic ifTrue: [aForm] ifFalse: [aForm deepCopy]). ]. + (formToSend notNil and: [ + formToSend depth = 32 and: [ + rule ~= 24 and: [ + rule ~= 34]]]) ifTrue: [ + formToSend _ formToSend asFormOfDepth: 16. + ]. - (formToSend notNil and: [formToSend depth = 32]) ifTrue: [formToSend := formToSend asFormOfDepth: 16. rule = 24 ifTrue: [rule := 25]]. self image: formToSend at: aPoint sourceRect: sourceRect rule: rule cacheID: cacheID newToCache: cacheNew. ! Item was changed: ----- Method: CanvasEncoder>>sendFont:atIndex: (in category 'fonts') ----- sendFont: aFont atIndex: index "Transmits the given fint to the other side" | code | + code _ CanvasEncoder codeFont. + (aFont isMemberOf: StrikeFontSet) ifTrue: [code _ CanvasEncoder codeFontSet]. + aFont isTTCFont ifTrue: [code _ CanvasEncoder codeTTCFont]. - code := CanvasEncoder codeFont. - aFont isTTCFont ifTrue: [code := CanvasEncoder codeTTCFont]. self sendCommand: { String with: code. self class encodeInteger: index. self class encodeFont: aFont }. ! Item was changed: ----- Method: EToyChatMorph class>>chatWindowForIP:name:picture:inWorld: (in category 'as yet unclassified') ----- chatWindowForIP: ipAddress name: senderName picture: aForm inWorld: aWorld | makeANewOne aSenderBadge existing | + existing _ self instanceForIP: ipAddress inWorld: aWorld. - existing := self instanceForIP: ipAddress inWorld: aWorld. existing ifNotNil: [^existing]. + makeANewOne _ [ - makeANewOne := [ self new recipientForm: aForm; open; setIPAddress: ipAddress ]. EToyCommunicatorMorph playArrivalSound. self doChatsInternalToBadge ifTrue: [ + aSenderBadge _ EToySenderMorph instanceForIP: ipAddress inWorld: aWorld. - aSenderBadge := EToySenderMorph instanceForIP: ipAddress inWorld: aWorld. aSenderBadge ifNotNil: [ aSenderBadge startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. + aSenderBadge _ EToySenderMorph instanceForIP: ipAddress. - aSenderBadge := EToySenderMorph instanceForIP: ipAddress. aSenderBadge ifNotNil: [ + aSenderBadge _ aSenderBadge veryDeepCopy. - aSenderBadge := aSenderBadge veryDeepCopy. aSenderBadge killExistingChat; openInWorld: aWorld; startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. + (aSenderBadge _ EToySenderMorph new) - (aSenderBadge := EToySenderMorph new) userName: senderName userPicture: aForm + userEmail: 'unknown' translated - userEmail: 'unknown' userIPAddress: ipAddress; position: 200@200; openInWorld: aWorld; startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. ^makeANewOne value. ! Item was changed: ----- Method: EToyChatMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Text chat' translatedNoop + categories: #() + documentation: 'A tool for sending messages to other Squeak users' translatedNoop! - ^ self partName: 'Text chat' - categories: #('Collaborative') - documentation: 'A tool for sending messages to other Squeak users'! Item was changed: ----- Method: EToyChatMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | r1 r2 | + r1 _ self addARow: { + self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?' translated. + self inAColumn: {StringMorph new contents: 'Your message to:' translated; font: Preferences standardMenuFont; lock}. - r1 := self addARow: { - self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?'. - self inAColumn: {StringMorph new contents: 'Your message to:'; lock}. self textEntryFieldNamed: #ipAddress with: '' + help: 'IP address for chat partner' translated. - help: 'IP address for chat partner'. }. recipientForm ifNotNil: [ r1 addMorphBack: recipientForm asMorph lock ]. + sendingPane _ PluggableTextMorph - sendingPane := PluggableTextMorph on: self text: nil accept: #acceptTo:forMorph:. sendingPane hResizing: #spaceFill; vResizing: #spaceFill. + sendingPane font: Preferences standardMenuFont. self addMorphBack: sendingPane. + r2 _ self addARow: {self inAColumn: {StringMorph new contents: 'Replies' translated; font: Preferences standardMenuFont; lock}}. + receivingPane _ PluggableTextMorph - r2 := self addARow: {self inAColumn: {StringMorph new contents: 'Replies'; lock}}. - receivingPane := PluggableTextMorph on: self text: nil accept: nil. + receivingPane font: Preferences standardMenuFont. receivingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: receivingPane. receivingPane spaceFillWeight: 3. {r1. r2} do: [ :each | each vResizing: #shrinkWrap; minHeight: 18; color: Color veryLightGray. ]. + sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR _ true])! - sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR := true])! Item was changed: ----- Method: EToyFridgeMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Fridge' translatedNoop + categories: #() + documentation: 'A tool for sending objects to other Squeak users' translatedNoop! - ^ self partName: 'Fridge' - categories: #('Collaborative') - documentation: 'A tool for sending objects to other Squeak users'! Item was changed: ----- Method: EToyFridgeMorph>>groupToggleButton (in category 'as yet unclassified') ----- groupToggleButton ^(self inAColumn: { (EtoyUpdatingThreePhaseButtonMorph checkBox) target: self; actionSelector: #toggleChoice:; arguments: {'group'}; getSelector: #getChoice:; + setBalloonText: 'Changes between group mode and individuals' translated; - setBalloonText: 'Changes between group mode and individuals'; step }) hResizing: #shrinkWrap ! Item was changed: ----- Method: EToyFridgeMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | row filler fudge people maxPerRow insetY | + updateCounter _ self class updateCounter. - updateCounter := self class updateCounter. self removeAllMorphs. (self addARow: { + filler _ Morph new color: Color transparent; extent: 4@4. - filler := Morph new color: Color transparent; extent: 4@4. }) vResizing: #shrinkWrap. self addARow: { + (StringMorph contents: 'the Fridge' translated) lock. - (StringMorph contents: 'the Fridge') lock. self groupToggleButton. }. + row _ self addARow: {}. + people _ self class fridgeRecipients. + maxPerRow _ people size < 7 ifTrue: [2] ifFalse: [3]. - row := self addARow: {}. - people := self class fridgeRecipients. - maxPerRow := people size < 7 ifTrue: [2] ifFalse: [3]. "how big can this get before we need a different approach?" people do: [ :each | + row submorphCount >= maxPerRow ifTrue: [row _ self addARow: {}]. - row submorphCount >= maxPerRow ifTrue: [row := self addARow: {}]. row addMorphBack: ( groupMode ifTrue: [ (each userPicture scaledToSize: 35@35) asMorph lock ] ifFalse: [ each veryDeepCopy killExistingChat ] ) ]. + fullBounds _ nil. - fullBounds := nil. self fullBounds. + "htsBefore _ submorphs collect: [ :each | each height]." - "htsBefore := submorphs collect: [ :each | each height]." + fudge _ 20. + insetY _ self layoutInset. + insetY isPoint ifTrue: [insetY _ insetY y]. - fudge := 20. - insetY := self layoutInset. - insetY isPoint ifTrue: [insetY := insetY y]. filler extent: 4 @ (self height - filler height * 0.37 - insetY - borderWidth - fudge) truncated. "self fixLayout. + htsAfter _ submorphs collect: [ :each | each height]. - htsAfter := submorphs collect: [ :each | each height]. {htsBefore. htsAfter} explore." ! Item was changed: ----- Method: EToyIncomingMessage class>>allTypes (in category 'message types') ----- allTypes ^MessageTypes ifNil: [ + MessageTypes _ { - MessageTypes := { self typeKeyboardChat. self typeMorph. self typeFridge. self typeStatusRequest. self typeStatusReply. self typeSeeDesktop. - self typeAudioChat. - self typeAudioChatContinuous. self typeMultiChat. } ] ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewMorphFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewMorphFrom: dataStream sentBy: senderName ipAddress: ipAddressString | newObject thumbForm targetWorld | + newObject _ self newObjectFromStream: dataStream. - newObject := self newObjectFromStream: dataStream. EToyCommunicatorMorph playArrivalSound. + targetWorld _ self currentWorld. - targetWorld := self currentWorld. (EToyMorphsWelcomeMorph morphsWelcomeInWorld: targetWorld) ifTrue: [ newObject position: ( newObject valueOfProperty: #positionInOriginatingWorld ifAbsent: [(targetWorld randomBoundsFor: newObject) topLeft] ). WorldState addDeferredUIMessage: [ newObject openInWorld: targetWorld. + ] fixTemps. - ]. ^self ]. + thumbForm _ newObject imageForm scaledToSize: 50@50. + Smalltalk at: #SugarListenerMorph ifPresent: [:c | + c addToGlobalIncomingQueue: { + thumbForm. newObject. senderName. ipAddressString + }. + WorldState addDeferredUIMessage: [ + c ensureListenerInCurrentWorld + ]. + ].! - thumbForm := newObject imageForm scaledToSize: 50@50. - EToyListenerMorph addToGlobalIncomingQueue: { - thumbForm. newObject. senderName. ipAddressString - }. - WorldState addDeferredUIMessage: [ - EToyListenerMorph ensureListenerInCurrentWorld - ]. - ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewSeeDesktopFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewSeeDesktopFrom: dataStream sentBy: senderName ipAddress: ipAddressString "more later" ^ EToyChatMorph chatFrom: ipAddressString name: senderName + text: ipAddressString,' would like to see your desktop' translated. - text: ipAddressString,' would like to see your desktop'. ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewStatusRequestFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewStatusRequestFrom: dataStream sentBy: senderName ipAddress: ipAddressString "more later" ^ EToyChatMorph chatFrom: ipAddressString name: senderName + text: ipAddressString,' would like to know if you are available' translated. - text: ipAddressString,' would like to know if you are available'. ! Item was changed: ----- Method: EToyListenerMorph class>>commResultDeferred: (in category 'as yet unclassified') ----- commResultDeferred: anArrayOfAssociations | m ipAddress aDictionary | "to be run as part of the UI process in case user interaction is required" + aDictionary _ Dictionary new. - aDictionary := Dictionary new. anArrayOfAssociations do: [ :each | aDictionary add: each]. aDictionary at: #commFlash ifPresent: [ :ignore | ^self]. + m _ aDictionary at: #message ifAbsent: [^self]. - m := aDictionary at: #message ifAbsent: [^self]. m = 'OK' ifFalse: [^self]. + ipAddress _ aDictionary at: #ipAddress. - ipAddress := NetNameResolver stringFromAddress: (aDictionary at: #ipAddress). EToyIncomingMessage new incomingMessgage: (ReadStream on: (aDictionary at: #data)) fromIPAddress: ipAddress ! Item was changed: ----- Method: EToyListenerMorph class>>confirmListening (in category 'as yet unclassified') ----- confirmListening self isListening ifFalse: [ (self confirm: 'You currently are not listening and will not hear a reply. + Shall I start listening for you?' translated) ifTrue: [ - Shall I start listening for you?') ifTrue: [ self startListening ]. ]. ! Item was changed: ----- Method: EToyListenerMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Listener' translatedNoop + categories: #() + documentation: 'A tool for receiving things from other Squeak users' translatedNoop! - - ^ self partName: 'Listener' - categories: #('Collaborative') - documentation: 'A tool for receiving things from other Squeak users'! Item was changed: ----- Method: EToyListenerMorph>>mouseDownEvent:for: (in category 'as yet unclassified') ----- mouseDownEvent: event for: aMorph + | menu selection depictedObject | - | menu depictedObject | depictedObject := aMorph firstSubmorph valueOfProperty: #depictedObject. + menu := CustomMenu new. - menu := MenuMorph new. menu + add: 'Grab' translated action: [event hand attachMorph: depictedObject veryDeepCopy]; + add: 'Delete' translated - add: 'Grab' action: [event hand attachMorph: depictedObject veryDeepCopy]; - add: 'Delete' action: [self class removeFromGlobalIncomingQueue: depictedObject. self rebuild]. + selection := menu build startUpCenteredWithCaption: 'Morph from ' translated + , (aMorph submorphs second) firstSubmorph contents. + selection ifNil: [^self]. + selection value! - menu title: 'Morph from ' , (aMorph submorphs second) firstSubmorph contents. - menu invokeModal.! Item was changed: ----- Method: EToyListenerMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | earMorph | + updateCounter _ UpdateCounter. - updateCounter := UpdateCounter. self removeAllMorphs. self addGateKeeperMorphs. GlobalListener ifNil: [ + earMorph _ (self class makeListeningToggleNew: false) asMorph. + earMorph setBalloonText: 'Click to START listening for messages' translated. - earMorph := (self class makeListeningToggleNew: false) asMorph. - earMorph setBalloonText: 'Click to START listening for messages'. earMorph on: #mouseUp send: #startListening to: self. ] ifNotNil: [ + earMorph _ (self class makeListeningToggleNew: true) asMorph. + earMorph setBalloonText: 'Click to STOP listening for messages' translated. - earMorph := (self class makeListeningToggleNew: true) asMorph. - earMorph setBalloonText: 'Click to STOP listening for messages'. earMorph on: #mouseUp send: #stopListening to: self. ]. self addARow: {self inAColumn: {earMorph}}. self addARow: { + self inAColumn: {(StringMorph contents: 'Incoming communications' translated ) lock}. + self indicatorFieldNamed: #working color: Color blue help: 'working' translated. + self indicatorFieldNamed: #communicating color: Color green help: 'receiving' translated. - self inAColumn: {(StringMorph contents: 'Incoming communications') lock}. - self indicatorFieldNamed: #working color: Color blue help: 'working'. - self indicatorFieldNamed: #communicating color: Color green help: 'receiving'. }. "{thumbForm. newObject. senderName. ipAddressString}" self class globalIncomingQueueCopy do: [ :each | self addNewObject: each second thumbForm: each first sentBy: each third ipAddress: each fourth. ].! Item was changed: ----- Method: EToyMorphsWelcomeMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Welcome' translatedNoop + categories: #() + documentation: 'A sign that you accept morphs dropped directly into your world' translatedNoop! - ^ self partName: 'Welcome' - categories: #('Collaborative') - documentation: 'A sign that you accept morphs dropped directly into your world'! Item was changed: ----- Method: EToyMorphsWelcomeMorph>>initialize (in category 'initialization') ----- initialize "initialize the state of the receiver" | earMorph | super initialize. "" self layoutInset: 8 @ 8. + "earMorph _ (EToyListenerMorph makeListeningToggle: true) - "earMorph := (EToyListenerMorph makeListeningToggle: true) asMorph." + earMorph _ TextMorph new contents: 'Morphs - earMorph := TextMorph new contents: 'Morphs welcome here'; fontName: Preferences standardEToysFont familyName size: 18; centered; lock. self addARow: {earMorph}. + self setBalloonText: 'My presence in this world means received morphs may appear automatically' translated! - self setBalloonText: 'My presence in this world means received morphs may appear automatically'! Item was changed: ----- Method: EToyMultiChatMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Text chat+' translatedNoop + categories: #() + documentation: 'A tool for sending messages to several Squeak users at once' translatedNoop - ^ self partName: 'Text chat+' - categories: #('Collaborative') - documentation: 'A tool for sending messages to several Squeak users at once' sampleImageForm: (Form extent: 25@25 depth: 16 fromArray: #( 1177640695 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593245696 1593263665 1593270007 1593270007 1593270007 1177634353 1177628012 1177628012 1177640695 1593270007 1593270007 1593278463 2147450879 1316159488 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593274233 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1731723264 1593257324 762064236 762064236 762064236 762064236 762057894 762057894 762064236 762064236 762064236 762064236 762064236 1177616384 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593274233 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1731723264) offset: 0@0)! Item was changed: ----- Method: EToyMultiChatMorph>>editEvent:for: (in category 'as yet unclassified') ----- editEvent: anEvent for: aMorph | answer initialText aFillInTheBlankMorph | (aMorph bounds containsPoint: anEvent cursorPoint) ifFalse: [^self]. + initialText _ String streamContents: [ :strm | - initialText := String streamContents: [ :strm | targetIPAddresses do: [ :each | strm nextPutAll: each; cr]. ]. + aFillInTheBlankMorph _ FillInTheBlankMorph new + setQuery: 'Who are you chatting with?' translated - aFillInTheBlankMorph := FillInTheBlankMorph new - setQuery: 'Who are you chatting with?' initialAnswer: initialText answerHeight: 250 acceptOnCR: false. aFillInTheBlankMorph responseUponCancel: nil. self world addMorph: aFillInTheBlankMorph centeredNear: anEvent cursorPoint. + answer _ aFillInTheBlankMorph getUserResponse. - answer := aFillInTheBlankMorph getUserResponse. answer ifNil: [^self]. self updateIPAddressField: (answer findTokens: ' ',String cr). ! Item was changed: ----- Method: EToyMultiChatMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | r1 r2 | + r1 _ self addARow: { + self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?' translated. + self inAColumn: {StringMorph new contents: 'Multi chat with:' translated; lock}. - r1 := self addARow: { - self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?'. - self inAColumn: {StringMorph new contents: 'Multi chat with:'; lock}. self textEntryFieldNamed: #ipAddress with: '' + help: 'Click to edit participant list' translated. - help: 'Click to edit participant list'. }. + sendingPane _ PluggableTextMorph - sendingPane := PluggableTextMorph on: self text: nil accept: #acceptTo:forMorph:. sendingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: sendingPane. + r2 _ self addARow: {self inAColumn: {StringMorph new contents: 'Replies' translated; lock}}. + receivingPane _ PluggableTextMorph - r2 := self addARow: {self inAColumn: {StringMorph new contents: 'Replies'; lock}}. - receivingPane := PluggableTextMorph on: self text: nil accept: nil. receivingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: receivingPane. receivingPane spaceFillWeight: 3. {r1. r2} do: [ :each | each vResizing: #shrinkWrap; minHeight: 18; color: Color veryLightGray. ]. self updateIPAddressField: targetIPAddresses. + sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR _ true]).! - sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR := true]).! Item was changed: ----- Method: EToyPeerToPeer>>awaitDataFor: (in category 'receiving') ----- awaitDataFor: aCommunicatorMorph Socket initializeNetwork. + connectionQueue _ ConnectionQueue + portNumber: self class eToyCommunicationsPorts - connectionQueue := ConnectionQueue - portNumber: self class eToyCommunicationsPort queueLength: 6. + communicatorMorph _ aCommunicatorMorph. + process _ [self doAwaitData] newProcess. - communicatorMorph := aCommunicatorMorph. - process := [self doAwaitData] newProcess. process priority: Processor highIOPriority. process resume. ! Item was changed: ----- Method: EToyPeerToPeer>>doConnectForSend (in category 'sending') ----- doConnectForSend + | addr port | - | addr | + addr := NetNameResolver addressForName: (ipAddress copyUpTo: $:). - addr := NetNameResolver addressForName: ipAddress. addr ifNil: [ communicatorMorph commResult: {#message -> ('could not find ',ipAddress)}. + ^false]. + + port := (ipAddress copyAfter: $:) asInteger. + port ifNil: [port := self class eToyCommunicationsPorts first]. + + socket connectNonBlockingTo: addr port: port. - ^false - ]. - socket connectNonBlockingTo: addr port: self class eToyCommunicationsPort. [socket waitForConnectionFor: 15] on: ConnectionTimedOut do: [:ex | communicatorMorph commResult: {#message -> ('no connection to ',ipAddress,' (', + ipAddress,')')}. - (NetNameResolver stringFromAddress: addr),')')}. ^false]. ^true ! Item was changed: ----- Method: EToyPeerToPeer>>doReceiveOneMessage (in category 'receiving') ----- doReceiveOneMessage + | awaitingLength i length answer header | - | awaitingLength i length answer | + awaitingLength _ true. + answer _ WriteStream on: String new. - awaitingLength := true. - answer := WriteStream on: String new. [awaitingLength] whileTrue: [ + leftOverData _ leftOverData , socket receiveData. + (i _ leftOverData indexOf: $ ) > 0 ifTrue: [ + awaitingLength _ false. + header _ leftOverData first: i - 1. + length _ header asNumber. + self parseOptionalHeader: header. - leftOverData := leftOverData , socket receiveData. - (i := leftOverData indexOf: $ ) > 0 ifTrue: [ - awaitingLength := false. - length := (leftOverData first: i - 1) asNumber. answer nextPutAll: (leftOverData allButFirst: i). ]. ]. + leftOverData _ ''. - leftOverData := ''. [answer size < length] whileTrue: [ answer nextPutAll: socket receiveData. communicatorMorph commResult: {#commFlash -> true}. ]. + answer _ answer contents. - answer := answer contents. answer size > length ifTrue: [ + leftOverData _ answer allButFirst: length. + answer _ answer first: length - leftOverData := answer allButFirst: length. - answer := answer first: length ]. ^answer ! Item was changed: ----- Method: EToyPeerToPeer>>doSendData (in category 'sending') ----- doSendData | totalLength myData allTheData | + myData _ dataQueue next ifNil: [socket sendData: '0 '. ^false]. + totalLength _ (myData collect: [ :x | x size]) sum. + socket sendData: totalLength printString, self makeOptionalHeader, ' '. + allTheData _ WriteStream on: (String new: totalLength). - myData := dataQueue next ifNil: [socket sendData: '0 '. ^false]. - totalLength := (myData collect: [ :x | x size]) sum. - socket sendData: totalLength printString,' '. - allTheData := WriteStream on: (String new: totalLength). myData do: [ :chunk | allTheData nextPutAll: chunk asString]. NebraskaDebug at: #peerBytesSent add: {totalLength}. self sendDataCautiously: allTheData contents. ^true ! Item was changed: ----- Method: EToyPeerToPeer>>receiveDataOn:for: (in category 'receiving') ----- receiveDataOn: aSocket for: aCommunicatorMorph + socket _ aSocket. + remoteSocketAddress _ socket remoteSocketAddress hostNumber. + communicatorMorph _ aCommunicatorMorph. + process _ [ + leftOverData _ ''. - socket := aSocket. - remoteSocketAddress := socket remoteAddress. - communicatorMorph := aCommunicatorMorph. - process := [ - leftOverData := ''. [self doReceiveData] whileTrue. socket closeAndDestroy. ] newProcess. process priority: Processor highIOPriority. process resume. ! Item was changed: ----- Method: EToySenderMorph class>>descriptionForPartsBin (in category 'parts bin') ----- (excessive size, no diff calculated) Item was changed: ----- Method: EToySenderMorph>>checkOnAFriend (in category 'as yet unclassified') ----- checkOnAFriend + | gateKeeperEntry caption choices resp | - | gateKeeperEntry caption resp | + gateKeeperEntry _ EToyGateKeeperMorph entryForIPAddress: self ipAddress. + caption _ + 'Last name: ' translated ,gateKeeperEntry latestUserName, + '\Last message in: ' translated ,gateKeeperEntry lastIncomingMessageTimeString, + '\Last status check at: ' translated ,gateKeeperEntry lastTimeCheckedString, + '\Last status in: ' translated ,gateKeeperEntry statusReplyReceivedString. + choices _ 'Get his status now\Send my status now' translated. + resp _ (PopUpMenu labels: choices withCRs) startUpWithCaption: caption withCRs. - gateKeeperEntry := EToyGateKeeperMorph entryForIPAddress: self ipAddress. - caption := - 'Last name: ',gateKeeperEntry latestUserName, - '\Last message in: ',gateKeeperEntry lastIncomingMessageTimeString, - '\Last status check at: ',gateKeeperEntry lastTimeCheckedString, - '\Last status in: ',gateKeeperEntry statusReplyReceivedString. - resp := UIManager default chooseFrom: #('Get his status now' 'Send my status now') - title: caption withCRs. resp = 1 ifTrue: [ gateKeeperEntry lastTimeChecked: Time totalSeconds. self sendStatusCheck. ]. resp = 2 ifTrue: [ self sendStatusReply. ]. ! Item was changed: ----- Method: EToySenderMorph>>startNebraskaClient (in category 'as yet unclassified') ----- startNebraskaClient + | newMorph | - [ + [ + newMorph _ NetworkTerminalMorph connectTo: (self ipAddress copyUpTo: $:). "FIXME: get real port of Nebraska Server" + WorldState addDeferredUIMessage: [newMorph openInStyle: #scaled] fixTemps. - [ | newMorph | - newMorph := NetworkTerminalMorph connectTo: self ipAddress. - WorldState addDeferredUIMessage: [newMorph openInStyle: #scaled]. ] on: Error do: [ :ex | WorldState addDeferredUIMessage: [ + self inform: 'No connection to: ' translated. self ipAddress,' (',ex printString,')' + ] fixTemps - self inform: 'No connection to: '. self ipAddress,' (',ex printString,')' - ] ]. ] fork ! Item was changed: ----- Method: EToySenderMorph>>userName:userPicture:userEmail:userIPAddress: (in category 'as yet unclassified') ----- userName: aString userPicture: aFormOrNil userEmail: emailString userIPAddress: ipString | dropZoneRow | self setProperty: #currentBadgeVersion toValue: self currentBadgeVersion. + userPicture _ aFormOrNil ifNil: [ - userPicture := aFormOrNil ifNil: [ (TextStyle default fontOfSize: 26) emphasized: 1; characterFormAt: $? ]. + userPicture _ userPicture scaledToSize: 61@53. - userPicture := userPicture scaledToSize: 61@53. self killExistingChat. self removeAllMorphs. self useRoundedCorners. self addARow: { self inAColumn: {(StringMorph contents: aString) lock} }. + dropZoneRow _ self - dropZoneRow := self addARow: { self inAColumn: {userPicture asMorph lock} }. self establishDropZone: dropZoneRow. self addARow: { self textEntryFieldNamed: #emailAddress with: emailString help: 'Email address for this person' }; addARow: { self textEntryFieldNamed: #ipAddress with: ipString help: 'IP address for this person' }; addARow: { + self indicatorFieldNamed: #working color: Color blue help: 'working' translated. + self indicatorFieldNamed: #communicating color: Color green help: 'sending' translated. - self indicatorFieldNamed: #working color: Color blue help: 'working'. - self indicatorFieldNamed: #communicating color: Color green help: 'sending'. self buttonNamed: 'C' action: #startChat color: Color paleBlue + help: 'Open a written chat with this person' translated. - help: 'Open a written chat with this person'. self buttonNamed: 'T' action: #startTelemorphic color: Color paleYellow + help: 'Start telemorphic with this person' translated. - help: 'Start telemorphic with this person'. self buttonNamed: '!!' action: #tellAFriend color: Color paleGreen + help: 'Tell this person about the current project' translated. - help: 'Tell this person about the current project'. self buttonNamed: '?' action: #checkOnAFriend color: Color lightBrown + help: 'See if this person is available' translated. + "self buttonNamed: 'A' action: #startAudioChat color: Color yellow + help: 'Open an audio chat with this person' translated." - help: 'See if this person is available'. - self buttonNamed: 'A' action: #startAudioChat color: Color yellow - help: 'Open an audio chat with this person'. self buttonNamed: 'S' action: #startNebraskaClient color: Color white + help: 'See this person''s world (if he allows that)' translated. - help: 'See this person''s world (if he allows that)'. }. ! Item was changed: ----- Method: MorphicTransform>>encodeForRemoteCanvas (in category '*nebraska-*nebraska-Morphic-Remote') ----- encodeForRemoteCanvas "encode this transform into a string for use by a RemoteCanvas" ^String streamContents: [ :str | str nextPutAll: 'Morphic,'; print: offset x truncated; nextPut: $,; print: offset y truncated; nextPut: $,; + print: scale asFloat; - print: scale; nextPut: $,; + print: angle asFloat - print: angle ]! Item was changed: ----- Method: NebraskaClient>>currentStatusString (in category 'as yet unclassified') ----- currentStatusString (connection isNil or: [connection isConnected not]) ifTrue: [^'nada']. + ^connection remoteSocketAddress hostNumber, - ^(NetNameResolver stringFromAddress: connection remoteAddress), ' - ', (self backlog // 1024) printString,'k'! Item was changed: ----- Method: NebraskaClient>>initialize: (in category 'initialization') ----- initialize: aConnection | remoteAddress userPicture | connection := aConnection. hand := RemoteControlledHandMorph on: (MorphicEventDecoder on: aConnection). hand nebraskaClient: self. + remoteAddress _ connection remoteSocketAddress. + userPicture _ EToySenderMorph pictureForIPAddress: remoteAddress. - remoteAddress := connection remoteAddress. - remoteAddress ifNotNil: [remoteAddress := NetNameResolver stringFromAddress: remoteAddress]. - userPicture := EToySenderMorph pictureForIPAddress: remoteAddress. hand userInitials: ((EToySenderMorph nameForIPAddress: remoteAddress) ifNil: ['???']) andPicture: (userPicture ifNotNil: [userPicture scaledToSize: 16@20]). encoder := CanvasEncoder on: aConnection. canvas := RemoteCanvas connection: encoder clipRect: NebraskaServer extremelyBigRectangle transform: MorphicTransform identity! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonBuffered (in category 'as yet unclassified') ----- buttonBuffered + ^self makeButton: 'B' + balloonText: 'Request buffered Nebraska session' translated + for: #bufferNebraska - ^self makeButton: 'B' balloonText: 'Request buffered Nebraska session' for: #bufferNebraska ! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonQuit (in category 'the buttons') ----- buttonQuit + ^self makeButton: 'Quit' translated + balloonText: 'Quit this Nebraska session' translated + for: #quitNebraska - ^self makeButton: 'Quit' balloonText: 'Quit this Nebraska session' for: #quitNebraska ! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonScale (in category 'as yet unclassified') ----- buttonScale + ^self makeButton: '1x1' + balloonText: 'Switch between 1x1 and scaled view' translated + for: #toggleFullView - ^self makeButton: '1x1' balloonText: 'Switch between 1x1 and scaled view' for: #toggleFullView ! Item was changed: ----- Method: NebraskaServer class>>serveWorld: (in category 'instance creation') ----- serveWorld: aWorld + ^self serveWorld: aWorld onPort: self defaultPorts! - ^self serveWorld: aWorld onPort: self defaultPort! Item was changed: ----- Method: NebraskaServerMorph class>>serveWorld: (in category 'as yet unclassified') ----- serveWorld: aWorld "Check to make sure things won't crash. See Mantis #0000519" + ^aWorld isSafeToServe ifTrue:[ + self serveWorld: aWorld onPort: NebraskaServer defaultPorts] + ! - aWorld allMorphsDo:[:m| - m isSafeToServe ifFalse:[ - ^self inform: 'Can not share world if a ', m class, ' is present. Close the mprph and try again']]. - ^self serveWorld: aWorld onPort: NebraskaServer defaultPort! Item was changed: ----- Method: NebraskaServerMorph class>>serveWorld:onPort: (in category 'as yet unclassified') ----- serveWorld: aWorld onPort: aPortNumber | server | server := NebraskaServer serveWorld: aWorld onPort: aPortNumber. (self new) openInWorld: aWorld. + ^server - "server acceptNullConnection" "server acceptPhonyConnection." ! Item was changed: ----- Method: NebraskaServerMorph class>>supplementaryPartsDescriptions (in category 'as yet unclassified') ----- supplementaryPartsDescriptions ^ {DescriptionForPartsBin + formalName: 'NebraskaServer' translatedNoop + categoryList: #() + documentation: 'A button to start the Nebraska desktop sharing server' translatedNoop - formalName: 'NebraskaServer' - categoryList: #('Collaborative') - documentation: 'A button to start the Nebraska desktop sharing server' translated globalReceiverSymbol: #NebraskaServerMorph nativitySelector: #serveWorldButton }! Item was changed: ----- Method: NebraskaServerMorph>>delete (in category 'submorphs-add/remove') ----- delete self server ifNotNil:[ + (self confirm:'Shutdown the server?' translated) - (self confirm:'Shutdown the server?') ifTrue:[self world remoteServer: nil]]. super delete.! Item was changed: ----- Method: NebraskaServerMorph>>rebuild (in category 'initialization') ----- rebuild | myServer toggle closeBox font | + font _ StrikeFont familyName: #Palatino size: 14. - font := StrikeFont familyName: #Palatino size: 14. self removeAllMorphs. self setColorsAndBorder. self updateCurrentStatusString. + toggle _ SimpleHierarchicalListMorph new perform: ( - toggle := SimpleHierarchicalListMorph new perform: ( fullDisplay ifTrue: [#expandedForm] ifFalse: [#notExpandedForm] ). + closeBox _ SimpleButtonMorph new borderWidth: 0; + label: 'X' font: Preferences standardEToysButtonFont; color: Color transparent; - closeBox := SimpleButtonMorph new borderWidth: 0; - label: 'X' font: Preferences standardButtonFont; color: Color transparent; actionSelector: #delete; target: self; extent: 14@14; + setBalloonText: 'End Nebraska session' translated. - setBalloonText: 'End Nebrasks session'. self addARow: { self inAColumn: {closeBox}. self inAColumn: { UpdatingStringMorph new useStringFormat; target: self; font: font; getSelector: #currentStatusString; contents: self currentStatusString; stepTime: 2000; lock. }. self inAColumn: { toggle asMorph on: #mouseUp send: #toggleFull to: self; + setBalloonText: 'Show more or less of Nebraska Status' translated - setBalloonText: 'Show more or less of Nebraska Status' }. }. + myServer _ self server. - myServer := self server. (myServer isNil or: [fullDisplay not]) ifTrue: [ ^World startSteppingSubmorphsOf: self ]. "--- the expanded display ---" self addARow: { self inAColumn: { UpdatingStringMorph new useStringFormat; target: self; font: font; getSelector: #currentBacklogString; contents: self currentBacklogString; stepTime: 2000; lock. }. }. self addARow: { self inAColumn: { (StringMorph contents: '--clients--' translated) lock; font: font. }. }. myServer clients do: [ :each | self addARow: { UpdatingStringMorph new useStringFormat; target: each; font: font; getSelector: #currentStatusString; contents: each currentStatusString; stepTime: 2000; lock. } ]. World startSteppingSubmorphsOf: self.! Item was changed: ----- Method: NebraskaServerMorph>>updateCurrentStatusString (in category 'drawing') ----- updateCurrentStatusString self server ifNil:[ + currentStatusString _ '' translated. + currentBacklogString _ ''. - currentStatusString := '' translated. - currentBacklogString := ''. ] ifNotNil:[ + currentStatusString _ + ' Nebraska: {1} clients' translated format: {self server numClients printString}. + currentBacklogString _ 'backlog: ' translated, + ((previousBacklog _ self server backlog) // 1024) printString,'k' - currentStatusString := - ' Nebraska: ' translated, - self server numClients printString, - ' clients' translated. - currentBacklogString := 'backlog: ' translated, - ((previousBacklog := self server backlog) // 1024) printString,'k' ]. ! Item was changed: ----- Method: NetworkTerminalMorph class>>connectTo: (in category 'instance creation') ----- + connectTo: hostAndPort + | host port | + host := hostAndPort copyUpTo: $:. + port := (hostAndPort copyAfter: $:) asInteger. + port ifNil: [port := NebraskaServer defaultPorts first]. + ^self connectTo: host port:port - connectTo: serverHost - - ^self connectTo: serverHost port: NebraskaServer defaultPort - ! Item was changed: ----- Method: NetworkTerminalMorph class>>socketConnectedTo:port: (in category 'instance creation') ----- socketConnectedTo: serverHost port: serverPort | sock | Socket initializeNetwork. + sock _ Socket new. - sock := Socket new. [sock connectTo: (NetNameResolver addressForName: serverHost) port: serverPort] on: ConnectionTimedOut + do: [:ex | self error: 'could not connect to server' translated ]. - do: [:ex | self error: 'could not connect to server' ]. ^StringSocket on: sock ! Item was changed: ----- Method: NetworkTerminalMorph>>acceptDroppingMorph:event: (in category 'layout') ----- acceptDroppingMorph: morphToDrop event: evt | myCopy outData null | (morphToDrop isKindOf: NewHandleMorph) ifTrue: [ "don't send these" ^morphToDrop rejectDropMorphEvent: evt. ]. self eToyRejectDropMorph: morphToDrop event: evt. "we don't really want it" "7 mar 2001 - remove #veryDeepCopy" + myCopy _ morphToDrop. "gradient fills require doing this second" - myCopy := morphToDrop. "gradient fills require doing this second" myCopy setProperty: #positionInOriginatingWorld toValue: morphToDrop position. + outData _ myCopy eToyStreamedRepresentationNotifying: nil. + null _ String with: 0 asCharacter. - outData := myCopy eToyStreamedRepresentationNotifying: nil. - null := String with: 0 asCharacter. EToyPeerToPeer new sendSomeData: { EToyIncomingMessage typeMorph,null. Preferences defaultAuthorName,null. outData } + to: connection remoteSocketAddress hostNumber - to: (NetNameResolver stringFromAddress: connection remoteAddress) for: self. ! From commits at source.squeak.org Tue Aug 30 17:08:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:09:05 2016 Subject: [squeak-dev] The Trunk: Nebraska-tfel.44.mcz Message-ID: Tim Felgentreff uploaded a new version of Nebraska to project The Trunk: http://source.squeak.org/trunk/Nebraska-tfel.44.mcz ==================== Summary ==================== Name: Nebraska-tfel.44 Author: tfel Time: 10 August 2016, 10:42:15.312848 am UUID: 48054b24-78b0-d54a-ba3b-2d44209d4b22 Ancestors: Nebraska-tfel.43 remove direct reference to Etoys =============== Diff against Nebraska-mt.42 =============== Item was changed: - SystemOrganization addCategory: #'Nebraska-Audio Chat'! SystemOrganization addCategory: #'Nebraska-Morphic-Collaborative'! SystemOrganization addCategory: #'Nebraska-Morphic-Experimental'! SystemOrganization addCategory: #'Nebraska-Morphic-Remote'! SystemOrganization addCategory: #'Nebraska-Network-EToy Communications'! SystemOrganization addCategory: #'Nebraska-Network-ObjectSocket'! + SystemOrganization addCategory: #'Nebraska-Audio Chat'! Item was changed: ----- Method: CanvasDecoder class>>decodeTTCFont: (in category 'decoding') ----- decodeTTCFont: fontString "Decode a string that consists of (e.g. 'ComicSansMS 12 0') into a proper instance." | first second | + first _ fontString indexOf: $ startingAt: 1. + second _ fontString indexOf: $ startingAt: first + 1. - first := fontString indexOf: $ startingAt: 1. - second := fontString indexOf: $ startingAt: first + 1. (first ~= 0 and: [second ~= 0]) ifTrue: [ + ^ TTCFont familyName: (fontString copyFrom: 1 to: (first - 1)) + size: (fontString copyFrom: first + 1 to: second - 1) asNumber - ^ (TTCFont family: (fontString copyFrom: 1 to: (first - 1)) - size: (fontString copyFrom: first + 1 to: second - 1) asNumber) emphasized: (fontString copyFrom: second + 1 to: fontString size) asNumber. ]. ^ TextStyle defaultFont. ! Item was changed: ----- Method: CanvasEncoder>>image:at:sourceRect:rule: (in category 'drawing') ----- image: aForm at: aPoint sourceRect: sourceRect rule: argRule | cacheID cacheNew cacheReply formToSend cacheEntry destRect visRect aFormArea d2 rule | + rule _ argRule. - rule := argRule. "first if we are only going to be able to draw a small part of the form, it may be faster just to send the part of the form that will actually show up" + destRect _ aPoint extent: sourceRect extent. + d2 _ (lastTransform invertBoundsRect: destRect) expandBy: 1. - destRect := aPoint extent: sourceRect extent. - d2 := (lastTransform invertBoundsRect: destRect) expandBy: 1. (d2 intersects: lastClipRect) ifFalse: [ ^NebraskaDebug at: #bigImageSkipped add: {lastClipRect. d2}. ]. + aFormArea _ aForm boundingBox area. - aFormArea := aForm boundingBox area. (aFormArea > 20000 and: [aForm isStatic not and: [lastTransform isPureTranslation]]) ifTrue: [ + visRect _ destRect intersect: lastClipRect. - visRect := destRect intersect: lastClipRect. visRect area < (aFormArea // 20) ifTrue: [ "NebraskaDebug at: #bigImageReduced add: {lastClipRect. aPoint. sourceRect extent. lastTransform}." + formToSend _ aForm copy: (visRect translateBy: sourceRect origin - aPoint). + formToSend depth = 32 ifTrue: [ + formToSend _ formToSend asFormOfDepth: 16. + (rule = 24 or: [rule = 34]) ifTrue: [rule _ 25]]. - formToSend := aForm copy: (visRect translateBy: sourceRect origin - aPoint). - formToSend depth = 32 ifTrue: [formToSend := formToSend asFormOfDepth: 16. rule = 24 ifTrue: [rule := 25]]. ^self image: formToSend at: visRect origin sourceRect: formToSend boundingBox rule: rule cacheID: 0 "no point in trying to cache this - it's a one-timer" newToCache: false. ]. ]. + cacheID _ 0. + cacheNew _ false. + formToSend _ aForm. + (aFormArea > 1000 and: [(cacheReply _ self testCache: aForm) notNil]) ifTrue: [ + cacheID _ cacheReply first. + cacheEntry _ cacheReply third. + (cacheNew _ cacheReply second) ifFalse: [ + formToSend _ aForm isStatic - cacheID := 0. - cacheNew := false. - formToSend := aForm. - (aFormArea > 1000 and: [(cacheReply := self testCache: aForm) notNil]) ifTrue: [ - cacheID := cacheReply first. - cacheEntry := cacheReply third. - (cacheNew := cacheReply second) ifFalse: [ - formToSend := aForm isStatic ifTrue: [nil] ifFalse: [aForm depth <= 8 ifTrue: [aForm] ifFalse: [aForm deltaFrom: cacheEntry fourth]]. ]. cacheEntry at: 4 put: (aForm isStatic ifTrue: [aForm] ifFalse: [aForm deepCopy]). ]. + (formToSend notNil and: [ + formToSend depth = 32 and: [ + rule ~= 24 and: [ + rule ~= 34]]]) ifTrue: [ + formToSend _ formToSend asFormOfDepth: 16. + ]. - (formToSend notNil and: [formToSend depth = 32]) ifTrue: [formToSend := formToSend asFormOfDepth: 16. rule = 24 ifTrue: [rule := 25]]. self image: formToSend at: aPoint sourceRect: sourceRect rule: rule cacheID: cacheID newToCache: cacheNew. ! Item was changed: ----- Method: CanvasEncoder>>sendFont:atIndex: (in category 'fonts') ----- sendFont: aFont atIndex: index "Transmits the given fint to the other side" | code | + code _ CanvasEncoder codeFont. + (aFont isMemberOf: StrikeFontSet) ifTrue: [code _ CanvasEncoder codeFontSet]. + aFont isTTCFont ifTrue: [code _ CanvasEncoder codeTTCFont]. - code := CanvasEncoder codeFont. - aFont isTTCFont ifTrue: [code := CanvasEncoder codeTTCFont]. self sendCommand: { String with: code. self class encodeInteger: index. self class encodeFont: aFont }. ! Item was changed: ----- Method: EToyChatMorph class>>chatWindowForIP:name:picture:inWorld: (in category 'as yet unclassified') ----- chatWindowForIP: ipAddress name: senderName picture: aForm inWorld: aWorld | makeANewOne aSenderBadge existing | + existing _ self instanceForIP: ipAddress inWorld: aWorld. - existing := self instanceForIP: ipAddress inWorld: aWorld. existing ifNotNil: [^existing]. + makeANewOne _ [ - makeANewOne := [ self new recipientForm: aForm; open; setIPAddress: ipAddress ]. EToyCommunicatorMorph playArrivalSound. self doChatsInternalToBadge ifTrue: [ + aSenderBadge _ EToySenderMorph instanceForIP: ipAddress inWorld: aWorld. - aSenderBadge := EToySenderMorph instanceForIP: ipAddress inWorld: aWorld. aSenderBadge ifNotNil: [ aSenderBadge startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. + aSenderBadge _ EToySenderMorph instanceForIP: ipAddress. - aSenderBadge := EToySenderMorph instanceForIP: ipAddress. aSenderBadge ifNotNil: [ + aSenderBadge _ aSenderBadge veryDeepCopy. - aSenderBadge := aSenderBadge veryDeepCopy. aSenderBadge killExistingChat; openInWorld: aWorld; startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. + (aSenderBadge _ EToySenderMorph new) - (aSenderBadge := EToySenderMorph new) userName: senderName userPicture: aForm + userEmail: 'unknown' translated - userEmail: 'unknown' userIPAddress: ipAddress; position: 200@200; openInWorld: aWorld; startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. ^makeANewOne value. ! Item was changed: ----- Method: EToyChatMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Text chat' translatedNoop + categories: #() + documentation: 'A tool for sending messages to other Squeak users' translatedNoop! - ^ self partName: 'Text chat' - categories: #('Collaborative') - documentation: 'A tool for sending messages to other Squeak users'! Item was changed: ----- Method: EToyChatMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | r1 r2 | + r1 _ self addARow: { + self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?' translated. + self inAColumn: {StringMorph new contents: 'Your message to:' translated; font: Preferences standardMenuFont; lock}. - r1 := self addARow: { - self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?'. - self inAColumn: {StringMorph new contents: 'Your message to:'; lock}. self textEntryFieldNamed: #ipAddress with: '' + help: 'IP address for chat partner' translated. - help: 'IP address for chat partner'. }. recipientForm ifNotNil: [ r1 addMorphBack: recipientForm asMorph lock ]. + sendingPane _ PluggableTextMorph - sendingPane := PluggableTextMorph on: self text: nil accept: #acceptTo:forMorph:. sendingPane hResizing: #spaceFill; vResizing: #spaceFill. + sendingPane font: Preferences standardMenuFont. self addMorphBack: sendingPane. + r2 _ self addARow: {self inAColumn: {StringMorph new contents: 'Replies' translated; font: Preferences standardMenuFont; lock}}. + receivingPane _ PluggableTextMorph - r2 := self addARow: {self inAColumn: {StringMorph new contents: 'Replies'; lock}}. - receivingPane := PluggableTextMorph on: self text: nil accept: nil. + receivingPane font: Preferences standardMenuFont. receivingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: receivingPane. receivingPane spaceFillWeight: 3. {r1. r2} do: [ :each | each vResizing: #shrinkWrap; minHeight: 18; color: Color veryLightGray. ]. + sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR _ true])! - sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR := true])! Item was changed: ----- Method: EToyFridgeMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Fridge' translatedNoop + categories: #() + documentation: 'A tool for sending objects to other Squeak users' translatedNoop! - ^ self partName: 'Fridge' - categories: #('Collaborative') - documentation: 'A tool for sending objects to other Squeak users'! Item was changed: ----- Method: EToyFridgeMorph>>groupToggleButton (in category 'as yet unclassified') ----- groupToggleButton ^(self inAColumn: { (EtoyUpdatingThreePhaseButtonMorph checkBox) target: self; actionSelector: #toggleChoice:; arguments: {'group'}; getSelector: #getChoice:; + setBalloonText: 'Changes between group mode and individuals' translated; - setBalloonText: 'Changes between group mode and individuals'; step }) hResizing: #shrinkWrap ! Item was changed: ----- Method: EToyFridgeMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | row filler fudge people maxPerRow insetY | + updateCounter _ self class updateCounter. - updateCounter := self class updateCounter. self removeAllMorphs. (self addARow: { + filler _ Morph new color: Color transparent; extent: 4@4. - filler := Morph new color: Color transparent; extent: 4@4. }) vResizing: #shrinkWrap. self addARow: { + (StringMorph contents: 'the Fridge' translated) lock. - (StringMorph contents: 'the Fridge') lock. self groupToggleButton. }. + row _ self addARow: {}. + people _ self class fridgeRecipients. + maxPerRow _ people size < 7 ifTrue: [2] ifFalse: [3]. - row := self addARow: {}. - people := self class fridgeRecipients. - maxPerRow := people size < 7 ifTrue: [2] ifFalse: [3]. "how big can this get before we need a different approach?" people do: [ :each | + row submorphCount >= maxPerRow ifTrue: [row _ self addARow: {}]. - row submorphCount >= maxPerRow ifTrue: [row := self addARow: {}]. row addMorphBack: ( groupMode ifTrue: [ (each userPicture scaledToSize: 35@35) asMorph lock ] ifFalse: [ each veryDeepCopy killExistingChat ] ) ]. + fullBounds _ nil. - fullBounds := nil. self fullBounds. + "htsBefore _ submorphs collect: [ :each | each height]." - "htsBefore := submorphs collect: [ :each | each height]." + fudge _ 20. + insetY _ self layoutInset. + insetY isPoint ifTrue: [insetY _ insetY y]. - fudge := 20. - insetY := self layoutInset. - insetY isPoint ifTrue: [insetY := insetY y]. filler extent: 4 @ (self height - filler height * 0.37 - insetY - borderWidth - fudge) truncated. "self fixLayout. + htsAfter _ submorphs collect: [ :each | each height]. - htsAfter := submorphs collect: [ :each | each height]. {htsBefore. htsAfter} explore." ! Item was changed: ----- Method: EToyIncomingMessage class>>allTypes (in category 'message types') ----- allTypes ^MessageTypes ifNil: [ + MessageTypes _ { - MessageTypes := { self typeKeyboardChat. self typeMorph. self typeFridge. self typeStatusRequest. self typeStatusReply. self typeSeeDesktop. - self typeAudioChat. - self typeAudioChatContinuous. self typeMultiChat. } ] ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewMorphFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewMorphFrom: dataStream sentBy: senderName ipAddress: ipAddressString | newObject thumbForm targetWorld | + newObject _ self newObjectFromStream: dataStream. - newObject := self newObjectFromStream: dataStream. EToyCommunicatorMorph playArrivalSound. + targetWorld _ self currentWorld. - targetWorld := self currentWorld. (EToyMorphsWelcomeMorph morphsWelcomeInWorld: targetWorld) ifTrue: [ newObject position: ( newObject valueOfProperty: #positionInOriginatingWorld ifAbsent: [(targetWorld randomBoundsFor: newObject) topLeft] ). WorldState addDeferredUIMessage: [ newObject openInWorld: targetWorld. + ] fixTemps. - ]. ^self ]. + thumbForm _ newObject imageForm scaledToSize: 50@50. + Smalltalk at: #SugarListenerMorph ifPresent: [:c | c addToGlobalIncomingQueue: { - thumbForm := newObject imageForm scaledToSize: 50@50. - EToyListenerMorph addToGlobalIncomingQueue: { thumbForm. newObject. senderName. ipAddressString + }]. - }. WorldState addDeferredUIMessage: [ + SugarListenerMorph ensureListenerInCurrentWorld + ] fixTemps. - EToyListenerMorph ensureListenerInCurrentWorld - ]. ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewSeeDesktopFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewSeeDesktopFrom: dataStream sentBy: senderName ipAddress: ipAddressString "more later" ^ EToyChatMorph chatFrom: ipAddressString name: senderName + text: ipAddressString,' would like to see your desktop' translated. - text: ipAddressString,' would like to see your desktop'. ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewStatusRequestFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewStatusRequestFrom: dataStream sentBy: senderName ipAddress: ipAddressString "more later" ^ EToyChatMorph chatFrom: ipAddressString name: senderName + text: ipAddressString,' would like to know if you are available' translated. - text: ipAddressString,' would like to know if you are available'. ! Item was changed: ----- Method: EToyListenerMorph class>>commResultDeferred: (in category 'as yet unclassified') ----- commResultDeferred: anArrayOfAssociations | m ipAddress aDictionary | "to be run as part of the UI process in case user interaction is required" + aDictionary _ Dictionary new. - aDictionary := Dictionary new. anArrayOfAssociations do: [ :each | aDictionary add: each]. aDictionary at: #commFlash ifPresent: [ :ignore | ^self]. + m _ aDictionary at: #message ifAbsent: [^self]. - m := aDictionary at: #message ifAbsent: [^self]. m = 'OK' ifFalse: [^self]. + ipAddress _ aDictionary at: #ipAddress. - ipAddress := NetNameResolver stringFromAddress: (aDictionary at: #ipAddress). EToyIncomingMessage new incomingMessgage: (ReadStream on: (aDictionary at: #data)) fromIPAddress: ipAddress ! Item was changed: ----- Method: EToyListenerMorph class>>confirmListening (in category 'as yet unclassified') ----- confirmListening self isListening ifFalse: [ (self confirm: 'You currently are not listening and will not hear a reply. + Shall I start listening for you?' translated) ifTrue: [ - Shall I start listening for you?') ifTrue: [ self startListening ]. ]. ! Item was changed: ----- Method: EToyListenerMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Listener' translatedNoop + categories: #() + documentation: 'A tool for receiving things from other Squeak users' translatedNoop! - - ^ self partName: 'Listener' - categories: #('Collaborative') - documentation: 'A tool for receiving things from other Squeak users'! Item was changed: ----- Method: EToyListenerMorph>>mouseDownEvent:for: (in category 'as yet unclassified') ----- mouseDownEvent: event for: aMorph + | menu selection depictedObject | - | menu depictedObject | depictedObject := aMorph firstSubmorph valueOfProperty: #depictedObject. + menu := CustomMenu new. - menu := MenuMorph new. menu + add: 'Grab' translated action: [event hand attachMorph: depictedObject veryDeepCopy]; + add: 'Delete' translated - add: 'Grab' action: [event hand attachMorph: depictedObject veryDeepCopy]; - add: 'Delete' action: [self class removeFromGlobalIncomingQueue: depictedObject. self rebuild]. + selection := menu build startUpCenteredWithCaption: 'Morph from ' translated + , (aMorph submorphs second) firstSubmorph contents. + selection ifNil: [^self]. + selection value! - menu title: 'Morph from ' , (aMorph submorphs second) firstSubmorph contents. - menu invokeModal.! Item was changed: ----- Method: EToyListenerMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | earMorph | + updateCounter _ UpdateCounter. - updateCounter := UpdateCounter. self removeAllMorphs. self addGateKeeperMorphs. GlobalListener ifNil: [ + earMorph _ (self class makeListeningToggleNew: false) asMorph. + earMorph setBalloonText: 'Click to START listening for messages' translated. - earMorph := (self class makeListeningToggleNew: false) asMorph. - earMorph setBalloonText: 'Click to START listening for messages'. earMorph on: #mouseUp send: #startListening to: self. ] ifNotNil: [ + earMorph _ (self class makeListeningToggleNew: true) asMorph. + earMorph setBalloonText: 'Click to STOP listening for messages' translated. - earMorph := (self class makeListeningToggleNew: true) asMorph. - earMorph setBalloonText: 'Click to STOP listening for messages'. earMorph on: #mouseUp send: #stopListening to: self. ]. self addARow: {self inAColumn: {earMorph}}. self addARow: { + self inAColumn: {(StringMorph contents: 'Incoming communications' translated ) lock}. + self indicatorFieldNamed: #working color: Color blue help: 'working' translated. + self indicatorFieldNamed: #communicating color: Color green help: 'receiving' translated. - self inAColumn: {(StringMorph contents: 'Incoming communications') lock}. - self indicatorFieldNamed: #working color: Color blue help: 'working'. - self indicatorFieldNamed: #communicating color: Color green help: 'receiving'. }. "{thumbForm. newObject. senderName. ipAddressString}" self class globalIncomingQueueCopy do: [ :each | self addNewObject: each second thumbForm: each first sentBy: each third ipAddress: each fourth. ].! Item was changed: ----- Method: EToyMorphsWelcomeMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Welcome' translatedNoop + categories: #() + documentation: 'A sign that you accept morphs dropped directly into your world' translatedNoop! - ^ self partName: 'Welcome' - categories: #('Collaborative') - documentation: 'A sign that you accept morphs dropped directly into your world'! Item was changed: ----- Method: EToyMorphsWelcomeMorph>>initialize (in category 'initialization') ----- initialize "initialize the state of the receiver" | earMorph | super initialize. "" self layoutInset: 8 @ 8. + "earMorph _ (EToyListenerMorph makeListeningToggle: true) - "earMorph := (EToyListenerMorph makeListeningToggle: true) asMorph." + earMorph _ TextMorph new contents: 'Morphs - earMorph := TextMorph new contents: 'Morphs welcome here'; fontName: Preferences standardEToysFont familyName size: 18; centered; lock. self addARow: {earMorph}. + self setBalloonText: 'My presence in this world means received morphs may appear automatically' translated! - self setBalloonText: 'My presence in this world means received morphs may appear automatically'! Item was changed: ----- Method: EToyMultiChatMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Text chat+' translatedNoop + categories: #() + documentation: 'A tool for sending messages to several Squeak users at once' translatedNoop - ^ self partName: 'Text chat+' - categories: #('Collaborative') - documentation: 'A tool for sending messages to several Squeak users at once' sampleImageForm: (Form extent: 25@25 depth: 16 fromArray: #( 1177640695 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593245696 1593263665 1593270007 1593270007 1593270007 1177634353 1177628012 1177628012 1177640695 1593270007 1593270007 1593278463 2147450879 1316159488 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593274233 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1731723264 1593257324 762064236 762064236 762064236 762064236 762057894 762057894 762064236 762064236 762064236 762064236 762064236 1177616384 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593274233 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1731723264) offset: 0@0)! Item was changed: ----- Method: EToyMultiChatMorph>>editEvent:for: (in category 'as yet unclassified') ----- editEvent: anEvent for: aMorph | answer initialText aFillInTheBlankMorph | (aMorph bounds containsPoint: anEvent cursorPoint) ifFalse: [^self]. + initialText _ String streamContents: [ :strm | - initialText := String streamContents: [ :strm | targetIPAddresses do: [ :each | strm nextPutAll: each; cr]. ]. + aFillInTheBlankMorph _ FillInTheBlankMorph new + setQuery: 'Who are you chatting with?' translated - aFillInTheBlankMorph := FillInTheBlankMorph new - setQuery: 'Who are you chatting with?' initialAnswer: initialText answerHeight: 250 acceptOnCR: false. aFillInTheBlankMorph responseUponCancel: nil. self world addMorph: aFillInTheBlankMorph centeredNear: anEvent cursorPoint. + answer _ aFillInTheBlankMorph getUserResponse. - answer := aFillInTheBlankMorph getUserResponse. answer ifNil: [^self]. self updateIPAddressField: (answer findTokens: ' ',String cr). ! Item was changed: ----- Method: EToyMultiChatMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | r1 r2 | + r1 _ self addARow: { + self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?' translated. + self inAColumn: {StringMorph new contents: 'Multi chat with:' translated; lock}. - r1 := self addARow: { - self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?'. - self inAColumn: {StringMorph new contents: 'Multi chat with:'; lock}. self textEntryFieldNamed: #ipAddress with: '' + help: 'Click to edit participant list' translated. - help: 'Click to edit participant list'. }. + sendingPane _ PluggableTextMorph - sendingPane := PluggableTextMorph on: self text: nil accept: #acceptTo:forMorph:. sendingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: sendingPane. + r2 _ self addARow: {self inAColumn: {StringMorph new contents: 'Replies' translated; lock}}. + receivingPane _ PluggableTextMorph - r2 := self addARow: {self inAColumn: {StringMorph new contents: 'Replies'; lock}}. - receivingPane := PluggableTextMorph on: self text: nil accept: nil. receivingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: receivingPane. receivingPane spaceFillWeight: 3. {r1. r2} do: [ :each | each vResizing: #shrinkWrap; minHeight: 18; color: Color veryLightGray. ]. self updateIPAddressField: targetIPAddresses. + sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR _ true]).! - sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR := true]).! Item was changed: ----- Method: EToyPeerToPeer>>awaitDataFor: (in category 'receiving') ----- awaitDataFor: aCommunicatorMorph Socket initializeNetwork. + connectionQueue _ ConnectionQueue + portNumber: self class eToyCommunicationsPorts - connectionQueue := ConnectionQueue - portNumber: self class eToyCommunicationsPort queueLength: 6. + communicatorMorph _ aCommunicatorMorph. + process _ [self doAwaitData] newProcess. - communicatorMorph := aCommunicatorMorph. - process := [self doAwaitData] newProcess. process priority: Processor highIOPriority. process resume. ! Item was changed: ----- Method: EToyPeerToPeer>>doConnectForSend (in category 'sending') ----- doConnectForSend + | addr port | - | addr | + addr := NetNameResolver addressForName: (ipAddress copyUpTo: $:). - addr := NetNameResolver addressForName: ipAddress. addr ifNil: [ communicatorMorph commResult: {#message -> ('could not find ',ipAddress)}. + ^false]. + + port := (ipAddress copyAfter: $:) asInteger. + port ifNil: [port := self class eToyCommunicationsPorts first]. + + socket connectNonBlockingTo: addr port: port. - ^false - ]. - socket connectNonBlockingTo: addr port: self class eToyCommunicationsPort. [socket waitForConnectionFor: 15] on: ConnectionTimedOut do: [:ex | communicatorMorph commResult: {#message -> ('no connection to ',ipAddress,' (', + ipAddress,')')}. - (NetNameResolver stringFromAddress: addr),')')}. ^false]. ^true ! Item was changed: ----- Method: EToyPeerToPeer>>doReceiveOneMessage (in category 'receiving') ----- doReceiveOneMessage + | awaitingLength i length answer header | - | awaitingLength i length answer | + awaitingLength _ true. + answer _ WriteStream on: String new. - awaitingLength := true. - answer := WriteStream on: String new. [awaitingLength] whileTrue: [ + leftOverData _ leftOverData , socket receiveData. + (i _ leftOverData indexOf: $ ) > 0 ifTrue: [ + awaitingLength _ false. + header _ leftOverData first: i - 1. + length _ header asNumber. + self parseOptionalHeader: header. - leftOverData := leftOverData , socket receiveData. - (i := leftOverData indexOf: $ ) > 0 ifTrue: [ - awaitingLength := false. - length := (leftOverData first: i - 1) asNumber. answer nextPutAll: (leftOverData allButFirst: i). ]. ]. + leftOverData _ ''. - leftOverData := ''. [answer size < length] whileTrue: [ answer nextPutAll: socket receiveData. communicatorMorph commResult: {#commFlash -> true}. ]. + answer _ answer contents. - answer := answer contents. answer size > length ifTrue: [ + leftOverData _ answer allButFirst: length. + answer _ answer first: length - leftOverData := answer allButFirst: length. - answer := answer first: length ]. ^answer ! Item was changed: ----- Method: EToyPeerToPeer>>doSendData (in category 'sending') ----- doSendData | totalLength myData allTheData | + myData _ dataQueue next ifNil: [socket sendData: '0 '. ^false]. + totalLength _ (myData collect: [ :x | x size]) sum. + socket sendData: totalLength printString, self makeOptionalHeader, ' '. + allTheData _ WriteStream on: (String new: totalLength). - myData := dataQueue next ifNil: [socket sendData: '0 '. ^false]. - totalLength := (myData collect: [ :x | x size]) sum. - socket sendData: totalLength printString,' '. - allTheData := WriteStream on: (String new: totalLength). myData do: [ :chunk | allTheData nextPutAll: chunk asString]. NebraskaDebug at: #peerBytesSent add: {totalLength}. self sendDataCautiously: allTheData contents. ^true ! Item was changed: ----- Method: EToyPeerToPeer>>receiveDataOn:for: (in category 'receiving') ----- receiveDataOn: aSocket for: aCommunicatorMorph + socket _ aSocket. + remoteSocketAddress _ socket remoteSocketAddress hostNumber. + communicatorMorph _ aCommunicatorMorph. + process _ [ + leftOverData _ ''. - socket := aSocket. - remoteSocketAddress := socket remoteAddress. - communicatorMorph := aCommunicatorMorph. - process := [ - leftOverData := ''. [self doReceiveData] whileTrue. socket closeAndDestroy. ] newProcess. process priority: Processor highIOPriority. process resume. ! Item was changed: ----- Method: EToySenderMorph class>>descriptionForPartsBin (in category 'parts bin') ----- (excessive size, no diff calculated) Item was changed: ----- Method: EToySenderMorph>>checkOnAFriend (in category 'as yet unclassified') ----- checkOnAFriend + | gateKeeperEntry caption choices resp | - | gateKeeperEntry caption resp | + gateKeeperEntry _ EToyGateKeeperMorph entryForIPAddress: self ipAddress. + caption _ + 'Last name: ' translated ,gateKeeperEntry latestUserName, + '\Last message in: ' translated ,gateKeeperEntry lastIncomingMessageTimeString, + '\Last status check at: ' translated ,gateKeeperEntry lastTimeCheckedString, + '\Last status in: ' translated ,gateKeeperEntry statusReplyReceivedString. + choices _ 'Get his status now\Send my status now' translated. + resp _ (PopUpMenu labels: choices withCRs) startUpWithCaption: caption withCRs. - gateKeeperEntry := EToyGateKeeperMorph entryForIPAddress: self ipAddress. - caption := - 'Last name: ',gateKeeperEntry latestUserName, - '\Last message in: ',gateKeeperEntry lastIncomingMessageTimeString, - '\Last status check at: ',gateKeeperEntry lastTimeCheckedString, - '\Last status in: ',gateKeeperEntry statusReplyReceivedString. - resp := UIManager default chooseFrom: #('Get his status now' 'Send my status now') - title: caption withCRs. resp = 1 ifTrue: [ gateKeeperEntry lastTimeChecked: Time totalSeconds. self sendStatusCheck. ]. resp = 2 ifTrue: [ self sendStatusReply. ]. ! Item was changed: ----- Method: EToySenderMorph>>startNebraskaClient (in category 'as yet unclassified') ----- startNebraskaClient + | newMorph | - [ + [ + newMorph _ NetworkTerminalMorph connectTo: (self ipAddress copyUpTo: $:). "FIXME: get real port of Nebraska Server" + WorldState addDeferredUIMessage: [newMorph openInStyle: #scaled] fixTemps. - [ | newMorph | - newMorph := NetworkTerminalMorph connectTo: self ipAddress. - WorldState addDeferredUIMessage: [newMorph openInStyle: #scaled]. ] on: Error do: [ :ex | WorldState addDeferredUIMessage: [ + self inform: 'No connection to: ' translated. self ipAddress,' (',ex printString,')' + ] fixTemps - self inform: 'No connection to: '. self ipAddress,' (',ex printString,')' - ] ]. ] fork ! Item was changed: ----- Method: EToySenderMorph>>userName:userPicture:userEmail:userIPAddress: (in category 'as yet unclassified') ----- userName: aString userPicture: aFormOrNil userEmail: emailString userIPAddress: ipString | dropZoneRow | self setProperty: #currentBadgeVersion toValue: self currentBadgeVersion. + userPicture _ aFormOrNil ifNil: [ - userPicture := aFormOrNil ifNil: [ (TextStyle default fontOfSize: 26) emphasized: 1; characterFormAt: $? ]. + userPicture _ userPicture scaledToSize: 61@53. - userPicture := userPicture scaledToSize: 61@53. self killExistingChat. self removeAllMorphs. self useRoundedCorners. self addARow: { self inAColumn: {(StringMorph contents: aString) lock} }. + dropZoneRow _ self - dropZoneRow := self addARow: { self inAColumn: {userPicture asMorph lock} }. self establishDropZone: dropZoneRow. self addARow: { self textEntryFieldNamed: #emailAddress with: emailString help: 'Email address for this person' }; addARow: { self textEntryFieldNamed: #ipAddress with: ipString help: 'IP address for this person' }; addARow: { + self indicatorFieldNamed: #working color: Color blue help: 'working' translated. + self indicatorFieldNamed: #communicating color: Color green help: 'sending' translated. - self indicatorFieldNamed: #working color: Color blue help: 'working'. - self indicatorFieldNamed: #communicating color: Color green help: 'sending'. self buttonNamed: 'C' action: #startChat color: Color paleBlue + help: 'Open a written chat with this person' translated. - help: 'Open a written chat with this person'. self buttonNamed: 'T' action: #startTelemorphic color: Color paleYellow + help: 'Start telemorphic with this person' translated. - help: 'Start telemorphic with this person'. self buttonNamed: '!!' action: #tellAFriend color: Color paleGreen + help: 'Tell this person about the current project' translated. - help: 'Tell this person about the current project'. self buttonNamed: '?' action: #checkOnAFriend color: Color lightBrown + help: 'See if this person is available' translated. + "self buttonNamed: 'A' action: #startAudioChat color: Color yellow + help: 'Open an audio chat with this person' translated." - help: 'See if this person is available'. - self buttonNamed: 'A' action: #startAudioChat color: Color yellow - help: 'Open an audio chat with this person'. self buttonNamed: 'S' action: #startNebraskaClient color: Color white + help: 'See this person''s world (if he allows that)' translated. - help: 'See this person''s world (if he allows that)'. }. ! Item was changed: ----- Method: MorphicTransform>>encodeForRemoteCanvas (in category '*nebraska-*nebraska-Morphic-Remote') ----- encodeForRemoteCanvas "encode this transform into a string for use by a RemoteCanvas" ^String streamContents: [ :str | str nextPutAll: 'Morphic,'; print: offset x truncated; nextPut: $,; print: offset y truncated; nextPut: $,; + print: scale asFloat; - print: scale; nextPut: $,; + print: angle asFloat - print: angle ]! Item was changed: ----- Method: NebraskaClient>>currentStatusString (in category 'as yet unclassified') ----- currentStatusString (connection isNil or: [connection isConnected not]) ifTrue: [^'nada']. + ^connection remoteSocketAddress hostNumber, - ^(NetNameResolver stringFromAddress: connection remoteAddress), ' - ', (self backlog // 1024) printString,'k'! Item was changed: ----- Method: NebraskaClient>>initialize: (in category 'initialization') ----- initialize: aConnection | remoteAddress userPicture | connection := aConnection. hand := RemoteControlledHandMorph on: (MorphicEventDecoder on: aConnection). hand nebraskaClient: self. + remoteAddress _ connection remoteSocketAddress. + userPicture _ EToySenderMorph pictureForIPAddress: remoteAddress. - remoteAddress := connection remoteAddress. - remoteAddress ifNotNil: [remoteAddress := NetNameResolver stringFromAddress: remoteAddress]. - userPicture := EToySenderMorph pictureForIPAddress: remoteAddress. hand userInitials: ((EToySenderMorph nameForIPAddress: remoteAddress) ifNil: ['???']) andPicture: (userPicture ifNotNil: [userPicture scaledToSize: 16@20]). encoder := CanvasEncoder on: aConnection. canvas := RemoteCanvas connection: encoder clipRect: NebraskaServer extremelyBigRectangle transform: MorphicTransform identity! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonBuffered (in category 'as yet unclassified') ----- buttonBuffered + ^self makeButton: 'B' + balloonText: 'Request buffered Nebraska session' translated + for: #bufferNebraska - ^self makeButton: 'B' balloonText: 'Request buffered Nebraska session' for: #bufferNebraska ! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonQuit (in category 'the buttons') ----- buttonQuit + ^self makeButton: 'Quit' translated + balloonText: 'Quit this Nebraska session' translated + for: #quitNebraska - ^self makeButton: 'Quit' balloonText: 'Quit this Nebraska session' for: #quitNebraska ! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonScale (in category 'as yet unclassified') ----- buttonScale + ^self makeButton: '1x1' + balloonText: 'Switch between 1x1 and scaled view' translated + for: #toggleFullView - ^self makeButton: '1x1' balloonText: 'Switch between 1x1 and scaled view' for: #toggleFullView ! Item was changed: ----- Method: NebraskaServer class>>serveWorld: (in category 'instance creation') ----- serveWorld: aWorld + ^self serveWorld: aWorld onPort: self defaultPorts! - ^self serveWorld: aWorld onPort: self defaultPort! Item was changed: ----- Method: NebraskaServerMorph class>>serveWorld: (in category 'as yet unclassified') ----- serveWorld: aWorld "Check to make sure things won't crash. See Mantis #0000519" + ^aWorld isSafeToServe ifTrue:[ + self serveWorld: aWorld onPort: NebraskaServer defaultPorts] + ! - aWorld allMorphsDo:[:m| - m isSafeToServe ifFalse:[ - ^self inform: 'Can not share world if a ', m class, ' is present. Close the mprph and try again']]. - ^self serveWorld: aWorld onPort: NebraskaServer defaultPort! Item was changed: ----- Method: NebraskaServerMorph class>>serveWorld:onPort: (in category 'as yet unclassified') ----- serveWorld: aWorld onPort: aPortNumber | server | server := NebraskaServer serveWorld: aWorld onPort: aPortNumber. (self new) openInWorld: aWorld. + ^server - "server acceptNullConnection" "server acceptPhonyConnection." ! Item was changed: ----- Method: NebraskaServerMorph class>>supplementaryPartsDescriptions (in category 'as yet unclassified') ----- supplementaryPartsDescriptions ^ {DescriptionForPartsBin + formalName: 'NebraskaServer' translatedNoop + categoryList: #() + documentation: 'A button to start the Nebraska desktop sharing server' translatedNoop - formalName: 'NebraskaServer' - categoryList: #('Collaborative') - documentation: 'A button to start the Nebraska desktop sharing server' translated globalReceiverSymbol: #NebraskaServerMorph nativitySelector: #serveWorldButton }! Item was changed: ----- Method: NebraskaServerMorph>>delete (in category 'submorphs-add/remove') ----- delete self server ifNotNil:[ + (self confirm:'Shutdown the server?' translated) - (self confirm:'Shutdown the server?') ifTrue:[self world remoteServer: nil]]. super delete.! Item was changed: ----- Method: NebraskaServerMorph>>rebuild (in category 'initialization') ----- rebuild | myServer toggle closeBox font | + font _ StrikeFont familyName: #Palatino size: 14. - font := StrikeFont familyName: #Palatino size: 14. self removeAllMorphs. self setColorsAndBorder. self updateCurrentStatusString. + toggle _ SimpleHierarchicalListMorph new perform: ( - toggle := SimpleHierarchicalListMorph new perform: ( fullDisplay ifTrue: [#expandedForm] ifFalse: [#notExpandedForm] ). + closeBox _ SimpleButtonMorph new borderWidth: 0; + label: 'X' font: Preferences standardEToysButtonFont; color: Color transparent; - closeBox := SimpleButtonMorph new borderWidth: 0; - label: 'X' font: Preferences standardButtonFont; color: Color transparent; actionSelector: #delete; target: self; extent: 14@14; + setBalloonText: 'End Nebraska session' translated. - setBalloonText: 'End Nebrasks session'. self addARow: { self inAColumn: {closeBox}. self inAColumn: { UpdatingStringMorph new useStringFormat; target: self; font: font; getSelector: #currentStatusString; contents: self currentStatusString; stepTime: 2000; lock. }. self inAColumn: { toggle asMorph on: #mouseUp send: #toggleFull to: self; + setBalloonText: 'Show more or less of Nebraska Status' translated - setBalloonText: 'Show more or less of Nebraska Status' }. }. + myServer _ self server. - myServer := self server. (myServer isNil or: [fullDisplay not]) ifTrue: [ ^World startSteppingSubmorphsOf: self ]. "--- the expanded display ---" self addARow: { self inAColumn: { UpdatingStringMorph new useStringFormat; target: self; font: font; getSelector: #currentBacklogString; contents: self currentBacklogString; stepTime: 2000; lock. }. }. self addARow: { self inAColumn: { (StringMorph contents: '--clients--' translated) lock; font: font. }. }. myServer clients do: [ :each | self addARow: { UpdatingStringMorph new useStringFormat; target: each; font: font; getSelector: #currentStatusString; contents: each currentStatusString; stepTime: 2000; lock. } ]. World startSteppingSubmorphsOf: self.! Item was changed: ----- Method: NebraskaServerMorph>>updateCurrentStatusString (in category 'drawing') ----- updateCurrentStatusString self server ifNil:[ + currentStatusString _ '' translated. + currentBacklogString _ ''. - currentStatusString := '' translated. - currentBacklogString := ''. ] ifNotNil:[ + currentStatusString _ + ' Nebraska: {1} clients' translated format: {self server numClients printString}. + currentBacklogString _ 'backlog: ' translated, + ((previousBacklog _ self server backlog) // 1024) printString,'k' - currentStatusString := - ' Nebraska: ' translated, - self server numClients printString, - ' clients' translated. - currentBacklogString := 'backlog: ' translated, - ((previousBacklog := self server backlog) // 1024) printString,'k' ]. ! Item was changed: ----- Method: NetworkTerminalMorph class>>connectTo: (in category 'instance creation') ----- + connectTo: hostAndPort + | host port | + host := hostAndPort copyUpTo: $:. + port := (hostAndPort copyAfter: $:) asInteger. + port ifNil: [port := NebraskaServer defaultPorts first]. + ^self connectTo: host port:port - connectTo: serverHost - - ^self connectTo: serverHost port: NebraskaServer defaultPort - ! Item was changed: ----- Method: NetworkTerminalMorph class>>socketConnectedTo:port: (in category 'instance creation') ----- socketConnectedTo: serverHost port: serverPort | sock | Socket initializeNetwork. + sock _ Socket new. - sock := Socket new. [sock connectTo: (NetNameResolver addressForName: serverHost) port: serverPort] on: ConnectionTimedOut + do: [:ex | self error: 'could not connect to server' translated ]. - do: [:ex | self error: 'could not connect to server' ]. ^StringSocket on: sock ! Item was changed: ----- Method: NetworkTerminalMorph>>acceptDroppingMorph:event: (in category 'layout') ----- acceptDroppingMorph: morphToDrop event: evt | myCopy outData null | (morphToDrop isKindOf: NewHandleMorph) ifTrue: [ "don't send these" ^morphToDrop rejectDropMorphEvent: evt. ]. self eToyRejectDropMorph: morphToDrop event: evt. "we don't really want it" "7 mar 2001 - remove #veryDeepCopy" + myCopy _ morphToDrop. "gradient fills require doing this second" - myCopy := morphToDrop. "gradient fills require doing this second" myCopy setProperty: #positionInOriginatingWorld toValue: morphToDrop position. + outData _ myCopy eToyStreamedRepresentationNotifying: nil. + null _ String with: 0 asCharacter. - outData := myCopy eToyStreamedRepresentationNotifying: nil. - null := String with: 0 asCharacter. EToyPeerToPeer new sendSomeData: { EToyIncomingMessage typeMorph,null. Preferences defaultAuthorName,null. outData } + to: connection remoteSocketAddress hostNumber - to: (NetNameResolver stringFromAddress: connection remoteAddress) for: self. ! From commits at source.squeak.org Tue Aug 30 17:09:22 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 17:09:25 2016 Subject: [squeak-dev] The Trunk: Nebraska-tfel.43.mcz Message-ID: Tim Felgentreff uploaded a new version of Nebraska to project The Trunk: http://source.squeak.org/trunk/Nebraska-tfel.43.mcz ==================== Summary ==================== Name: Nebraska-tfel.43 Author: tfel Time: 2 August 2016, 10:02:13.874368 am UUID: 801e68f0-394e-2b45-8b91-be5dd271ad9f Ancestors: Nebraska-mt.42, Nebraska-bf.3 merge from Squeakland Etoys image =============== Diff against Nebraska-mt.42 =============== Item was changed: - SystemOrganization addCategory: #'Nebraska-Audio Chat'! SystemOrganization addCategory: #'Nebraska-Morphic-Collaborative'! SystemOrganization addCategory: #'Nebraska-Morphic-Experimental'! SystemOrganization addCategory: #'Nebraska-Morphic-Remote'! SystemOrganization addCategory: #'Nebraska-Network-EToy Communications'! SystemOrganization addCategory: #'Nebraska-Network-ObjectSocket'! + SystemOrganization addCategory: #'Nebraska-Audio Chat'! Item was changed: ----- Method: CanvasDecoder class>>decodeTTCFont: (in category 'decoding') ----- decodeTTCFont: fontString "Decode a string that consists of (e.g. 'ComicSansMS 12 0') into a proper instance." | first second | + first _ fontString indexOf: $ startingAt: 1. + second _ fontString indexOf: $ startingAt: first + 1. - first := fontString indexOf: $ startingAt: 1. - second := fontString indexOf: $ startingAt: first + 1. (first ~= 0 and: [second ~= 0]) ifTrue: [ + ^ TTCFont familyName: (fontString copyFrom: 1 to: (first - 1)) + size: (fontString copyFrom: first + 1 to: second - 1) asNumber - ^ (TTCFont family: (fontString copyFrom: 1 to: (first - 1)) - size: (fontString copyFrom: first + 1 to: second - 1) asNumber) emphasized: (fontString copyFrom: second + 1 to: fontString size) asNumber. ]. ^ TextStyle defaultFont. ! Item was changed: ----- Method: CanvasEncoder>>image:at:sourceRect:rule: (in category 'drawing') ----- image: aForm at: aPoint sourceRect: sourceRect rule: argRule | cacheID cacheNew cacheReply formToSend cacheEntry destRect visRect aFormArea d2 rule | + rule _ argRule. - rule := argRule. "first if we are only going to be able to draw a small part of the form, it may be faster just to send the part of the form that will actually show up" + destRect _ aPoint extent: sourceRect extent. + d2 _ (lastTransform invertBoundsRect: destRect) expandBy: 1. - destRect := aPoint extent: sourceRect extent. - d2 := (lastTransform invertBoundsRect: destRect) expandBy: 1. (d2 intersects: lastClipRect) ifFalse: [ ^NebraskaDebug at: #bigImageSkipped add: {lastClipRect. d2}. ]. + aFormArea _ aForm boundingBox area. - aFormArea := aForm boundingBox area. (aFormArea > 20000 and: [aForm isStatic not and: [lastTransform isPureTranslation]]) ifTrue: [ + visRect _ destRect intersect: lastClipRect. - visRect := destRect intersect: lastClipRect. visRect area < (aFormArea // 20) ifTrue: [ "NebraskaDebug at: #bigImageReduced add: {lastClipRect. aPoint. sourceRect extent. lastTransform}." + formToSend _ aForm copy: (visRect translateBy: sourceRect origin - aPoint). + formToSend depth = 32 ifTrue: [ + formToSend _ formToSend asFormOfDepth: 16. + (rule = 24 or: [rule = 34]) ifTrue: [rule _ 25]]. - formToSend := aForm copy: (visRect translateBy: sourceRect origin - aPoint). - formToSend depth = 32 ifTrue: [formToSend := formToSend asFormOfDepth: 16. rule = 24 ifTrue: [rule := 25]]. ^self image: formToSend at: visRect origin sourceRect: formToSend boundingBox rule: rule cacheID: 0 "no point in trying to cache this - it's a one-timer" newToCache: false. ]. ]. + cacheID _ 0. + cacheNew _ false. + formToSend _ aForm. + (aFormArea > 1000 and: [(cacheReply _ self testCache: aForm) notNil]) ifTrue: [ + cacheID _ cacheReply first. + cacheEntry _ cacheReply third. + (cacheNew _ cacheReply second) ifFalse: [ + formToSend _ aForm isStatic - cacheID := 0. - cacheNew := false. - formToSend := aForm. - (aFormArea > 1000 and: [(cacheReply := self testCache: aForm) notNil]) ifTrue: [ - cacheID := cacheReply first. - cacheEntry := cacheReply third. - (cacheNew := cacheReply second) ifFalse: [ - formToSend := aForm isStatic ifTrue: [nil] ifFalse: [aForm depth <= 8 ifTrue: [aForm] ifFalse: [aForm deltaFrom: cacheEntry fourth]]. ]. cacheEntry at: 4 put: (aForm isStatic ifTrue: [aForm] ifFalse: [aForm deepCopy]). ]. + (formToSend notNil and: [ + formToSend depth = 32 and: [ + rule ~= 24 and: [ + rule ~= 34]]]) ifTrue: [ + formToSend _ formToSend asFormOfDepth: 16. + ]. - (formToSend notNil and: [formToSend depth = 32]) ifTrue: [formToSend := formToSend asFormOfDepth: 16. rule = 24 ifTrue: [rule := 25]]. self image: formToSend at: aPoint sourceRect: sourceRect rule: rule cacheID: cacheID newToCache: cacheNew. ! Item was changed: ----- Method: CanvasEncoder>>sendFont:atIndex: (in category 'fonts') ----- sendFont: aFont atIndex: index "Transmits the given fint to the other side" | code | + code _ CanvasEncoder codeFont. + (aFont isMemberOf: StrikeFontSet) ifTrue: [code _ CanvasEncoder codeFontSet]. + aFont isTTCFont ifTrue: [code _ CanvasEncoder codeTTCFont]. - code := CanvasEncoder codeFont. - aFont isTTCFont ifTrue: [code := CanvasEncoder codeTTCFont]. self sendCommand: { String with: code. self class encodeInteger: index. self class encodeFont: aFont }. ! Item was changed: ----- Method: EToyChatMorph class>>chatWindowForIP:name:picture:inWorld: (in category 'as yet unclassified') ----- chatWindowForIP: ipAddress name: senderName picture: aForm inWorld: aWorld | makeANewOne aSenderBadge existing | + existing _ self instanceForIP: ipAddress inWorld: aWorld. - existing := self instanceForIP: ipAddress inWorld: aWorld. existing ifNotNil: [^existing]. + makeANewOne _ [ - makeANewOne := [ self new recipientForm: aForm; open; setIPAddress: ipAddress ]. EToyCommunicatorMorph playArrivalSound. self doChatsInternalToBadge ifTrue: [ + aSenderBadge _ EToySenderMorph instanceForIP: ipAddress inWorld: aWorld. - aSenderBadge := EToySenderMorph instanceForIP: ipAddress inWorld: aWorld. aSenderBadge ifNotNil: [ aSenderBadge startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. + aSenderBadge _ EToySenderMorph instanceForIP: ipAddress. - aSenderBadge := EToySenderMorph instanceForIP: ipAddress. aSenderBadge ifNotNil: [ + aSenderBadge _ aSenderBadge veryDeepCopy. - aSenderBadge := aSenderBadge veryDeepCopy. aSenderBadge killExistingChat; openInWorld: aWorld; startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. + (aSenderBadge _ EToySenderMorph new) - (aSenderBadge := EToySenderMorph new) userName: senderName userPicture: aForm + userEmail: 'unknown' translated - userEmail: 'unknown' userIPAddress: ipAddress; position: 200@200; openInWorld: aWorld; startChat: false. ^aSenderBadge findDeepSubmorphThat: [ :x | x isKindOf: EToyChatMorph] ifAbsent: makeANewOne ]. ^makeANewOne value. ! Item was changed: ----- Method: EToyChatMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Text chat' translatedNoop + categories: #() + documentation: 'A tool for sending messages to other Squeak users' translatedNoop! - ^ self partName: 'Text chat' - categories: #('Collaborative') - documentation: 'A tool for sending messages to other Squeak users'! Item was changed: ----- Method: EToyChatMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | r1 r2 | + r1 _ self addARow: { + self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?' translated. + self inAColumn: {StringMorph new contents: 'Your message to:' translated; font: Preferences standardMenuFont; lock}. - r1 := self addARow: { - self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?'. - self inAColumn: {StringMorph new contents: 'Your message to:'; lock}. self textEntryFieldNamed: #ipAddress with: '' + help: 'IP address for chat partner' translated. - help: 'IP address for chat partner'. }. recipientForm ifNotNil: [ r1 addMorphBack: recipientForm asMorph lock ]. + sendingPane _ PluggableTextMorph - sendingPane := PluggableTextMorph on: self text: nil accept: #acceptTo:forMorph:. sendingPane hResizing: #spaceFill; vResizing: #spaceFill. + sendingPane font: Preferences standardMenuFont. self addMorphBack: sendingPane. + r2 _ self addARow: {self inAColumn: {StringMorph new contents: 'Replies' translated; font: Preferences standardMenuFont; lock}}. + receivingPane _ PluggableTextMorph - r2 := self addARow: {self inAColumn: {StringMorph new contents: 'Replies'; lock}}. - receivingPane := PluggableTextMorph on: self text: nil accept: nil. + receivingPane font: Preferences standardMenuFont. receivingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: receivingPane. receivingPane spaceFillWeight: 3. {r1. r2} do: [ :each | each vResizing: #shrinkWrap; minHeight: 18; color: Color veryLightGray. ]. + sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR _ true])! - sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR := true])! Item was changed: ----- Method: EToyFridgeMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Fridge' translatedNoop + categories: #() + documentation: 'A tool for sending objects to other Squeak users' translatedNoop! - ^ self partName: 'Fridge' - categories: #('Collaborative') - documentation: 'A tool for sending objects to other Squeak users'! Item was changed: ----- Method: EToyFridgeMorph>>groupToggleButton (in category 'as yet unclassified') ----- groupToggleButton ^(self inAColumn: { (EtoyUpdatingThreePhaseButtonMorph checkBox) target: self; actionSelector: #toggleChoice:; arguments: {'group'}; getSelector: #getChoice:; + setBalloonText: 'Changes between group mode and individuals' translated; - setBalloonText: 'Changes between group mode and individuals'; step }) hResizing: #shrinkWrap ! Item was changed: ----- Method: EToyFridgeMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | row filler fudge people maxPerRow insetY | + updateCounter _ self class updateCounter. - updateCounter := self class updateCounter. self removeAllMorphs. (self addARow: { + filler _ Morph new color: Color transparent; extent: 4@4. - filler := Morph new color: Color transparent; extent: 4@4. }) vResizing: #shrinkWrap. self addARow: { + (StringMorph contents: 'the Fridge' translated) lock. - (StringMorph contents: 'the Fridge') lock. self groupToggleButton. }. + row _ self addARow: {}. + people _ self class fridgeRecipients. + maxPerRow _ people size < 7 ifTrue: [2] ifFalse: [3]. - row := self addARow: {}. - people := self class fridgeRecipients. - maxPerRow := people size < 7 ifTrue: [2] ifFalse: [3]. "how big can this get before we need a different approach?" people do: [ :each | + row submorphCount >= maxPerRow ifTrue: [row _ self addARow: {}]. - row submorphCount >= maxPerRow ifTrue: [row := self addARow: {}]. row addMorphBack: ( groupMode ifTrue: [ (each userPicture scaledToSize: 35@35) asMorph lock ] ifFalse: [ each veryDeepCopy killExistingChat ] ) ]. + fullBounds _ nil. - fullBounds := nil. self fullBounds. + "htsBefore _ submorphs collect: [ :each | each height]." - "htsBefore := submorphs collect: [ :each | each height]." + fudge _ 20. + insetY _ self layoutInset. + insetY isPoint ifTrue: [insetY _ insetY y]. - fudge := 20. - insetY := self layoutInset. - insetY isPoint ifTrue: [insetY := insetY y]. filler extent: 4 @ (self height - filler height * 0.37 - insetY - borderWidth - fudge) truncated. "self fixLayout. + htsAfter _ submorphs collect: [ :each | each height]. - htsAfter := submorphs collect: [ :each | each height]. {htsBefore. htsAfter} explore." ! Item was changed: ----- Method: EToyIncomingMessage class>>allTypes (in category 'message types') ----- allTypes ^MessageTypes ifNil: [ + MessageTypes _ { - MessageTypes := { self typeKeyboardChat. self typeMorph. self typeFridge. self typeStatusRequest. self typeStatusReply. self typeSeeDesktop. - self typeAudioChat. - self typeAudioChatContinuous. self typeMultiChat. } ] ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewMorphFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewMorphFrom: dataStream sentBy: senderName ipAddress: ipAddressString | newObject thumbForm targetWorld | + newObject _ self newObjectFromStream: dataStream. - newObject := self newObjectFromStream: dataStream. EToyCommunicatorMorph playArrivalSound. + targetWorld _ self currentWorld. - targetWorld := self currentWorld. (EToyMorphsWelcomeMorph morphsWelcomeInWorld: targetWorld) ifTrue: [ newObject position: ( newObject valueOfProperty: #positionInOriginatingWorld ifAbsent: [(targetWorld randomBoundsFor: newObject) topLeft] ). WorldState addDeferredUIMessage: [ newObject openInWorld: targetWorld. + ] fixTemps. - ]. ^self ]. + thumbForm _ newObject imageForm scaledToSize: 50@50. + SugarListenerMorph addToGlobalIncomingQueue: { - thumbForm := newObject imageForm scaledToSize: 50@50. - EToyListenerMorph addToGlobalIncomingQueue: { thumbForm. newObject. senderName. ipAddressString }. WorldState addDeferredUIMessage: [ + SugarListenerMorph ensureListenerInCurrentWorld + ] fixTemps. - EToyListenerMorph ensureListenerInCurrentWorld - ]. ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewSeeDesktopFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewSeeDesktopFrom: dataStream sentBy: senderName ipAddress: ipAddressString "more later" ^ EToyChatMorph chatFrom: ipAddressString name: senderName + text: ipAddressString,' would like to see your desktop' translated. - text: ipAddressString,' would like to see your desktop'. ! Item was changed: ----- Method: EToyIncomingMessage class>>handleNewStatusRequestFrom:sentBy:ipAddress: (in category 'handlers') ----- handleNewStatusRequestFrom: dataStream sentBy: senderName ipAddress: ipAddressString "more later" ^ EToyChatMorph chatFrom: ipAddressString name: senderName + text: ipAddressString,' would like to know if you are available' translated. - text: ipAddressString,' would like to know if you are available'. ! Item was changed: ----- Method: EToyListenerMorph class>>commResultDeferred: (in category 'as yet unclassified') ----- commResultDeferred: anArrayOfAssociations | m ipAddress aDictionary | "to be run as part of the UI process in case user interaction is required" + aDictionary _ Dictionary new. - aDictionary := Dictionary new. anArrayOfAssociations do: [ :each | aDictionary add: each]. aDictionary at: #commFlash ifPresent: [ :ignore | ^self]. + m _ aDictionary at: #message ifAbsent: [^self]. - m := aDictionary at: #message ifAbsent: [^self]. m = 'OK' ifFalse: [^self]. + ipAddress _ aDictionary at: #ipAddress. - ipAddress := NetNameResolver stringFromAddress: (aDictionary at: #ipAddress). EToyIncomingMessage new incomingMessgage: (ReadStream on: (aDictionary at: #data)) fromIPAddress: ipAddress ! Item was changed: ----- Method: EToyListenerMorph class>>confirmListening (in category 'as yet unclassified') ----- confirmListening self isListening ifFalse: [ (self confirm: 'You currently are not listening and will not hear a reply. + Shall I start listening for you?' translated) ifTrue: [ - Shall I start listening for you?') ifTrue: [ self startListening ]. ]. ! Item was changed: ----- Method: EToyListenerMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Listener' translatedNoop + categories: #() + documentation: 'A tool for receiving things from other Squeak users' translatedNoop! - - ^ self partName: 'Listener' - categories: #('Collaborative') - documentation: 'A tool for receiving things from other Squeak users'! Item was changed: ----- Method: EToyListenerMorph>>mouseDownEvent:for: (in category 'as yet unclassified') ----- mouseDownEvent: event for: aMorph + | menu selection depictedObject | - | menu depictedObject | depictedObject := aMorph firstSubmorph valueOfProperty: #depictedObject. + menu := CustomMenu new. - menu := MenuMorph new. menu + add: 'Grab' translated action: [event hand attachMorph: depictedObject veryDeepCopy]; + add: 'Delete' translated - add: 'Grab' action: [event hand attachMorph: depictedObject veryDeepCopy]; - add: 'Delete' action: [self class removeFromGlobalIncomingQueue: depictedObject. self rebuild]. + selection := menu build startUpCenteredWithCaption: 'Morph from ' translated + , (aMorph submorphs second) firstSubmorph contents. + selection ifNil: [^self]. + selection value! - menu title: 'Morph from ' , (aMorph submorphs second) firstSubmorph contents. - menu invokeModal.! Item was changed: ----- Method: EToyListenerMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | earMorph | + updateCounter _ UpdateCounter. - updateCounter := UpdateCounter. self removeAllMorphs. self addGateKeeperMorphs. GlobalListener ifNil: [ + earMorph _ (self class makeListeningToggleNew: false) asMorph. + earMorph setBalloonText: 'Click to START listening for messages' translated. - earMorph := (self class makeListeningToggleNew: false) asMorph. - earMorph setBalloonText: 'Click to START listening for messages'. earMorph on: #mouseUp send: #startListening to: self. ] ifNotNil: [ + earMorph _ (self class makeListeningToggleNew: true) asMorph. + earMorph setBalloonText: 'Click to STOP listening for messages' translated. - earMorph := (self class makeListeningToggleNew: true) asMorph. - earMorph setBalloonText: 'Click to STOP listening for messages'. earMorph on: #mouseUp send: #stopListening to: self. ]. self addARow: {self inAColumn: {earMorph}}. self addARow: { + self inAColumn: {(StringMorph contents: 'Incoming communications' translated ) lock}. + self indicatorFieldNamed: #working color: Color blue help: 'working' translated. + self indicatorFieldNamed: #communicating color: Color green help: 'receiving' translated. - self inAColumn: {(StringMorph contents: 'Incoming communications') lock}. - self indicatorFieldNamed: #working color: Color blue help: 'working'. - self indicatorFieldNamed: #communicating color: Color green help: 'receiving'. }. "{thumbForm. newObject. senderName. ipAddressString}" self class globalIncomingQueueCopy do: [ :each | self addNewObject: each second thumbForm: each first sentBy: each third ipAddress: each fourth. ].! Item was changed: ----- Method: EToyMorphsWelcomeMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Welcome' translatedNoop + categories: #() + documentation: 'A sign that you accept morphs dropped directly into your world' translatedNoop! - ^ self partName: 'Welcome' - categories: #('Collaborative') - documentation: 'A sign that you accept morphs dropped directly into your world'! Item was changed: ----- Method: EToyMorphsWelcomeMorph>>initialize (in category 'initialization') ----- initialize "initialize the state of the receiver" | earMorph | super initialize. "" self layoutInset: 8 @ 8. + "earMorph _ (EToyListenerMorph makeListeningToggle: true) - "earMorph := (EToyListenerMorph makeListeningToggle: true) asMorph." + earMorph _ TextMorph new contents: 'Morphs - earMorph := TextMorph new contents: 'Morphs welcome here'; fontName: Preferences standardEToysFont familyName size: 18; centered; lock. self addARow: {earMorph}. + self setBalloonText: 'My presence in this world means received morphs may appear automatically' translated! - self setBalloonText: 'My presence in this world means received morphs may appear automatically'! Item was changed: ----- Method: EToyMultiChatMorph class>>descriptionForPartsBin (in category 'parts bin') ----- descriptionForPartsBin + ^ self partName: 'Text chat+' translatedNoop + categories: #() + documentation: 'A tool for sending messages to several Squeak users at once' translatedNoop - ^ self partName: 'Text chat+' - categories: #('Collaborative') - documentation: 'A tool for sending messages to several Squeak users at once' sampleImageForm: (Form extent: 25@25 depth: 16 fromArray: #( 1177640695 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593270007 1593245696 1593263665 1593270007 1593270007 1593270007 1177634353 1177628012 1177628012 1177640695 1593270007 1593270007 1593278463 2147450879 1316159488 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593274233 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1731723264 1593257324 762064236 762064236 762064236 762064236 762057894 762057894 762064236 762064236 762064236 762064236 762064236 1177616384 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593278459 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 2147188731 1870200832 1593274233 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1870229369 1731723264) offset: 0@0)! Item was changed: ----- Method: EToyMultiChatMorph>>editEvent:for: (in category 'as yet unclassified') ----- editEvent: anEvent for: aMorph | answer initialText aFillInTheBlankMorph | (aMorph bounds containsPoint: anEvent cursorPoint) ifFalse: [^self]. + initialText _ String streamContents: [ :strm | - initialText := String streamContents: [ :strm | targetIPAddresses do: [ :each | strm nextPutAll: each; cr]. ]. + aFillInTheBlankMorph _ FillInTheBlankMorph new + setQuery: 'Who are you chatting with?' translated - aFillInTheBlankMorph := FillInTheBlankMorph new - setQuery: 'Who are you chatting with?' initialAnswer: initialText answerHeight: 250 acceptOnCR: false. aFillInTheBlankMorph responseUponCancel: nil. self world addMorph: aFillInTheBlankMorph centeredNear: anEvent cursorPoint. + answer _ aFillInTheBlankMorph getUserResponse. - answer := aFillInTheBlankMorph getUserResponse. answer ifNil: [^self]. self updateIPAddressField: (answer findTokens: ' ',String cr). ! Item was changed: ----- Method: EToyMultiChatMorph>>rebuild (in category 'as yet unclassified') ----- rebuild | r1 r2 | + r1 _ self addARow: { + self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?' translated. + self inAColumn: {StringMorph new contents: 'Multi chat with:' translated; lock}. - r1 := self addARow: { - self simpleToggleButtonFor: self attribute: #acceptOnCR help: 'Send with Return?'. - self inAColumn: {StringMorph new contents: 'Multi chat with:'; lock}. self textEntryFieldNamed: #ipAddress with: '' + help: 'Click to edit participant list' translated. - help: 'Click to edit participant list'. }. + sendingPane _ PluggableTextMorph - sendingPane := PluggableTextMorph on: self text: nil accept: #acceptTo:forMorph:. sendingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: sendingPane. + r2 _ self addARow: {self inAColumn: {StringMorph new contents: 'Replies' translated; lock}}. + receivingPane _ PluggableTextMorph - r2 := self addARow: {self inAColumn: {StringMorph new contents: 'Replies'; lock}}. - receivingPane := PluggableTextMorph on: self text: nil accept: nil. receivingPane hResizing: #spaceFill; vResizing: #spaceFill. self addMorphBack: receivingPane. receivingPane spaceFillWeight: 3. {r1. r2} do: [ :each | each vResizing: #shrinkWrap; minHeight: 18; color: Color veryLightGray. ]. self updateIPAddressField: targetIPAddresses. + sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR _ true]).! - sendingPane acceptOnCR: (acceptOnCR ifNil: [acceptOnCR := true]).! Item was changed: ----- Method: EToyPeerToPeer>>awaitDataFor: (in category 'receiving') ----- awaitDataFor: aCommunicatorMorph Socket initializeNetwork. + connectionQueue _ ConnectionQueue + portNumber: self class eToyCommunicationsPorts - connectionQueue := ConnectionQueue - portNumber: self class eToyCommunicationsPort queueLength: 6. + communicatorMorph _ aCommunicatorMorph. + process _ [self doAwaitData] newProcess. - communicatorMorph := aCommunicatorMorph. - process := [self doAwaitData] newProcess. process priority: Processor highIOPriority. process resume. ! Item was changed: ----- Method: EToyPeerToPeer>>doConnectForSend (in category 'sending') ----- doConnectForSend + | addr port | - | addr | + addr := NetNameResolver addressForName: (ipAddress copyUpTo: $:). - addr := NetNameResolver addressForName: ipAddress. addr ifNil: [ communicatorMorph commResult: {#message -> ('could not find ',ipAddress)}. + ^false]. + + port := (ipAddress copyAfter: $:) asInteger. + port ifNil: [port := self class eToyCommunicationsPorts first]. + + socket connectNonBlockingTo: addr port: port. - ^false - ]. - socket connectNonBlockingTo: addr port: self class eToyCommunicationsPort. [socket waitForConnectionFor: 15] on: ConnectionTimedOut do: [:ex | communicatorMorph commResult: {#message -> ('no connection to ',ipAddress,' (', + ipAddress,')')}. - (NetNameResolver stringFromAddress: addr),')')}. ^false]. ^true ! Item was changed: ----- Method: EToyPeerToPeer>>doReceiveOneMessage (in category 'receiving') ----- doReceiveOneMessage + | awaitingLength i length answer header | - | awaitingLength i length answer | + awaitingLength _ true. + answer _ WriteStream on: String new. - awaitingLength := true. - answer := WriteStream on: String new. [awaitingLength] whileTrue: [ + leftOverData _ leftOverData , socket receiveData. + (i _ leftOverData indexOf: $ ) > 0 ifTrue: [ + awaitingLength _ false. + header _ leftOverData first: i - 1. + length _ header asNumber. + self parseOptionalHeader: header. - leftOverData := leftOverData , socket receiveData. - (i := leftOverData indexOf: $ ) > 0 ifTrue: [ - awaitingLength := false. - length := (leftOverData first: i - 1) asNumber. answer nextPutAll: (leftOverData allButFirst: i). ]. ]. + leftOverData _ ''. - leftOverData := ''. [answer size < length] whileTrue: [ answer nextPutAll: socket receiveData. communicatorMorph commResult: {#commFlash -> true}. ]. + answer _ answer contents. - answer := answer contents. answer size > length ifTrue: [ + leftOverData _ answer allButFirst: length. + answer _ answer first: length - leftOverData := answer allButFirst: length. - answer := answer first: length ]. ^answer ! Item was changed: ----- Method: EToyPeerToPeer>>doSendData (in category 'sending') ----- doSendData | totalLength myData allTheData | + myData _ dataQueue next ifNil: [socket sendData: '0 '. ^false]. + totalLength _ (myData collect: [ :x | x size]) sum. + socket sendData: totalLength printString, self makeOptionalHeader, ' '. + allTheData _ WriteStream on: (String new: totalLength). - myData := dataQueue next ifNil: [socket sendData: '0 '. ^false]. - totalLength := (myData collect: [ :x | x size]) sum. - socket sendData: totalLength printString,' '. - allTheData := WriteStream on: (String new: totalLength). myData do: [ :chunk | allTheData nextPutAll: chunk asString]. NebraskaDebug at: #peerBytesSent add: {totalLength}. self sendDataCautiously: allTheData contents. ^true ! Item was changed: ----- Method: EToyPeerToPeer>>receiveDataOn:for: (in category 'receiving') ----- receiveDataOn: aSocket for: aCommunicatorMorph + socket _ aSocket. + remoteSocketAddress _ socket remoteSocketAddress hostNumber. + communicatorMorph _ aCommunicatorMorph. + process _ [ + leftOverData _ ''. - socket := aSocket. - remoteSocketAddress := socket remoteAddress. - communicatorMorph := aCommunicatorMorph. - process := [ - leftOverData := ''. [self doReceiveData] whileTrue. socket closeAndDestroy. ] newProcess. process priority: Processor highIOPriority. process resume. ! Item was changed: ----- Method: EToySenderMorph class>>descriptionForPartsBin (in category 'parts bin') ----- (excessive size, no diff calculated) Item was changed: ----- Method: EToySenderMorph>>checkOnAFriend (in category 'as yet unclassified') ----- checkOnAFriend + | gateKeeperEntry caption choices resp | - | gateKeeperEntry caption resp | + gateKeeperEntry _ EToyGateKeeperMorph entryForIPAddress: self ipAddress. + caption _ + 'Last name: ' translated ,gateKeeperEntry latestUserName, + '\Last message in: ' translated ,gateKeeperEntry lastIncomingMessageTimeString, + '\Last status check at: ' translated ,gateKeeperEntry lastTimeCheckedString, + '\Last status in: ' translated ,gateKeeperEntry statusReplyReceivedString. + choices _ 'Get his status now\Send my status now' translated. + resp _ (PopUpMenu labels: choices withCRs) startUpWithCaption: caption withCRs. - gateKeeperEntry := EToyGateKeeperMorph entryForIPAddress: self ipAddress. - caption := - 'Last name: ',gateKeeperEntry latestUserName, - '\Last message in: ',gateKeeperEntry lastIncomingMessageTimeString, - '\Last status check at: ',gateKeeperEntry lastTimeCheckedString, - '\Last status in: ',gateKeeperEntry statusReplyReceivedString. - resp := UIManager default chooseFrom: #('Get his status now' 'Send my status now') - title: caption withCRs. resp = 1 ifTrue: [ gateKeeperEntry lastTimeChecked: Time totalSeconds. self sendStatusCheck. ]. resp = 2 ifTrue: [ self sendStatusReply. ]. ! Item was changed: ----- Method: EToySenderMorph>>startNebraskaClient (in category 'as yet unclassified') ----- startNebraskaClient + | newMorph | - [ + [ + newMorph _ NetworkTerminalMorph connectTo: (self ipAddress copyUpTo: $:). "FIXME: get real port of Nebraska Server" + WorldState addDeferredUIMessage: [newMorph openInStyle: #scaled] fixTemps. - [ | newMorph | - newMorph := NetworkTerminalMorph connectTo: self ipAddress. - WorldState addDeferredUIMessage: [newMorph openInStyle: #scaled]. ] on: Error do: [ :ex | WorldState addDeferredUIMessage: [ + self inform: 'No connection to: ' translated. self ipAddress,' (',ex printString,')' + ] fixTemps - self inform: 'No connection to: '. self ipAddress,' (',ex printString,')' - ] ]. ] fork ! Item was changed: ----- Method: EToySenderMorph>>userName:userPicture:userEmail:userIPAddress: (in category 'as yet unclassified') ----- userName: aString userPicture: aFormOrNil userEmail: emailString userIPAddress: ipString | dropZoneRow | self setProperty: #currentBadgeVersion toValue: self currentBadgeVersion. + userPicture _ aFormOrNil ifNil: [ - userPicture := aFormOrNil ifNil: [ (TextStyle default fontOfSize: 26) emphasized: 1; characterFormAt: $? ]. + userPicture _ userPicture scaledToSize: 61@53. - userPicture := userPicture scaledToSize: 61@53. self killExistingChat. self removeAllMorphs. self useRoundedCorners. self addARow: { self inAColumn: {(StringMorph contents: aString) lock} }. + dropZoneRow _ self - dropZoneRow := self addARow: { self inAColumn: {userPicture asMorph lock} }. self establishDropZone: dropZoneRow. self addARow: { self textEntryFieldNamed: #emailAddress with: emailString help: 'Email address for this person' }; addARow: { self textEntryFieldNamed: #ipAddress with: ipString help: 'IP address for this person' }; addARow: { + self indicatorFieldNamed: #working color: Color blue help: 'working' translated. + self indicatorFieldNamed: #communicating color: Color green help: 'sending' translated. - self indicatorFieldNamed: #working color: Color blue help: 'working'. - self indicatorFieldNamed: #communicating color: Color green help: 'sending'. self buttonNamed: 'C' action: #startChat color: Color paleBlue + help: 'Open a written chat with this person' translated. - help: 'Open a written chat with this person'. self buttonNamed: 'T' action: #startTelemorphic color: Color paleYellow + help: 'Start telemorphic with this person' translated. - help: 'Start telemorphic with this person'. self buttonNamed: '!!' action: #tellAFriend color: Color paleGreen + help: 'Tell this person about the current project' translated. - help: 'Tell this person about the current project'. self buttonNamed: '?' action: #checkOnAFriend color: Color lightBrown + help: 'See if this person is available' translated. + "self buttonNamed: 'A' action: #startAudioChat color: Color yellow + help: 'Open an audio chat with this person' translated." - help: 'See if this person is available'. - self buttonNamed: 'A' action: #startAudioChat color: Color yellow - help: 'Open an audio chat with this person'. self buttonNamed: 'S' action: #startNebraskaClient color: Color white + help: 'See this person''s world (if he allows that)' translated. - help: 'See this person''s world (if he allows that)'. }. ! Item was changed: ----- Method: MorphicTransform>>encodeForRemoteCanvas (in category '*nebraska-*nebraska-Morphic-Remote') ----- encodeForRemoteCanvas "encode this transform into a string for use by a RemoteCanvas" ^String streamContents: [ :str | str nextPutAll: 'Morphic,'; print: offset x truncated; nextPut: $,; print: offset y truncated; nextPut: $,; + print: scale asFloat; - print: scale; nextPut: $,; + print: angle asFloat - print: angle ]! Item was changed: ----- Method: NebraskaClient>>currentStatusString (in category 'as yet unclassified') ----- currentStatusString (connection isNil or: [connection isConnected not]) ifTrue: [^'nada']. + ^connection remoteSocketAddress hostNumber, - ^(NetNameResolver stringFromAddress: connection remoteAddress), ' - ', (self backlog // 1024) printString,'k'! Item was changed: ----- Method: NebraskaClient>>initialize: (in category 'initialization') ----- initialize: aConnection | remoteAddress userPicture | connection := aConnection. hand := RemoteControlledHandMorph on: (MorphicEventDecoder on: aConnection). hand nebraskaClient: self. + remoteAddress _ connection remoteSocketAddress. + userPicture _ EToySenderMorph pictureForIPAddress: remoteAddress. - remoteAddress := connection remoteAddress. - remoteAddress ifNotNil: [remoteAddress := NetNameResolver stringFromAddress: remoteAddress]. - userPicture := EToySenderMorph pictureForIPAddress: remoteAddress. hand userInitials: ((EToySenderMorph nameForIPAddress: remoteAddress) ifNil: ['???']) andPicture: (userPicture ifNotNil: [userPicture scaledToSize: 16@20]). encoder := CanvasEncoder on: aConnection. canvas := RemoteCanvas connection: encoder clipRect: NebraskaServer extremelyBigRectangle transform: MorphicTransform identity! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonBuffered (in category 'as yet unclassified') ----- buttonBuffered + ^self makeButton: 'B' + balloonText: 'Request buffered Nebraska session' translated + for: #bufferNebraska - ^self makeButton: 'B' balloonText: 'Request buffered Nebraska session' for: #bufferNebraska ! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonQuit (in category 'the buttons') ----- buttonQuit + ^self makeButton: 'Quit' translated + balloonText: 'Quit this Nebraska session' translated + for: #quitNebraska - ^self makeButton: 'Quit' balloonText: 'Quit this Nebraska session' for: #quitNebraska ! Item was changed: ----- Method: NebraskaNavigationMorph>>buttonScale (in category 'as yet unclassified') ----- buttonScale + ^self makeButton: '1x1' + balloonText: 'Switch between 1x1 and scaled view' translated + for: #toggleFullView - ^self makeButton: '1x1' balloonText: 'Switch between 1x1 and scaled view' for: #toggleFullView ! Item was changed: ----- Method: NebraskaServer class>>serveWorld: (in category 'instance creation') ----- serveWorld: aWorld + ^self serveWorld: aWorld onPort: self defaultPorts! - ^self serveWorld: aWorld onPort: self defaultPort! Item was changed: ----- Method: NebraskaServerMorph class>>serveWorld: (in category 'as yet unclassified') ----- serveWorld: aWorld "Check to make sure things won't crash. See Mantis #0000519" + ^aWorld isSafeToServe ifTrue:[ + self serveWorld: aWorld onPort: NebraskaServer defaultPorts] + ! - aWorld allMorphsDo:[:m| - m isSafeToServe ifFalse:[ - ^self inform: 'Can not share world if a ', m class, ' is present. Close the mprph and try again']]. - ^self serveWorld: aWorld onPort: NebraskaServer defaultPort! Item was changed: ----- Method: NebraskaServerMorph class>>serveWorld:onPort: (in category 'as yet unclassified') ----- serveWorld: aWorld onPort: aPortNumber | server | server := NebraskaServer serveWorld: aWorld onPort: aPortNumber. (self new) openInWorld: aWorld. + ^server - "server acceptNullConnection" "server acceptPhonyConnection." ! Item was changed: ----- Method: NebraskaServerMorph class>>supplementaryPartsDescriptions (in category 'as yet unclassified') ----- supplementaryPartsDescriptions ^ {DescriptionForPartsBin + formalName: 'NebraskaServer' translatedNoop + categoryList: #() + documentation: 'A button to start the Nebraska desktop sharing server' translatedNoop - formalName: 'NebraskaServer' - categoryList: #('Collaborative') - documentation: 'A button to start the Nebraska desktop sharing server' translated globalReceiverSymbol: #NebraskaServerMorph nativitySelector: #serveWorldButton }! Item was changed: ----- Method: NebraskaServerMorph>>delete (in category 'submorphs-add/remove') ----- delete self server ifNotNil:[ + (self confirm:'Shutdown the server?' translated) - (self confirm:'Shutdown the server?') ifTrue:[self world remoteServer: nil]]. super delete.! Item was changed: ----- Method: NebraskaServerMorph>>rebuild (in category 'initialization') ----- rebuild | myServer toggle closeBox font | + font _ StrikeFont familyName: #Palatino size: 14. - font := StrikeFont familyName: #Palatino size: 14. self removeAllMorphs. self setColorsAndBorder. self updateCurrentStatusString. + toggle _ SimpleHierarchicalListMorph new perform: ( - toggle := SimpleHierarchicalListMorph new perform: ( fullDisplay ifTrue: [#expandedForm] ifFalse: [#notExpandedForm] ). + closeBox _ SimpleButtonMorph new borderWidth: 0; + label: 'X' font: Preferences standardEToysButtonFont; color: Color transparent; - closeBox := SimpleButtonMorph new borderWidth: 0; - label: 'X' font: Preferences standardButtonFont; color: Color transparent; actionSelector: #delete; target: self; extent: 14@14; + setBalloonText: 'End Nebraska session' translated. - setBalloonText: 'End Nebrasks session'. self addARow: { self inAColumn: {closeBox}. self inAColumn: { UpdatingStringMorph new useStringFormat; target: self; font: font; getSelector: #currentStatusString; contents: self currentStatusString; stepTime: 2000; lock. }. self inAColumn: { toggle asMorph on: #mouseUp send: #toggleFull to: self; + setBalloonText: 'Show more or less of Nebraska Status' translated - setBalloonText: 'Show more or less of Nebraska Status' }. }. + myServer _ self server. - myServer := self server. (myServer isNil or: [fullDisplay not]) ifTrue: [ ^World startSteppingSubmorphsOf: self ]. "--- the expanded display ---" self addARow: { self inAColumn: { UpdatingStringMorph new useStringFormat; target: self; font: font; getSelector: #currentBacklogString; contents: self currentBacklogString; stepTime: 2000; lock. }. }. self addARow: { self inAColumn: { (StringMorph contents: '--clients--' translated) lock; font: font. }. }. myServer clients do: [ :each | self addARow: { UpdatingStringMorph new useStringFormat; target: each; font: font; getSelector: #currentStatusString; contents: each currentStatusString; stepTime: 2000; lock. } ]. World startSteppingSubmorphsOf: self.! Item was changed: ----- Method: NebraskaServerMorph>>updateCurrentStatusString (in category 'drawing') ----- updateCurrentStatusString self server ifNil:[ + currentStatusString _ '' translated. + currentBacklogString _ ''. - currentStatusString := '' translated. - currentBacklogString := ''. ] ifNotNil:[ + currentStatusString _ + ' Nebraska: {1} clients' translated format: {self server numClients printString}. + currentBacklogString _ 'backlog: ' translated, + ((previousBacklog _ self server backlog) // 1024) printString,'k' - currentStatusString := - ' Nebraska: ' translated, - self server numClients printString, - ' clients' translated. - currentBacklogString := 'backlog: ' translated, - ((previousBacklog := self server backlog) // 1024) printString,'k' ]. ! Item was changed: ----- Method: NetworkTerminalMorph class>>connectTo: (in category 'instance creation') ----- + connectTo: hostAndPort + | host port | + host := hostAndPort copyUpTo: $:. + port := (hostAndPort copyAfter: $:) asInteger. + port ifNil: [port := NebraskaServer defaultPorts first]. + ^self connectTo: host port:port - connectTo: serverHost - - ^self connectTo: serverHost port: NebraskaServer defaultPort - ! Item was changed: ----- Method: NetworkTerminalMorph class>>socketConnectedTo:port: (in category 'instance creation') ----- socketConnectedTo: serverHost port: serverPort | sock | Socket initializeNetwork. + sock _ Socket new. - sock := Socket new. [sock connectTo: (NetNameResolver addressForName: serverHost) port: serverPort] on: ConnectionTimedOut + do: [:ex | self error: 'could not connect to server' translated ]. - do: [:ex | self error: 'could not connect to server' ]. ^StringSocket on: sock ! Item was changed: ----- Method: NetworkTerminalMorph>>acceptDroppingMorph:event: (in category 'layout') ----- acceptDroppingMorph: morphToDrop event: evt | myCopy outData null | (morphToDrop isKindOf: NewHandleMorph) ifTrue: [ "don't send these" ^morphToDrop rejectDropMorphEvent: evt. ]. self eToyRejectDropMorph: morphToDrop event: evt. "we don't really want it" "7 mar 2001 - remove #veryDeepCopy" + myCopy _ morphToDrop. "gradient fills require doing this second" - myCopy := morphToDrop. "gradient fills require doing this second" myCopy setProperty: #positionInOriginatingWorld toValue: morphToDrop position. + outData _ myCopy eToyStreamedRepresentationNotifying: nil. + null _ String with: 0 asCharacter. - outData := myCopy eToyStreamedRepresentationNotifying: nil. - null := String with: 0 asCharacter. EToyPeerToPeer new sendSomeData: { EToyIncomingMessage typeMorph,null. Preferences defaultAuthorName,null. outData } + to: connection remoteSocketAddress hostNumber - to: (NetNameResolver stringFromAddress: connection remoteAddress) for: self. ! From tim at rowledge.org Tue Aug 30 17:12:49 2016 From: tim at rowledge.org (tim Rowledge) Date: Tue Aug 30 17:12:52 2016 Subject: ScratchPlugin>>primOpenURL: (was Re: [squeak-dev] The Trunk: EToys-tfel.211.mcz) In-Reply-To: <201608301028.u7UASmkF009598@mail102c0.megamailservers.com> References: <201608301028.u7UASmkF009598@mail102c0.megamailservers.com> Message-ID: > On 30-08-2016, at 10:26 AM, commits@source.squeak.org wrote: > Item was changed: > ----- Method: EtoyDAVLoginMorph>>launchBrowser (in category 'actions') ----- > launchBrowser > > ActiveWorld addMorph: self buildPanel centeredNear: Sensor cursorPoint. > + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | sp primOpenURL: self url]. > - ScratchPlugin primOpenURL: self url. I?m thinking that this probably ought to be moved to OSProcess and used via something that does at least a little checking that a URL is involved. And the assorted other ScratchPlugin graphics effects referenced might be better in a graphics plugin - or even added to bitblt(?) or maybe even tested to check they?re worth doing as plugin calls these days. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim A bug in the code is worth two in the documentation. From timfelgentreff at gmail.com Tue Aug 30 17:18:17 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Tue Aug 30 17:18:33 2016 Subject: [squeak-dev] About the recent trunk pushes Message-ID: Marcel and I have attempted to do a very conservative merge of Squeakland Etoys into trunk. We wanted to do this as early as possible in this new release cycle, because it is likely that we will have to clean up a lot of things. Since we had been working on this for a few weeks prior to the release of 5.1, I am now pushing the missing ancestry to the trunk. Please don't be alarmed by all the strange diffs that you will see :) The initial merge was the largest, so the older versions I'm pushing now have more crazy changes that we since reverted and the current trunk should have fairly benign changes outside of the Etoys package. Etoys itself has grown very large, and we still have a lot of the other Squeakland packages ready for 6.0 but in a separate repository. They are not supposed to go into trunk, but we may be moving some things between those packages and Etoys in the next weeks. The Sexp Project publishing currently is not part of these commits. The required hooks are there, but you need the SISS and Meta packages as well. Since these add quite a bit of code, we wouldn't like to push these without thinking first about how we want to store projects in the future. Best, Tim -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160830/ba5eddc0/attachment.htm From leves at caesar.elte.hu Tue Aug 30 20:44:57 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Aug 30 20:45:02 2016 Subject: [squeak-dev] The Trunk: Collections-tfel.703.mcz In-Reply-To: References: Message-ID: Why merge so many times? Levente On Mon, 29 Aug 2016, commits@source.squeak.org wrote: > Tim Felgentreff uploaded a new version of Collections to project The Trunk: > http://source.squeak.org/trunk/Collections-tfel.703.mcz > > ==================== Summary ==================== > > Name: Collections-tfel.703 > Author: tfel > Time: 2 August 2016, 9:55:19.046368 am > UUID: 7793774a-ac8e-cb45-b4bc-92b88b4cb50e > Ancestors: Collections-mt.702, Collections-kfr.9 > > merge from Squeakland Etoys image > > =============== Diff against Collections-mt.702 =============== > > Item was changed: > ----- Method: String>>< (in category 'comparing') ----- > < aString > "Answer whether the receiver sorts before aString. > The collation order is simple ascii (with case differences)." > + ^(self compare: aString caseSensitive: true) = 1! > - > - ^ (self compare: self with: aString collated: AsciiOrder) = 1! > > Item was changed: > ----- Method: String>><= (in category 'comparing') ----- > <= aString > "Answer whether the receiver sorts before or equal to aString. > The collation order is simple ascii (with case differences)." > + ^(self compare: aString caseSensitive: true) <= 2! > - > - ^ (self compare: self with: aString collated: AsciiOrder) <= 2! > > Item was changed: > ----- Method: String>>> (in category 'comparing') ----- > > aString > "Answer whether the receiver sorts after aString. > The collation order is simple ascii (with case differences)." > + ^(self compare: aString caseSensitive: true) = 3! > - > - ^ (self compare: self with: aString collated: AsciiOrder) = 3! > > Item was changed: > ----- Method: String>>>= (in category 'comparing') ----- > >= aString > "Answer whether the receiver sorts after or equal to aString. > The collation order is simple ascii (with case differences)." > + ^(self compare: aString caseSensitive: true) >= 2! > - > - ^ (self compare: self with: aString collated: AsciiOrder) >= 2! > > Item was changed: > ----- Method: TranscriptStream class>>registerInFlapsRegistry (in category 'class initialization') ----- > registerInFlapsRegistry > "Register the receiver in the system's flaps registry" > self environment > at: #Flaps > + ifPresent: [:cl | cl registerQuad: {#TranscriptStream. #openMorphicTranscript. 'Transcript' translatedNoop. 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.' translatedNoop} > - ifPresent: [:cl | cl registerQuad: #(TranscriptStream openMorphicTranscript 'Transcript' 'A Transcript is a window usable for logging and debugging; browse references to #Transcript for examples of how to write to it.') > forFlapNamed: 'Tools'] > ! > > Item was changed: > ----- Method: WriteStream>>nextPut: (in category 'accessing') ----- > nextPut: anObject > "Primitive. Insert the argument at the next position in the Stream > represented by the receiver. Fail if the collection of this stream is not an > Array or a String. Fail if the stream is positioned at its end, or if the > position is out of bounds in the collection. Fail if the argument is not > of the right type for the collection. Optional. See Object documentation > whatIsAPrimitive." > > > + ((collection class == ByteString) and: [ > + anObject isCharacter and:[anObject isOctetCharacter not]]) ifTrue: [ > + collection _ (WideString from: collection). > + ^self nextPut: anObject. > + ]. > position >= writeLimit > ifTrue: [^ self pastEndPut: anObject] > ifFalse: > + [position _ position + 1. > - [position := position + 1. > ^collection at: position put: anObject]! > > > From leves at caesar.elte.hu Tue Aug 30 21:01:38 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Tue Aug 30 21:01:42 2016 Subject: [squeak-dev] The Trunk: Network-tfel.184.mcz In-Reply-To: References: Message-ID: On Tue, 30 Aug 2016, commits@source.squeak.org wrote: > Tim Felgentreff uploaded a new version of Network to project The Trunk: > http://source.squeak.org/trunk/Network-tfel.184.mcz > > ==================== Summary ==================== > > Name: Network-tfel.184 > Author: tfel > Time: 30 August 2016, 11:53:57.083946 am > UUID: b90acf7c-5796-a347-8939-59955c0588dd > Ancestors: Network-tfel.183, Network-ul.183 > > merge a few fixes from Squeakland Etoys. > - ServerDirectories always use forward slashes, even on windows > - FTPClient connections should go through the NetNameResolver > - sockets can only accept if they are connected. > > =============== Diff against Network-ul.183 =============== > > Item was changed: > ----- Method: FTPClient>>openPassiveDataConnection (in category 'private protocol') ----- > openPassiveDataConnection > | portInfo list dataPort remoteHostAddress | > self sendCommand: 'PASV'. > self lookForCode: 227 ifDifferent: [:response | (TelnetProtocolError protocolInstance: self) signal: 'Could not enter passive mode: ' , response]. > - > portInfo := (self lastResponse findTokens: '()') at: 2. > list := portInfo findTokens: ','. > + remoteHostAddress := NetNameResolver addressForName: (list at: 1) > + , '.' > + , (list at: 2) , '.' > + , (list at: 3) , '.' > + , (list at: 4) timeout: 30. > - remoteHostAddress := ByteArray > - with: (list at: 1) asNumber > - with: (list at: 2) asNumber > - with: (list at: 3) asNumber > - with: (list at: 4) asNumber. > dataPort := (list at: 5) asNumber * 256 + (list at: 6) asNumber. > + self openDataSocket: remoteHostAddress port: dataPort! > - self openDataSocket: remoteHostAddress port: dataPort > - ! > > Item was changed: > ----- Method: ServerDirectory>>isRoot (in category 'testing') ----- > isRoot > + ^ directory = '/'! > - ^directory = (String with: self pathNameDelimiter)! > > Item was changed: > ----- Method: Socket>>waitForAcceptFor:ifTimedOut: (in category 'waiting') ----- > waitForAcceptFor: timeout ifTimedOut: timeoutBlock > "Wait and accept an incoming connection" > self waitForConnectionFor: timeout ifTimedOut: [^timeoutBlock value]. > + ^self isConnected Does this change actually do anything? Won't the previous line return when the socket is not connected? Levente > + ifTrue:[self accept] > + ! > - ^self accept! > > > From commits at source.squeak.org Tue Aug 30 21:55:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Tue Aug 30 21:55:11 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160830215509.23426.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068745.html Name: Files-dtl.163 Ancestors: Files-ul.162 Add StandardFileStream>>update: to handle #appendEntry by flushing the stream. This allows the standard output stream to be a dependent of the Transcript, flushing output as expected for a transcript view. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068746.html Name: Files-dtl.164 Ancestors: Files-dtl.163 Avoid exception if TranscriptSteam is not present, and use #ifNotNil: instead of #ifNotNilDo: ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068747.html Name: Collections-dtl.715 Ancestors: Collections-ul.714 When the redirectToStdOut preference is enabled, let the standard output stream be a view on the Transcript. Flush output to stdout on endEntry. Make cr and lf work for the stdout view. Permit other views to continue functioning normally in the image, with the standard output as an additional view. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068748.html Name: Collections-dtl.716 Ancestors: Collections-dtl.715, Collections-tfel.715 Merge Collections-dtl.715, Collections-tfel.715 ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068749.html Name: Morphic-tfel.1299 Ancestors: Morphic-tfel.1288, Morphic-mt.1298 Merge changes and refactorings from Squeakland Etoys - halos are larger - three-phase buttons have optimized event handling - translations were added to menus and image morphs - some more etoyFriendly checks in general (to be refactored) - morphic-specific project loading code moved into MorphicProject - World>>referencePool now is a dictionary, no longer an OrderedCollection to fulfill the expected interface - script handling was updated - TextMorph saw refactorings ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068750.html Name: Compression-tfel.50 Ancestors: Compression-tfel.49, Compression-ul.49 Merge translations from Squeakland Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068751.html Name: Files-tfel.165 Ancestors: Files-tfel.162, Files-dtl.164 merge translation and read-only check from Squeakland Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068752.html Name: Multilingual-tfel.217 Ancestors: Multilingual-tfel.216, Multilingual-ul.216 merge Squeakland Etoys variant of getting a localeID. makes it more robust by allowing e.g. 'de-AU' to fallback to 'de' rather than letting everything fall back to 'en' immediately ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068753.html Name: Morphic-mt.1300 Ancestors: Morphic-tfel.1299 Fix small regression when setting the font in StringMorph. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068754.html Name: Morphic-mt.1301 Ancestors: Morphic-mt.1300 Fixes regression in new-style balloon morphs and gradient fills. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068755.html Name: MorphicExtras-tfel.192 Ancestors: MorphicExtras-tfel.191, MorphicExtras-mt.184 merge Squeakland etoys. Mostly translations, with some more changes to BookMorphs and their relatives. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068756.html Name: Nebraska-tfel.46 Ancestors: Nebraska-tfel.45, Nebraska-mt.43 Merge Nebraska changes from Squeakland Etoys, and begin untangling Nebraska from Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068757.html Name: Network-tfel.184 Ancestors: Network-tfel.183, Network-ul.183 merge a few fixes from Squeakland Etoys. - ServerDirectories always use forward slashes, even on windows - FTPClient connections should go through the NetNameResolver - sockets can only accept if they are connected. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068758.html Name: ST80-tfel.219 Ancestors: ST80-tfel.217, ST80-mt.218 merge translations from Squeakland Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068759.html Name: Tools-tfel.724 Ancestors: Tools-tfel.720, Tools-mt.723 merge translations from Squeakland Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068760.html Name: GetText-tfel.40 Ancestors: GetText-tfel.39 update the exporter to also catch dynamic translations ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068761.html Name: Protocols-tfel.56 Ancestors: Protocols-mt.55, Protocols-kfr.11 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068762.html Name: EToys-tfel.211 Ancestors: EToys-tfel.210 optional dependency on ScratchPlugin ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068763.html Name: EToys-tfel.212 Ancestors: EToys-tfel.211 Import Squeakland's release builder into etoys. To be refactored ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068764.html Name: Sound-tfel.59 Ancestors: Sound-tfel.58 Replace underscore assignments with := ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068765.html Name: TrueType-tfel.46 Ancestors: TrueType-tfel.45 Replace underscore assignments with := ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068766.html Name: EToys-tfel.214 Ancestors: EToys-tfel.213 update release builder and theme to use Squeak hierarchy ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068767.html Name: MorphicExtras-tfel.193 Ancestors: MorphicExtras-tfel.192 fix deprecated method ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068768.html Name: EToys-tfel.215 Ancestors: EToys-tfel.214 - fix deprecation warnings - Components and their subclasses are not uniclasses - sugarnavbar should re-initialize when the theme changes ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068769.html Name: System-tfel.912 Ancestors: System-tfel.911 Fix setSystemFontTo: to correctly set the default text style ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068770.html Name: EToys-tfel.216 Ancestors: EToys-tfel.215, EToys-jl.210 merge ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068771.html Name: Morphic-tfel.1302 Ancestors: Morphic-mt.1301, Morphic-jl.1291 merge ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068772.html Name: EToys-tfel.217 Ancestors: EToys-tfel.216 - no deprecation warnings - override compilation on Player to work around decompiler bugs ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068773.html Name: Morphic-tfel.1303 Ancestors: Morphic-tfel.1302 unhibernate FlapTabs when switching into a project in case they were hibernated ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068774.html Name: MorphicExtras-tfel.194 Ancestors: MorphicExtras-tfel.193 fix test in ViewerFlapTab>>unhibernate to actually test a boolean ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068775.html Name: Tools-tfel.720 Ancestors: Tools-mt.719, Tools-tfel.716 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068776.html Name: Tools-tfel.716 Ancestors: Tools-tfel.715 sort these by name by default ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068777.html Name: Tools-tfel.715 Ancestors: Tools-mt.712, Tools-tfel.714 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068778.html Name: Tools-tfel.714 Ancestors: Tools-tfel.713 Translate this debugger string ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068779.html Name: Tools-tfel.712 Ancestors: Tools-mt.711, Tools-kfr.15 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068780.html Name: Tools-tfel.713 Ancestors: Tools-tfel.712 fix font color in Project load and save dialogs, you really cannot see the default ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068781.html Name: Multilingual-tfel.216 Ancestors: Multilingual-tfel.215, Multilingual-bf.24 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068782.html Name: Compression-tfel.49 Ancestors: Compression-cmm.48, Compression-bf.1 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068783.html Name: ST80-tfel.217 Ancestors: ST80-nice.216, ST80-tfel.215 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068784.html Name: ST80-tfel.215 Ancestors: ST80-mt.214, ST80-tfel.214 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068785.html Name: ST80-tfel.214 Ancestors: ST80-mt.213, ST80-bf.5 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068786.html Name: Nebraska-tfel.45 Ancestors: Nebraska-tfel.44 avoid dependency on Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068787.html Name: Nebraska-tfel.44 Ancestors: Nebraska-tfel.43 remove direct reference to Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068788.html Name: Nebraska-tfel.43 Ancestors: Nebraska-mt.42, Nebraska-bf.3 merge from Squeakland Etoys image ============================================= From hannes.hirzel at gmail.com Wed Aug 31 06:21:31 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 06:21:36 2016 Subject: [squeak-dev] SISS serialisation format? Message-ID: Hello I understand that the SISS serialisation format has been used in the Etoys 5.0 image to store quick guides. It is a plain text format. What does SISS stand for? Browsing the Etoys 5.0 image ..... To use SISS classes need to implement a method sissExportSpecification For example for Workspace it is sissExportSpecification ^ #(('contents' #sissGetContents) ('bindings' #bindings) ('acceptDroppedMorphs' #acceptsDroppingMorphForReference) ) And a method sissWriteValue Morph >> sissWriteValue sissWriteValue self prepareToBeSaved. or Object>>sissWriteValue sissWriteValue "Override if you wish" ^self PasteUpMorph>>sissWriteValue sissWriteValue "Override if you wish" | new | self prepareToBeSaved. new _ self clone. new privateSubmorphs: (submorphs reject: [:e | (e isKindOf: SolidSugarSuppliesTab) or: [(e isKindOf: Viewer) or: [(e isKindOf: SugarNavTab) or: [((e isKindOf: SystemWindow) and: [(e model isKindOf: Workspace) not]) or: [(e isMemberOf: FlapTab) and: [e isGlobalFlap]]]]]]). new instVarNamed: 'presenter' put: nil. new instVarNamed: 'worldState' put: nil. new privateExtension: self extension copy. new extension removeOtherProperties. self extension otherProperties keysDo: [:sym | (#(commandKeySelectors lastKeystroke locked) includes: sym) ifFalse: [ new setProperty: sym toValue: (self extension valueOfProperty: sym) ]. ]. ^ new. Form>> sissWriteValue SISSDictionaryForScanning reduceFormDepth ifTrue: [ ^ (self asFormOfDepth: 8) hibernate. ]. ^ self hibernate. An example of the format MSExpParser test1 | str1 str2 str3 | str1 _ '(script :name "testscript1:" :type "Player" :player "12" (parameter :name "parameter" :type "Number" :position "1") (sequence (loop :type "repeat" (initial (literal :value "0")) (increment (literal :value "1")) (test (send :type "Number" (selector :selector "+") (send :type "Number" (selector :getter "x") (literal :type "Player" :value "self")) (literal :type "Number" :value "1"))) (sequence (assign :type "Number" :updating "Incr:" :property "x" (literal :type "Player" :value "4") (send :type "Number" (selector :selector "+") (literal :type "Number" :value "244.0") (literal :type "Number" :value "1")))))))'. I understand that the SISS format has been used successfully in the Etoys image to store quick guide projects. As far as Project saving is concerned it there a difference between Etoy Quick guide projects and regular Squeak Morphic projects? Where can I find more information on the SISS format? Regards Hannes From hannes.hirzel at gmail.com Wed Aug 31 06:33:04 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 06:33:06 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? Message-ID: Hello Note: The SIXX serialisation format has been around for a long time (on SqueakMap for 5.1) http://www.mars.dti.ne.jp/~umejava/smalltalk/sixx/ It has as well Pharo, Cuis and other implementations. We might consider JSON or Fuel might as well options for a format to save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for example). --Hannes From lists at fniephaus.com Wed Aug 31 06:36:32 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Aug 31 06:36:47 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: References: Message-ID: Would the STON format be suitable for projects as well? https://github.com/svenvc/ston/blob/master/ston-paper.md Fabio On Wed, 31 Aug 2016 at 08:33, H. Hirzel wrote: > Hello > > Note: > The SIXX serialisation format has been around for a long time (on > SqueakMap for 5.1) > http://www.mars.dti.ne.jp/~umejava/smalltalk/sixx/ > It has as well Pharo, Cuis and other implementations. > > We might consider JSON or Fuel might as well options for a format to > save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for > example). > > --Hannes > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/4f290443/attachment.htm From hannes.hirzel at gmail.com Wed Aug 31 07:07:16 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 07:07:20 2016 Subject: [squeak-dev] Re: SISS serialisation format? In-Reply-To: References: Message-ID: An entry point for reading about SISS in the Squeakland Etoys 5.0 image QuickGuideMorph>> convertProjectsWithBooksToSISSIn: dir to: outDir | p book | dir fileNames do: [:f | (f endsWith: '.pr') ifTrue: [ p _ ProjectLoading loadName: f stream: (dir readOnlyFileNamed: f) fromDirectory: dir withProjectView: nil. book _ p world submorphs detect: [:b | b isMemberOf: BookMorph] ifNone: [nil]. book ifNotNil: [ book hidePageControls. book storeAsDataStreamNamed: (outDir fullNameFor: (f copyUpTo: $.), '.sexp.data.gz'). ]. p okToChangeSilently. ]. ]. On 8/31/16, H. Hirzel wrote: > Hello > > I understand that the SISS serialisation format has been used in the > Etoys 5.0 image to store quick guides. It is a plain text format. > > What does SISS stand for? > > Browsing the Etoys 5.0 image ..... > > To use SISS classes need to implement a method > > sissExportSpecification > > > For example for Workspace it is > > > sissExportSpecification > > ^ #(('contents' #sissGetContents) > ('bindings' #bindings) > ('acceptDroppedMorphs' #acceptsDroppingMorphForReference) > ) > > > And a method > > sissWriteValue > > Morph >> sissWriteValue > sissWriteValue > > self prepareToBeSaved. > > > or > > Object>>sissWriteValue > sissWriteValue > "Override if you wish" > > ^self > > > PasteUpMorph>>sissWriteValue > sissWriteValue > "Override if you wish" > > | new | > self prepareToBeSaved. > new _ self clone. > new privateSubmorphs: (submorphs reject: [:e | > (e isKindOf: SolidSugarSuppliesTab) > or: [(e isKindOf: Viewer) > or: [(e isKindOf: SugarNavTab) > or: [((e isKindOf: SystemWindow) and: [(e model isKindOf: Workspace) > not]) > or: [(e isMemberOf: FlapTab) and: [e isGlobalFlap]]]]]]). > new instVarNamed: 'presenter' put: nil. > new instVarNamed: 'worldState' put: nil. > new privateExtension: self extension copy. > new extension removeOtherProperties. > self extension otherProperties keysDo: [:sym | > (#(commandKeySelectors lastKeystroke locked) includes: sym) ifFalse: [ > new setProperty: sym toValue: (self extension valueOfProperty: sym) > ]. > ]. > > ^ new. > > > > Form>> > sissWriteValue > > SISSDictionaryForScanning reduceFormDepth ifTrue: [ > ^ (self asFormOfDepth: 8) hibernate. > ]. > ^ self hibernate. > > > > > > An example of the format > > MSExpParser test1 > > | str1 str2 str3 | > str1 _ '(script :name "testscript1:" :type "Player" :player "12" > (parameter :name "parameter" :type "Number" :position "1") > (sequence > (loop :type "repeat" > (initial (literal :value "0")) > (increment (literal :value "1")) > (test (send :type "Number" > (selector :selector "+") > (send :type "Number" > (selector :getter "x") > (literal :type "Player" :value "self")) > (literal :type "Number" :value "1"))) > (sequence > (assign :type "Number" > :updating "Incr:" :property "x" > (literal :type > "Player" :value "4") > (send :type "Number" > (selector :selector > "+") > (literal :type > "Number" :value "244.0") > (literal :type > "Number" :value "1")))))))'. > > > > I understand that the SISS format has been used successfully in the > Etoys image to store quick guide projects. > > As far as Project saving is concerned it there a difference between > Etoy Quick guide projects and regular Squeak Morphic projects? > > Where can I find more information on the SISS format? > > Regards > > Hannes > From hannes.hirzel at gmail.com Wed Aug 31 07:09:17 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 07:09:21 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: References: Message-ID: A note by Tim On 8/29/16, tim Rowledge wrote: ... > ....the deep-copy code seems awfully like (much of) a serialiser On 8/31/16, Fabio Niephaus wrote: > Would the STON format be suitable for projects as well? > https://github.com/svenvc/ston/blob/master/ston-paper.md > > Fabio > > On Wed, 31 Aug 2016 at 08:33, H. Hirzel wrote: > >> Hello >> >> Note: >> The SIXX serialisation format has been around for a long time (on >> SqueakMap for 5.1) >> http://www.mars.dti.ne.jp/~umejava/smalltalk/sixx/ >> It has as well Pharo, Cuis and other implementations. >> >> We might consider JSON or Fuel might as well options for a format to >> save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for >> example). >> >> --Hannes >> >> > From hannes.hirzel at gmail.com Wed Aug 31 07:16:36 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 07:16:39 2016 Subject: [squeak-dev] Re: SISS serialisation format? In-Reply-To: References: Message-ID: The class comment of QuickGuideMorph. It refers to the place where the exported SISS files of the projects are stored. The Squeakland image contains many examples of SISS files. ---------------------------------------------------- A BookMorph that holds QuickGuides. World an AlignmentMorph (the flap) an AlignmentMorph a QuickGuideMorph (one page per guide, 54 pages. Page may be a stub if guide not in) a QuickGuideHolderMorph a BookMorph (4 pages) a PasteUpMorph (a page) QuickGuides are stored in Contents/Resources/QuickGuides/ or by language in Contents/Resources/locale//QuickGuides/ (see guidePath) Categories = OrderedCollection of {catKey. catTitle} where catKey appears at the start of a file name 'Menu' catTitle may be UTF-8 full name. PagesForCategory dictionary of (catKey -> list). list has elements {guideName. guideTitle}. guideName is last part of a file name and guideTitle may be in UTF-8. On 8/31/16, H. Hirzel wrote: > An entry point for reading about SISS in the Squeakland Etoys 5.0 image > > QuickGuideMorph>> > > convertProjectsWithBooksToSISSIn: dir to: outDir > > | p book | > dir fileNames do: [:f | > (f endsWith: '.pr') ifTrue: [ > p _ ProjectLoading loadName: f stream: (dir readOnlyFileNamed: f) > fromDirectory: dir withProjectView: nil. > book _ p world submorphs detect: [:b | b isMemberOf: BookMorph] > ifNone: [nil]. > book ifNotNil: [ > book hidePageControls. > book storeAsDataStreamNamed: (outDir fullNameFor: (f copyUpTo: > $.), '.sexp.data.gz'). > ]. > p okToChangeSilently. > ]. > ]. > > On 8/31/16, H. Hirzel wrote: >> Hello >> >> I understand that the SISS serialisation format has been used in the >> Etoys 5.0 image to store quick guides. It is a plain text format. >> >> What does SISS stand for? >> >> Browsing the Etoys 5.0 image ..... >> >> To use SISS classes need to implement a method >> >> sissExportSpecification >> >> >> For example for Workspace it is >> >> >> sissExportSpecification >> >> ^ #(('contents' #sissGetContents) >> ('bindings' #bindings) >> ('acceptDroppedMorphs' #acceptsDroppingMorphForReference) >> ) >> >> >> And a method >> >> sissWriteValue >> >> Morph >> sissWriteValue >> sissWriteValue >> >> self prepareToBeSaved. >> >> >> or >> >> Object>>sissWriteValue >> sissWriteValue >> "Override if you wish" >> >> ^self >> >> >> PasteUpMorph>>sissWriteValue >> sissWriteValue >> "Override if you wish" >> >> | new | >> self prepareToBeSaved. >> new _ self clone. >> new privateSubmorphs: (submorphs reject: [:e | >> (e isKindOf: SolidSugarSuppliesTab) >> or: [(e isKindOf: Viewer) >> or: [(e isKindOf: SugarNavTab) >> or: [((e isKindOf: SystemWindow) and: [(e model isKindOf: Workspace) >> not]) >> or: [(e isMemberOf: FlapTab) and: [e isGlobalFlap]]]]]]). >> new instVarNamed: 'presenter' put: nil. >> new instVarNamed: 'worldState' put: nil. >> new privateExtension: self extension copy. >> new extension removeOtherProperties. >> self extension otherProperties keysDo: [:sym | >> (#(commandKeySelectors lastKeystroke locked) includes: sym) ifFalse: [ >> new setProperty: sym toValue: (self extension valueOfProperty: sym) >> ]. >> ]. >> >> ^ new. >> >> >> >> Form>> >> sissWriteValue >> >> SISSDictionaryForScanning reduceFormDepth ifTrue: [ >> ^ (self asFormOfDepth: 8) hibernate. >> ]. >> ^ self hibernate. >> >> >> >> >> >> An example of the format >> >> MSExpParser test1 >> >> | str1 str2 str3 | >> str1 _ '(script :name "testscript1:" :type "Player" :player "12" >> (parameter :name "parameter" :type "Number" :position >> "1") >> (sequence >> (loop :type "repeat" >> (initial (literal :value "0")) >> (increment (literal :value "1")) >> (test (send :type "Number" >> (selector :selector "+") >> (send :type "Number" >> (selector :getter "x") >> (literal :type "Player" :value "self")) >> (literal :type "Number" :value "1"))) >> (sequence >> (assign :type "Number" >> :updating "Incr:" :property "x" >> (literal :type >> "Player" :value "4") >> (send :type "Number" >> (selector >> :selector >> "+") >> (literal :type >> "Number" :value "244.0") >> (literal :type >> "Number" :value "1")))))))'. >> >> >> >> I understand that the SISS format has been used successfully in the >> Etoys image to store quick guide projects. >> >> As far as Project saving is concerned it there a difference between >> Etoy Quick guide projects and regular Squeak Morphic projects? >> >> Where can I find more information on the SISS format? >> >> Regards >> >> Hannes >> > From timfelgentreff at gmail.com Wed Aug 31 07:23:24 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Wed Aug 31 07:23:39 2016 Subject: [squeak-dev] Re: SISS serialisation format? In-Reply-To: References: Message-ID: Hi, I would recommend to look at the slightly cleaned up project export code in the Etoys 6 package (file.squeak.org/etoys). You can export plain morphic projects just fine in that package. However, all SystemWindows except workspaces are currently explicitly ignored. As far as saving is concerned, the QuickGuides simply use a special exporter (for book morphs), rather than the Project exporter. cheers, Tim On Wed, 31 Aug 2016 at 09:16 H. Hirzel wrote: > The class comment of QuickGuideMorph. It refers to the place where the > exported SISS files of the projects are stored. The Squeakland image > contains many examples of SISS files. > > ---------------------------------------------------- > > > A BookMorph that holds QuickGuides. > > World > an AlignmentMorph (the flap) > an AlignmentMorph > a QuickGuideMorph (one page per guide, 54 pages. > Page may be a stub if guide not in) > a QuickGuideHolderMorph > a BookMorph (4 pages) > a PasteUpMorph (a page) > > QuickGuides are stored in Contents/Resources/QuickGuides/ > or by language in Contents/Resources/locale//QuickGuides/ > (see guidePath) > > Categories = OrderedCollection of {catKey. catTitle} > where catKey appears at the start of a file name 'Menu' > catTitle may be UTF-8 full name. > PagesForCategory dictionary of (catKey -> list). list has elements > {guideName. guideTitle}. guideName is last part of a file name and > guideTitle may be in UTF-8. > > On 8/31/16, H. Hirzel wrote: > > An entry point for reading about SISS in the Squeakland Etoys 5.0 image > > > > QuickGuideMorph>> > > > > convertProjectsWithBooksToSISSIn: dir to: outDir > > > > | p book | > > dir fileNames do: [:f | > > (f endsWith: '.pr') ifTrue: [ > > p _ ProjectLoading loadName: f stream: (dir > readOnlyFileNamed: f) > > fromDirectory: dir withProjectView: nil. > > book _ p world submorphs detect: [:b | b > isMemberOf: BookMorph] > > ifNone: [nil]. > > book ifNotNil: [ > > book hidePageControls. > > book storeAsDataStreamNamed: (outDir > fullNameFor: (f copyUpTo: > > $.), '.sexp.data.gz'). > > ]. > > p okToChangeSilently. > > ]. > > ]. > > > > On 8/31/16, H. Hirzel wrote: > >> Hello > >> > >> I understand that the SISS serialisation format has been used in the > >> Etoys 5.0 image to store quick guides. It is a plain text format. > >> > >> What does SISS stand for? > >> > >> Browsing the Etoys 5.0 image ..... > >> > >> To use SISS classes need to implement a method > >> > >> sissExportSpecification > >> > >> > >> For example for Workspace it is > >> > >> > >> sissExportSpecification > >> > >> ^ #(('contents' #sissGetContents) > >> ('bindings' #bindings) > >> ('acceptDroppedMorphs' #acceptsDroppingMorphForReference) > >> ) > >> > >> > >> And a method > >> > >> sissWriteValue > >> > >> Morph >> sissWriteValue > >> sissWriteValue > >> > >> self prepareToBeSaved. > >> > >> > >> or > >> > >> Object>>sissWriteValue > >> sissWriteValue > >> "Override if you wish" > >> > >> ^self > >> > >> > >> PasteUpMorph>>sissWriteValue > >> sissWriteValue > >> "Override if you wish" > >> > >> | new | > >> self prepareToBeSaved. > >> new _ self clone. > >> new privateSubmorphs: (submorphs reject: [:e | > >> (e isKindOf: SolidSugarSuppliesTab) > >> or: [(e isKindOf: Viewer) > >> or: [(e isKindOf: SugarNavTab) > >> or: [((e isKindOf: SystemWindow) > and: [(e model isKindOf: Workspace) > >> not]) > >> or: [(e isMemberOf: > FlapTab) and: [e isGlobalFlap]]]]]]). > >> new instVarNamed: 'presenter' put: nil. > >> new instVarNamed: 'worldState' put: nil. > >> new privateExtension: self extension copy. > >> new extension removeOtherProperties. > >> self extension otherProperties keysDo: [:sym | > >> (#(commandKeySelectors lastKeystroke locked) includes: > sym) ifFalse: [ > >> new setProperty: sym toValue: (self extension > valueOfProperty: sym) > >> ]. > >> ]. > >> > >> ^ new. > >> > >> > >> > >> Form>> > >> sissWriteValue > >> > >> SISSDictionaryForScanning reduceFormDepth ifTrue: [ > >> ^ (self asFormOfDepth: 8) hibernate. > >> ]. > >> ^ self hibernate. > >> > >> > >> > >> > >> > >> An example of the format > >> > >> MSExpParser test1 > >> > >> | str1 str2 str3 | > >> str1 _ '(script :name "testscript1:" :type "Player" :player "12" > >> (parameter :name "parameter" :type "Number" :position > >> "1") > >> (sequence > >> (loop :type "repeat" > >> (initial (literal :value "0")) > >> (increment (literal :value "1")) > >> (test (send :type "Number" > >> (selector :selector "+") > >> (send :type "Number" > >> (selector :getter "x") > >> (literal :type "Player" :value "self")) > >> (literal :type "Number" :value "1"))) > >> (sequence > >> (assign :type "Number" > >> :updating "Incr:" :property "x" > >> (literal :type > >> "Player" :value "4") > >> (send :type "Number" > >> (selector > >> :selector > >> "+") > >> (literal :type > >> "Number" :value "244.0") > >> (literal :type > >> "Number" :value "1")))))))'. > >> > >> > >> > >> I understand that the SISS format has been used successfully in the > >> Etoys image to store quick guide projects. > >> > >> As far as Project saving is concerned it there a difference between > >> Etoy Quick guide projects and regular Squeak Morphic projects? > >> > >> Where can I find more information on the SISS format? > >> > >> Regards > >> > >> Hannes > >> > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/01c6da3f/attachment.htm From timfelgentreff at gmail.com Wed Aug 31 07:25:01 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Wed Aug 31 07:25:21 2016 Subject: [squeak-dev] The Trunk: Collections-tfel.703.mcz In-Reply-To: References: Message-ID: Because these versions were done over the course of the last weeks, and I merged trunk into my image on a regular basis, since it was moving fairly quickly prior to release. On Tue, 30 Aug 2016 at 22:45 Levente Uzonyi wrote: > Why merge so many times? > > Levente > > On Mon, 29 Aug 2016, commits@source.squeak.org wrote: > > > Tim Felgentreff uploaded a new version of Collections to project The > Trunk: > > http://source.squeak.org/trunk/Collections-tfel.703.mcz > > > > ==================== Summary ==================== > > > > Name: Collections-tfel.703 > > Author: tfel > > Time: 2 August 2016, 9:55:19.046368 am > > UUID: 7793774a-ac8e-cb45-b4bc-92b88b4cb50e > > Ancestors: Collections-mt.702, Collections-kfr.9 > > > > merge from Squeakland Etoys image > > > > =============== Diff against Collections-mt.702 =============== > > > > Item was changed: > > ----- Method: String>>< (in category 'comparing') ----- > > < aString > > "Answer whether the receiver sorts before aString. > > The collation order is simple ascii (with case differences)." > > + ^(self compare: aString caseSensitive: true) = 1! > > - > > - ^ (self compare: self with: aString collated: AsciiOrder) = 1! > > > > Item was changed: > > ----- Method: String>><= (in category 'comparing') ----- > > <= aString > > "Answer whether the receiver sorts before or equal to aString. > > The collation order is simple ascii (with case differences)." > > + ^(self compare: aString caseSensitive: true) <= 2! > > - > > - ^ (self compare: self with: aString collated: AsciiOrder) <= 2! > > > > Item was changed: > > ----- Method: String>>> (in category 'comparing') ----- > > > aString > > "Answer whether the receiver sorts after aString. > > The collation order is simple ascii (with case differences)." > > + ^(self compare: aString caseSensitive: true) = 3! > > - > > - ^ (self compare: self with: aString collated: AsciiOrder) = 3! > > > > Item was changed: > > ----- Method: String>>>= (in category 'comparing') ----- > > >= aString > > "Answer whether the receiver sorts after or equal to aString. > > The collation order is simple ascii (with case differences)." > > + ^(self compare: aString caseSensitive: true) >= 2! > > - > > - ^ (self compare: self with: aString collated: AsciiOrder) >= 2! > > > > Item was changed: > > ----- Method: TranscriptStream class>>registerInFlapsRegistry (in > category 'class initialization') ----- > > registerInFlapsRegistry > > "Register the receiver in the system's flaps registry" > > self environment > > at: #Flaps > > + ifPresent: [:cl | cl registerQuad: {#TranscriptStream. > #openMorphicTranscript. 'Transcript' translatedNoop. 'A > Transcript is a window usable for logging and debugging; browse references > to #Transcript for examples of how to write to it.' translatedNoop} > > - ifPresent: [:cl | cl registerQuad: #(TranscriptStream > openMorphicTranscript 'Transcript' 'A Transcript > is a window usable for logging and debugging; browse references to > #Transcript for examples of how to write to it.') > > forFlapNamed: 'Tools'] > > ! > > > > Item was changed: > > ----- Method: WriteStream>>nextPut: (in category 'accessing') ----- > > nextPut: anObject > > "Primitive. Insert the argument at the next position in the Stream > > represented by the receiver. Fail if the collection of this stream > is not an > > Array or a String. Fail if the stream is positioned at its end, or > if the > > position is out of bounds in the collection. Fail if the argument > is not > > of the right type for the collection. Optional. See Object > documentation > > whatIsAPrimitive." > > > > > > + ((collection class == ByteString) and: [ > > + anObject isCharacter and:[anObject isOctetCharacter not]]) > ifTrue: [ > > + collection _ (WideString from: collection). > > + ^self nextPut: anObject. > > + ]. > > position >= writeLimit > > ifTrue: [^ self pastEndPut: anObject] > > ifFalse: > > + [position _ position + 1. > > - [position := position + 1. > > ^collection at: position put: anObject]! > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/64989412/attachment-0001.htm From timfelgentreff at gmail.com Wed Aug 31 07:28:06 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Wed Aug 31 07:28:21 2016 Subject: [squeak-dev] The Trunk: Network-tfel.184.mcz In-Reply-To: References: Message-ID: You're right, I overlooked this. I just realized how unfortunate the diff format is in this case. None of these methods were changed by me, I merely merged from Squeakland and tried to figure out what to keep :) On Tue, 30 Aug 2016 at 23:01 Levente Uzonyi wrote: > On Tue, 30 Aug 2016, commits@source.squeak.org wrote: > > > Tim Felgentreff uploaded a new version of Network to project The Trunk: > > http://source.squeak.org/trunk/Network-tfel.184.mcz > > > > ==================== Summary ==================== > > > > Name: Network-tfel.184 > > Author: tfel > > Time: 30 August 2016, 11:53:57.083946 am > > UUID: b90acf7c-5796-a347-8939-59955c0588dd > > Ancestors: Network-tfel.183, Network-ul.183 > > > > merge a few fixes from Squeakland Etoys. > > - ServerDirectories always use forward slashes, even on windows > > - FTPClient connections should go through the NetNameResolver > > - sockets can only accept if they are connected. > > > > =============== Diff against Network-ul.183 =============== > > > > Item was changed: > > ----- Method: FTPClient>>openPassiveDataConnection (in category > 'private protocol') ----- > > openPassiveDataConnection > > | portInfo list dataPort remoteHostAddress | > > self sendCommand: 'PASV'. > > self lookForCode: 227 ifDifferent: [:response | > (TelnetProtocolError protocolInstance: self) signal: 'Could not enter > passive mode: ' , response]. > > - > > portInfo := (self lastResponse findTokens: '()') at: 2. > > list := portInfo findTokens: ','. > > + remoteHostAddress := NetNameResolver addressForName: (list at: 1) > > + , '.' > > + , (list at: 2) , '.' > > + , (list at: 3) , '.' > > + , (list at: 4) timeout: 30. > > - remoteHostAddress := ByteArray > > - with: (list at: 1) asNumber > > - with: (list at: 2) asNumber > > - with: (list at: 3) asNumber > > - with: (list at: 4) asNumber. > > dataPort := (list at: 5) asNumber * 256 + (list at: 6) asNumber. > > + self openDataSocket: remoteHostAddress port: dataPort! > > - self openDataSocket: remoteHostAddress port: dataPort > > - ! > > > > Item was changed: > > ----- Method: ServerDirectory>>isRoot (in category 'testing') ----- > > isRoot > > + ^ directory = '/'! > > - ^directory = (String with: self pathNameDelimiter)! > > > > Item was changed: > > ----- Method: Socket>>waitForAcceptFor:ifTimedOut: (in category > 'waiting') ----- > > waitForAcceptFor: timeout ifTimedOut: timeoutBlock > > "Wait and accept an incoming connection" > > self waitForConnectionFor: timeout ifTimedOut: [^timeoutBlock > value]. > > + ^self isConnected > > Does this change actually do anything? Won't the previous line return when > the socket is not connected? > > Levente > > > + ifTrue:[self accept] > > + ! > > - ^self accept! > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/b55560f3/attachment.htm From timfelgentreff at gmail.com Wed Aug 31 07:32:41 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Wed Aug 31 07:32:55 2016 Subject: ScratchPlugin>>primOpenURL: (was Re: [squeak-dev] The Trunk: EToys-tfel.211.mcz) In-Reply-To: References: <201608301028.u7UASmkF009598@mail102c0.megamailservers.com> Message-ID: Yes, I think the graphics filters could nowadays be done in-image. This method in particular I haven't stepped through and understood yet. There is a lot of cruft :) On Tue, 30 Aug 2016 at 19:12 tim Rowledge wrote: > > > On 30-08-2016, at 10:26 AM, commits@source.squeak.org wrote: > > Item was changed: > > ----- Method: EtoyDAVLoginMorph>>launchBrowser (in category 'actions') > ----- > > launchBrowser > > > > ActiveWorld addMorph: self buildPanel centeredNear: Sensor > cursorPoint. > > + (Smalltalk classNamed: 'ScratchPlugin') ifNotNil: [:sp | sp > primOpenURL: self url]. > > - ScratchPlugin primOpenURL: self url. > > I?m thinking that this probably ought to be moved to OSProcess and used > via something that does at least a little checking that a URL is involved. > > And the assorted other ScratchPlugin graphics effects referenced might be > better in a graphics plugin - or even added to bitblt(?) or maybe even > tested to check they?re worth doing as plugin calls these days. > > > tim > -- > tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim > A bug in the code is worth two in the documentation. > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/b540852f/attachment.htm From timfelgentreff at gmail.com Wed Aug 31 07:33:38 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Wed Aug 31 07:33:52 2016 Subject: [squeak-dev] source.squeak.org down? Message-ID: Hi, I was using MCRepository trunk obtainMissingAncestryFrom: (MCRepository location: ' http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/etoys-spur') to copy the missing ancestry to trunk, and now source.squeak.org seems down. Can someone restart it? cheers, Tim -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/0068b452/attachment.htm From Das.Linux at gmx.de Wed Aug 31 07:39:47 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Aug 31 07:39:52 2016 Subject: [squeak-dev] Re: server update In-Reply-To: References: Message-ID: <0A9A5B54-1EBC-43CE-A27E-9E9C23253100@gmx.de> Hi On 31.08.2016, at 09:37, Marcel Taeumel wrote: > " I also discovered I can't apply patches live > and save the image, because that means its saved with the RFB server > running." > > That's not good. All patches should be stored in the respective repository and updating the running image, including save, must work. Otherwise some strangely patched monster will grow up and it will be very hard to setup SqueakSource freshly again. Strange, the last time I used the RFB code, It would always ask me whether to shut down the RFB before saving just to avoid that. Also, Why is it bad that the RFB remains running? Isn't that the point? Best regards -Tobias > > Best, > Marcel >> Am 31.08.2016 04:47:18 schrieb Chris Muller : >> >> After fixing a bug that let the new server grow to 2.5GB RAM, it is >> now stable at 500MB RAM. I also discovered I can't apply patches live >> and save the image, because that means its saved with the RFB server >> running. >> >> This large bulk load uncovered a bug when using Magma in direct-mode >> since Eliot fixed the process-scheduling to not cycle through >> equal-level processes by default -- Magma's flush-to-disk process was >> at equal priority and so it wasn't getting flushed! Spur really needs >> a way to cap its memory allocation like the old VM's had, so something >> like that would not cause problems for other processes on the server.. >> >> Disk space is so tight, I'll have to log in to delete unneeded commit >> log files to avoid us running out. Hopefully Rackspace can afford us >> a bigger disk. From commits at source.squeak.org Wed Aug 31 08:11:53 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 08:11:55 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.218.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.218.mcz ==================== Summary ==================== Name: EToys-tfel.218 Author: tfel Time: 31 August 2016, 10:10:08.849793 am UUID: ce143eb6-2703-8741-85c0-35e42f88016b Ancestors: EToys-tfel.217 stop the players sound from playing if we have it. (adapted from the WS-Sound package) =============== Diff against EToys-tfel.217 =============== Item was changed: ----- Method: Player>>stopProgramatically (in category 'scripts-execution') ----- stopProgramatically "stop running my ticking scripts -- called from running code" self instantiatedUserScriptsDo: [:aUserScript | aUserScript stopTicking]. + (self costume renderedMorph isKindOf: SpeakerMorph) - (costume renderedMorph isKindOf: SpeakerMorph) ifTrue: [costume renderedMorph stopSound]. "turn off buffered speaker sound" + self costume + valueOfProperty: #playingSound + ifPresentDo: [:sound | + sound stopGracefully. + self costume removeProperty: #playingSound].! - ! From commits at source.squeak.org Wed Aug 31 08:21:02 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 08:21:04 2016 Subject: [squeak-dev] The Trunk: Morphic-tfel.1304.mcz Message-ID: Tim Felgentreff uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tfel.1304.mcz ==================== Summary ==================== Name: Morphic-tfel.1304 Author: tfel Time: 31 August 2016, 10:15:39.417793 am UUID: c8bd618f-2c06-4941-83bb-7c94e378a7be Ancestors: Morphic-tfel.1303 Do not call stopSound on the Players, instead leave the decision to stop sounds when they stop running up to the players. =============== Diff against Morphic-tfel.1303 =============== Item was changed: ----- Method: PasteUpMorph>>stopRunningAll (in category 'misc') ----- stopRunningAll "Reset all ticking scripts to be paused. Triggered by user hitting STOP button" self presenter allExtantPlayers do: [:aPlayer | - aPlayer stopSound. aPlayer stopRunning]. self world updateStatusForAllScriptEditors! From leves at caesar.elte.hu Wed Aug 31 08:26:42 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 31 08:26:46 2016 Subject: [squeak-dev] The Trunk: Files-tfel.165.mcz In-Reply-To: References: Message-ID: On Tue, 30 Aug 2016, commits@source.squeak.org wrote: > Tim Felgentreff uploaded a new version of Files to project The Trunk: > http://source.squeak.org/trunk/Files-tfel.165.mcz > > ==================== Summary ==================== > > Name: Files-tfel.165 > Author: tfel > Time: 30 August 2016, 10:42:22.521946 am > UUID: 45b18cd1-022d-824f-8b83-077e3908cb22 > Ancestors: Files-tfel.162, Files-dtl.164 > > merge translation and read-only check from Squeakland Etoys > > =============== Diff against Files-dtl.164 =============== > snip > Item was changed: > ----- Method: RemoteString>>string:onFileNumber: (in category 'private') ----- > string: aString onFileNumber: fileNumber > "Store this as my string if source files exist." > + (SourceFiles at: fileNumber) ifNotNil: [:theFile | > + theFile isReadOnly ifTrue: [^ nil]. Since we use read-only files for reading the sources, this change will break stuff. What's the point of this change anyway? Levente > - | theFile | > - (SourceFiles at: fileNumber) == nil ifFalse: > - [theFile := SourceFiles at: fileNumber. > theFile setToEnd; cr. > + self string: aString onFileNumber: fileNumber toFile: theFile].! > - self string: aString onFileNumber: fileNumber toFile: theFile]! > > > From hannes.hirzel at gmail.com Wed Aug 31 08:58:28 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 09:04:40 2016 Subject: [squeak-dev] Re: SISS serialisation format? In-Reply-To: References: Message-ID: Thank you Tim, The reference is http://files.squeak.org/etoys/6.0beta/Etoys6.0beta-7605-32bit/ (not file.squeak.org) --Hannes On 8/31/16, Tim Felgentreff wrote: > Hi, > > I would recommend to look at the slightly cleaned up project export code in > the Etoys 6 package (file.squeak.org/etoys). You can export plain morphic > projects just fine in that package. However, all SystemWindows except > workspaces are currently explicitly ignored. > > As far as saving is concerned, the QuickGuides simply use a special > exporter (for book morphs), rather than the Project exporter. > > cheers, > Tim > > > > On Wed, 31 Aug 2016 at 09:16 H. Hirzel wrote: > >> The class comment of QuickGuideMorph. It refers to the place where the >> exported SISS files of the projects are stored. The Squeakland image >> contains many examples of SISS files. >> >> ---------------------------------------------------- >> >> >> A BookMorph that holds QuickGuides. >> >> World >> an AlignmentMorph (the flap) >> an AlignmentMorph >> a QuickGuideMorph (one page per guide, 54 pages. >> Page may be a stub if guide not in) >> a QuickGuideHolderMorph >> a BookMorph (4 pages) >> a PasteUpMorph (a page) >> >> QuickGuides are stored in Contents/Resources/QuickGuides/ >> or by language in Contents/Resources/locale//QuickGuides/ >> (see guidePath) >> >> Categories = OrderedCollection of {catKey. catTitle} >> where catKey appears at the start of a file name 'Menu' >> catTitle may be UTF-8 full name. >> PagesForCategory dictionary of (catKey -> list). list has elements >> {guideName. guideTitle}. guideName is last part of a file name and >> guideTitle may be in UTF-8. >> >> On 8/31/16, H. Hirzel wrote: >> > An entry point for reading about SISS in the Squeakland Etoys 5.0 image >> > >> > QuickGuideMorph>> >> > >> > convertProjectsWithBooksToSISSIn: dir to: outDir >> > >> > | p book | >> > dir fileNames do: [:f | >> > (f endsWith: '.pr') ifTrue: [ >> > p _ ProjectLoading loadName: f stream: (dir >> readOnlyFileNamed: f) >> > fromDirectory: dir withProjectView: nil. >> > book _ p world submorphs detect: [:b | b >> isMemberOf: BookMorph] >> > ifNone: [nil]. >> > book ifNotNil: [ >> > book hidePageControls. >> > book storeAsDataStreamNamed: (outDir >> fullNameFor: (f copyUpTo: >> > $.), '.sexp.data.gz'). >> > ]. >> > p okToChangeSilently. >> > ]. >> > ]. >> > >> > On 8/31/16, H. Hirzel wrote: >> >> Hello >> >> >> >> I understand that the SISS serialisation format has been used in the >> >> Etoys 5.0 image to store quick guides. It is a plain text format. >> >> >> >> What does SISS stand for? >> >> >> >> Browsing the Etoys 5.0 image ..... >> >> >> >> To use SISS classes need to implement a method >> >> >> >> sissExportSpecification >> >> >> >> >> >> For example for Workspace it is >> >> >> >> >> >> sissExportSpecification >> >> >> >> ^ #(('contents' #sissGetContents) >> >> ('bindings' #bindings) >> >> ('acceptDroppedMorphs' #acceptsDroppingMorphForReference) >> >> ) >> >> >> >> >> >> And a method >> >> >> >> sissWriteValue >> >> >> >> Morph >> sissWriteValue >> >> sissWriteValue >> >> >> >> self prepareToBeSaved. >> >> >> >> >> >> or >> >> >> >> Object>>sissWriteValue >> >> sissWriteValue >> >> "Override if you wish" >> >> >> >> ^self >> >> >> >> >> >> PasteUpMorph>>sissWriteValue >> >> sissWriteValue >> >> "Override if you wish" >> >> >> >> | new | >> >> self prepareToBeSaved. >> >> new _ self clone. >> >> new privateSubmorphs: (submorphs reject: [:e | >> >> (e isKindOf: SolidSugarSuppliesTab) >> >> or: [(e isKindOf: Viewer) >> >> or: [(e isKindOf: SugarNavTab) >> >> or: [((e isKindOf: SystemWindow) >> and: [(e model isKindOf: Workspace) >> >> not]) >> >> or: [(e isMemberOf: >> FlapTab) and: [e isGlobalFlap]]]]]]). >> >> new instVarNamed: 'presenter' put: nil. >> >> new instVarNamed: 'worldState' put: nil. >> >> new privateExtension: self extension copy. >> >> new extension removeOtherProperties. >> >> self extension otherProperties keysDo: [:sym | >> >> (#(commandKeySelectors lastKeystroke locked) includes: >> sym) ifFalse: [ >> >> new setProperty: sym toValue: (self extension >> valueOfProperty: sym) >> >> ]. >> >> ]. >> >> >> >> ^ new. >> >> >> >> >> >> >> >> Form>> >> >> sissWriteValue >> >> >> >> SISSDictionaryForScanning reduceFormDepth ifTrue: [ >> >> ^ (self asFormOfDepth: 8) hibernate. >> >> ]. >> >> ^ self hibernate. >> >> >> >> >> >> >> >> >> >> >> >> An example of the format >> >> >> >> MSExpParser test1 >> >> >> >> | str1 str2 str3 | >> >> str1 _ '(script :name "testscript1:" :type "Player" :player >> >> "12" >> >> (parameter :name "parameter" :type "Number" :position >> >> "1") >> >> (sequence >> >> (loop :type "repeat" >> >> (initial (literal :value "0")) >> >> (increment (literal :value "1")) >> >> (test (send :type "Number" >> >> (selector :selector "+") >> >> (send :type "Number" >> >> (selector :getter "x") >> >> (literal :type "Player" :value "self")) >> >> (literal :type "Number" :value "1"))) >> >> (sequence >> >> (assign :type "Number" >> >> :updating "Incr:" :property "x" >> >> (literal :type >> >> "Player" :value "4") >> >> (send :type "Number" >> >> (selector >> >> :selector >> >> "+") >> >> (literal :type >> >> "Number" :value "244.0") >> >> (literal :type >> >> "Number" :value "1")))))))'. >> >> >> >> >> >> >> >> I understand that the SISS format has been used successfully in the >> >> Etoys image to store quick guide projects. >> >> >> >> As far as Project saving is concerned it there a difference between >> >> Etoy Quick guide projects and regular Squeak Morphic projects? >> >> >> >> Where can I find more information on the SISS format? >> >> >> >> Regards >> >> >> >> Hannes >> >> >> > >> >> > From commits at source.squeak.org Wed Aug 31 09:08:38 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:09:26 2016 Subject: [squeak-dev] The Trunk: GetText-tfel.39.mcz Message-ID: Tim Felgentreff uploaded a new version of GetText to project The Trunk: http://source.squeak.org/trunk/GetText-tfel.39.mcz ==================== Summary ==================== Name: GetText-tfel.39 Author: tfel Time: 2 August 2016, 9:59:04.817368 am UUID: 1c4dcc9f-f48d-4540-a046-9a63874b83c8 Ancestors: GetText-ul.38, GetText-bf.16 merge from Squeakland Etoys image =============== Diff against GetText-ul.38 =============== Item was changed: ----- Method: GetTextExporter>>createExtraInformation (in category 'private') ----- createExtraInformation | extras | extras := OrderedCollection new. #( + 'ATTENTION TRANSLATORS!! This should be the name of your language as you would like it to appear in the Languages menu, e.g. "Español" or "English"' 'Language-Name' + 'ATTENTION TRANSLATORS!! Put in the directionality of your language, that is "LTR" for left-to-right or "RTL" for right-to-left' 'Language-Direction' - 'Language name as you''d like it to appear in the Languages menu' 'Language-Name' - 'Directionality of language' 'Language-Direction' ) pairsDo: [:first :second | extras add: (Array with: '' with: first with: second). ]. ^ extras! From bert at freudenbergs.de Wed Aug 31 09:14:53 2016 From: bert at freudenbergs.de (Bert Freudenberg) Date: Wed Aug 31 09:15:16 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: References: Message-ID: On Wednesday, 31 August 2016, H. Hirzel wrote: > > We might consider JSON or Fuel might as well options for a format to > save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for > example). > If someone wants to take a serious look I'd suggest Fuel. Being a replacement for ImageSegments was one of its design goals, if I remember correctly. - Bert - -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/463ff3ee/attachment.htm From commits at source.squeak.org Wed Aug 31 09:21:18 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:21:25 2016 Subject: [squeak-dev] The Trunk: System-tfel.902.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.902.mcz ==================== Summary ==================== Name: System-tfel.902 Author: tfel Time: 21 August 2016, 4:49:50.260391 pm UUID: 3646f16c-8148-4f44-92df-000c079b45dd Ancestors: System-mt.901, System-tfel.882 merge trunk =============== Diff against System-mt.901 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: DiskProxy>>enter:revert:saveForRevert: (in category 'exceptions') ----- enter: returningFlag revert: revertFlag saveForRevert: saveForRevert "Look for our project on the server, then try to enter it!! DiskProxy is acting as a stub for the real thing. Called from a ProjectViewMorph in the current project. If have url, use it. Else look in current Project's server and folder." + constructorSelector == #namedExample: ifTrue: ["Project namedUrl: xxx" + ^ ((Smalltalk at: globalObjectName) perform: #fromExampleEtoys: + withArguments: constructorArgs) ]. constructorSelector == #namedUrl: ifTrue: ["Project namedUrl: xxx" ^ ((Smalltalk at: globalObjectName) perform: #fromUrl: withArguments: constructorArgs) ]. constructorSelector == #named: ifTrue: [ Project current fromMyServerLoad: constructorArgs first]. "name" ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- availableLanguageLocaleIDs "Return the locale ids for the currently available languages. Meaning those which either internally or externally have translations available." "NaturalLanguageTranslator availableLanguageLocaleIDs" ^ self translators values collect:[:each | each localeID]! Item was changed: ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName "try to translate with small footprint: if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. if InternalTranslator isn't available, then actually load MO and use it" | translator | translator := self availableForLocaleID: localeID. + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. (translator isDomainLoaded: aDomainName) ifFalse: [ (InternalTranslator availableLanguageLocaleIDs includes: localeID) ifTrue: [translator := InternalTranslator localeID: localeID]. ]. ^translator translate: aString inDomain: aDomainName! Item was added: + ----- Method: Object>>translatedNoop (in category '*System-Localization-locales') ----- + translatedNoop + "This is correspondence gettext_noop() in gettext." + ^ self + ! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was added: + ----- Method: Preferences class>>allowCelesteTell (in category 'standard queries') ----- + allowCelesteTell + ^ self + valueOfFlag: #allowCelesteTell + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>allowEtoyUserCustomEvents (in category 'standard queries') ----- + allowEtoyUserCustomEvents + ^ self + valueOfFlag: #allowEtoyUserCustomEvents + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>alternativeScrollbarLook (in category 'standard queries') ----- + alternativeScrollbarLook + ^ self + valueOfFlag: #alternativeScrollbarLook + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>alternativeWindowLook (in category 'standard queries') ----- + alternativeWindowLook + ^ self + valueOfFlag: #alternativeWindowLook + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>ansiAssignmentOperatorWhenPrettyPrinting (in category 'standard queries') ----- + ansiAssignmentOperatorWhenPrettyPrinting + ^ self + valueOfFlag: #ansiAssignmentOperatorWhenPrettyPrinting + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>autoAccessors (in category 'standard queries') ----- + autoAccessors + ^ self + valueOfFlag: #autoAccessors + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>biggerCursors (in category 'standard queries') ----- + biggerCursors + ^ self + valueOfFlag: #biggerCursors + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>blinkParen (in category 'standard queries') ----- + blinkParen + ^ self + valueOfFlag: #blinkParen + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>browseWithDragNDrop (in category 'standard queries') ----- + browseWithDragNDrop + ^ self + valueOfFlag: #browseWithDragNDrop + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>browseWithPrettyPrint (in category 'standard queries') ----- + browseWithPrettyPrint + ^ self + valueOfFlag: #browseWithPrettyPrint + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>browserNagIfNoClassComment (in category 'standard queries') ----- + browserNagIfNoClassComment + ^ self + valueOfFlag: #browserNagIfNoClassComment + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>browserShowsPackagePane (in category 'standard queries') ----- + browserShowsPackagePane + ^ self + valueOfFlag: #browserShowsPackagePane + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>canRecordWhilePlaying (in category 'standard queries') ----- + canRecordWhilePlaying + ^ self + valueOfFlag: #canRecordWhilePlaying + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>celesteHasStatusPane (in category 'standard queries') ----- + celesteHasStatusPane + ^ self + valueOfFlag: #celesteHasStatusPane + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>celesteShowsAttachmentsFlag (in category 'standard queries') ----- + celesteShowsAttachmentsFlag + ^ self + valueOfFlag: #celesteShowsAttachmentsFlag + ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was added: + ----- Method: Preferences class>>classicNewMorphMenu (in category 'standard queries') ----- + classicNewMorphMenu + ^ self + valueOfFlag: #classicNewMorphMenu + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>colorWhenPrettyPrinting (in category 'standard queries') ----- + colorWhenPrettyPrinting + ^ self + valueOfFlag: #colorWhenPrettyPrinting + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>cpuWatcherEnabled (in category 'standard queries') ----- + cpuWatcherEnabled + ^ self + valueOfFlag: #cpuWatcherEnabled + ifAbsent: [false]! Item was changed: ----- Method: Preferences class>>debugLogTimestamp (in category 'standard queries') ----- debugLogTimestamp ^ self valueOfFlag: #debugLogTimestamp ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>dismissEventTheatreUponPublish (in category 'standard queries') ----- + dismissEventTheatreUponPublish + ^ self + valueOfFlag: #dismissEventTheatreUponPublish + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>enableInternetConfig (in category 'standard queries') ----- + enableInternetConfig + ^ self + valueOfFlag: #enableInternetConfig + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>enablePortraitMode (in category 'standard queries') ----- + enablePortraitMode + ^ self + valueOfFlag: #enablePortraitMode + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>enableVirtualOLPCDisplay (in category 'standard queries') ----- + enableVirtualOLPCDisplay + ^ self + valueOfFlag: #enableVirtualOLPCDisplay + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>escapeKeyProducesMenu (in category 'standard queries') ----- + escapeKeyProducesMenu + ^ self + valueOfFlag: #escapeKeyProducesMenu + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>gradientMenu (in category 'standard queries') ----- + gradientMenu + ^ self + valueOfFlag: #gradientMenu + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>gradientScrollBars (in category 'standard queries') ----- + gradientScrollBars + ^ self + valueOfFlag: #gradientScrollBars + ifAbsent: [true]! Item was changed: + ----- Method: Preferences class>>haloTheme (in category 'standard queries') ----- - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- haloTheme ^ self valueOfFlag: #haloTheme + ifAbsent: [#iconicHaloSpecifications]! - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was added: + ----- Method: Preferences class>>ignoreStyleIfOnlyBold (in category 'standard queries') ----- + ignoreStyleIfOnlyBold + ^ self + valueOfFlag: #ignoreStyleIfOnlyBold + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>implicitSelfInTiles (in category 'standard queries') ----- + implicitSelfInTiles + ^ self + valueOfFlag: #implicitSelfInTiles + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>inboardScrollbars (in category 'standard queries') ----- + inboardScrollbars + ^ self + valueOfFlag: #inboardScrollbars + ifAbsent: [true]! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was added: + ----- Method: Preferences class>>morphicProgressStyle (in category 'standard queries') ----- + morphicProgressStyle + ^ self + valueOfFlag: #morphicProgressStyle + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>preserveTrash (in category 'standard queries') ----- + preserveTrash + ^ self + valueOfFlag: #preserveTrash + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>printAlternateSyntax (in category 'standard queries') ----- + printAlternateSyntax + ^ self + valueOfFlag: #printAlternateSyntax + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>promptForUpdateServer (in category 'standard queries') ----- + promptForUpdateServer + ^ self + valueOfFlag: #promptForUpdateServer + ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was added: + ----- Method: Preferences class>>rotationAndScaleHandlesInPaintBox (in category 'standard queries') ----- + rotationAndScaleHandlesInPaintBox + ^ self + valueOfFlag: #rotationAndScaleHandlesInPaintBox + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>roundedMenuCorners (in category 'standard queries') ----- + roundedMenuCorners + ^ self + valueOfFlag: #roundedMenuCorners + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>roundedScrollBarLook (in category 'standard queries') ----- + roundedScrollBarLook + ^ self + valueOfFlag: #roundedScrollBarLook + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>roundedWindowCorners (in category 'standard queries') ----- + roundedWindowCorners + ^ self + valueOfFlag: #roundedWindowCorners + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>scrollBarsWithoutMenuButton (in category 'standard queries') ----- + scrollBarsWithoutMenuButton + ^ self + valueOfFlag: #scrollBarsWithoutMenuButton + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>selectionsMayShrink (in category 'standard queries') ----- + selectionsMayShrink + ^ self + valueOfFlag: #selectionsMayShrink + ifAbsent: [true]! Item was changed: ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- showAdvancedNavigatorButtons ^ self valueOfFlag: #showAdvancedNavigatorButtons + ifAbsent: [false]! - ifAbsent: [ true ]! Item was added: + ----- Method: Preferences class>>showDeprecationWarnings (in category 'standard queries') ----- + showDeprecationWarnings + ^ self + valueOfFlag: #showDeprecationWarnings + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>showLinesInHierarchyViews (in category 'standard queries') ----- + showLinesInHierarchyViews + ^ self + valueOfFlag: #showLinesInHierarchyViews + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>slideDismissalsToTrash (in category 'standard queries') ----- + slideDismissalsToTrash + ^ self + valueOfFlag: #slideDismissalsToTrash + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>soundQuickStart (in category 'standard queries') ----- + soundQuickStart + ^ self + valueOfFlag: #soundQuickStart + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>soundReverb (in category 'standard queries') ----- + soundReverb + ^ self + valueOfFlag: #soundReverb + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>soundStopWhenDone (in category 'standard queries') ----- + soundStopWhenDone + ^ self + valueOfFlag: #soundStopWhenDone + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>soundsEnabled (in category 'standard queries') ----- + soundsEnabled + ^ self + valueOfFlag: #soundsEnabled + ifAbsent: [true]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was added: + ----- Method: Preferences class>>sugarAutoSave (in category 'standard queries') ----- + sugarAutoSave + ^ self + valueOfFlag: #sugarAutoSave + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>testRunnerShowAbstractClasses (in category 'standard queries') ----- + testRunnerShowAbstractClasses + ^ self + valueOfFlag: #testRunnerShowAbstractClasses + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>twoSidedPoohTextures (in category 'standard queries') ----- + twoSidedPoohTextures + ^ self + valueOfFlag: #twoSidedPoohTextures + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>unifyNestedProgressBars (in category 'standard queries') ----- + unifyNestedProgressBars + ^ self + valueOfFlag: #unifyNestedProgressBars + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>updateFromServerAtStartup (in category 'standard queries') ----- + updateFromServerAtStartup + ^ self + valueOfFlag: #updateFromServerAtStartup + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>updateSavesFile (in category 'standard queries') ----- + updateSavesFile + ^ self + valueOfFlag: #updateSavesFile + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>useArtificialSweetenerBar (in category 'standard queries') ----- + useArtificialSweetenerBar + ^ self + valueOfFlag: #useArtificialSweetenerBar + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>useBiggerPaintingBox (in category 'standard queries') ----- + useBiggerPaintingBox + ^ self + valueOfFlag: #useBiggerPaintingBox + ifAbsent: [true]! Item was changed: ----- Method: Preferences class>>useButtonPropertiesToFire (in category 'standard queries') ----- useButtonPropertiesToFire ^ self + valueOfFlag: #useButtonPropertiesToFire + ifAbsent: [false]! - valueOfFlag: #useButtonProprtiesToFire - ifAbsent: [ false ]! Item was added: + ----- Method: Preferences class>>useFileList2 (in category 'standard queries') ----- + useFileList2 + ^ self + valueOfFlag: #useFileList2 + ifAbsent: [true]! Item was changed: + ----- Method: Preferences class>>useFormsInPaintBox (in category 'standard queries') ----- - ----- Method: Preferences class>>useFormsInPaintBox (in category 'prefs - misc') ----- useFormsInPaintBox + ^ self + valueOfFlag: #useFormsInPaintBox + ifAbsent: [false]! - - ^ self valueOfFlag: #useFormsInPaintBox! Item was added: + ----- Method: Preferences class>>usePangoRenderer (in category 'standard queries') ----- + usePangoRenderer + ^ self + valueOfFlag: #usePangoRenderer + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>usePlatformFonts (in category 'standard queries') ----- + usePlatformFonts + ^ self + valueOfFlag: #usePlatformFonts + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>usePopUpArrows (in category 'standard queries') ----- + usePopUpArrows + ^ self + valueOfFlag: #usePopUpArrows + ifAbsent: [true]! Item was added: + ----- Method: Preferences class>>warnIfChangesFileReadOnly (in category 'standard queries') ----- + warnIfChangesFileReadOnly + ^ self + valueOfFlag: #warnIfChangesFileReadOnly + ifAbsent: [false]! Item was added: + ----- Method: Preferences class>>warningForMacOSFileNameLength (in category 'standard queries') ----- + warningForMacOSFileNameLength + ^ self + valueOfFlag: #warningForMacOSFileNameLength + ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was added: + ----- Method: Project class>>publishInSexp (in category 'preferences') ----- + publishInSexp + + Smalltalk at: #SISSDictionaryForScanning ifPresent: [:siss | ^ siss publishInSexp]. + ^ false! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := (Smalltalk at: #SugarLauncher ifPresent: [:c | + c current parameterAt: 'SQUEAKLETS' ifAbsent: []]) ifNil: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was added: + ----- Method: Project>>acceptProjectDetails: (in category 'file in/out') ----- + acceptProjectDetails: details + "Store project details back into a property of the world, and if a name is provided, make sure the name is properly installed in the project." + + world setProperty: #ProjectDetails toValue: details. + details at: 'projectname' ifPresent: [ :newName | + self renameTo: newName]! Item was added: + ----- Method: Project>>compressFilesIn:to:in: (in category 'file in/out') ----- + compressFilesIn: tempDir to: localName in: localDirectory + "Compress all the files in tempDir making up a zip file in localDirectory named localName" + + | archive archiveName entry fileNames | + archive := ZipArchive new. + fileNames := tempDir fileNames. + (fileNames includes: 'manifest') + ifTrue: [fileNames := #('manifest'), (fileNames copyWithout: 'manifest')]. + fileNames do:[:fn| + archiveName := fn. + entry := archive addFile: (tempDir fullNameFor: fn) as: archiveName. + entry desiredCompressionMethod: ( + fn = 'manifest' + ifTrue: [ZipArchive compressionLevelNone] + ifFalse: [ZipArchive compressionDeflated]). + ]. + archive writeToFileNamed: (localDirectory fullNameFor: localName). + archive close. + tempDir fileNames do:[:fn| + tempDir deleteFileNamed: fn ifAbsent:[]]. + localDirectory deleteDirectory: tempDir localName.! Item was added: + ----- Method: Project>>createViewIfAppropriate (in category 'utilities') ----- + createViewIfAppropriate + "overridden in subclasses" + ^ self! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>exportSegmentFileName:directory: (in category 'file in/out') ----- exportSegmentFileName: aFileName directory: aDirectory + ^ self exportSegmentFileName: aFileName directory: aDirectory withoutInteraction: false! - | exportChangeSet | - - "An experimental version to fileout a changeSet first so that a project can contain its own classes" - - "Store my project out on the disk as an *exported* ImageSegment. Put all outPointers in a form that can be resolved in the target image. Name it .extSeg. - Player classes are included automatically." - - exportChangeSet := nil. - (changeSet notNil and: [changeSet isEmpty not]) ifTrue: [ - (self confirm: - 'Would you like to include all the changes in the change set - as part of this publishing operation?' translated) ifTrue: [ - exportChangeSet := changeSet - ]. - ]. - ^ self - exportSegmentWithChangeSet: exportChangeSet - fileName: aFileName - directory: aDirectory - ! Item was added: + ----- Method: Project>>exportSegmentFileName:directory:withoutInteraction: (in category 'file in/out') ----- + exportSegmentFileName: aFileName directory: aDirectory withoutInteraction: noInteraction + + | exportChangeSet | + + "An experimental version to fileout a changeSet first so that a project can contain its own classes" + + "Store my project out on the disk as an *exported* ImageSegment. Put all outPointers in a form that can be resolved in the target image. Name it .extSeg. + Player classes are included automatically." + exportChangeSet := nil. + (changeSet notNil and: [changeSet isEmpty not]) ifTrue: [ + (noInteraction or: [self confirm: + 'Would you like to include all the changes in the change set + as part of this publishing operation?' translated]) ifTrue: [ + exportChangeSet := changeSet + ]. + ]. + + Project publishInSexp ifTrue: [ + ^ self exportSegmentInSexpWithChangeSet: exportChangeSet fileName: aFileName directory: aDirectory withoutInteraction: noInteraction + ]. + ^ self + exportSegmentWithChangeSet: exportChangeSet + fileName: aFileName + directory: aDirectory + withoutInteraction: noInteraction! Item was added: + ----- Method: Project>>exportSegmentInSexpWithChangeSet:fileName:directory:withoutInteraction: (in category 'file in/out') ----- + exportSegmentInSexpWithChangeSet: aChangeSetOrNil fileName: aFileName directory: aDirectory withoutInteraction: noInteraction + + self subclassResponsibility! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was added: + ----- Method: ProjectLoading class>>checkSecurity:preStream:projStream: (in category 'utilities') ----- + checkSecurity: aFileName preStream: preStream projStream: projStream + "Answer true if passed" + | trusted enterRestricted | + trusted := SecurityManager default positionToSecureContentsOf: + projStream. + trusted ifFalse: + [enterRestricted := (preStream isTypeHTTP or: + [aFileName isNil]) + ifTrue: [Preferences securityChecksEnabled] + ifFalse: [Preferences standaloneSecurityChecksEnabled]. + enterRestricted + ifTrue: [SecurityManager default enterRestrictedMode + ifFalse: + [preStream close. + ^ false]]]. + ^ true! Item was added: + ----- Method: ProjectLoading class>>checkStream: (in category 'utilities') ----- + checkStream: aStream + (aStream isNil + or: [aStream size = 0]) + ifFalse: [^ false]. + ProgressNotification signal: '9999 about to enter + project'. + "the hard part is over" + self inform: 'It looks like a problem occurred while + getting this project. It may be temporary, + so you may want to try again,' translated. + ^ true! Item was added: + ----- Method: ProjectLoading class>>fileInName:archive:morphOrList: (in category 'utilities') ----- + fileInName: aFileName archive: archive morphOrList: morphOrList + | baseChangeSet substituteFont numberOfFontSubstitutes exceptions anObject mgr | + ResourceCollector current: ResourceCollector new. + baseChangeSet := ChangeSet current. + self useTempChangeSet. "named zzTemp" + "The actual reading happens here" + substituteFont := Preferences standardDefaultTextFont copy. + numberOfFontSubstitutes := 0. + exceptions := Set new. + [[anObject := morphOrList fileInObjectAndCodeForProject] + on: MissingFont do: [ :ex | + exceptions add: ex. + numberOfFontSubstitutes := numberOfFontSubstitutes + 1. + ex resume: substituteFont ]] + ensure: [ ChangeSet newChanges: baseChangeSet]. + mgr := ResourceManager new initializeFrom: ResourceCollector current. + mgr fixJISX0208Resource. + mgr registerUnloadedResources. + archive ifNotNil:[mgr preLoadFromArchive: archive cacheName: aFileName]. + ResourceCollector current: nil. + ^ {anObject. numberOfFontSubstitutes. substituteFont. mgr}! Item was added: + ----- Method: ProjectLoading class>>loadImageSegment:fromDirectory:withProjectView:numberOfFontSubstitutes:substituteFont:mgr: (in category 'loading') ----- + loadImageSegment: morphOrList fromDirectory: aDirectoryOrNil withProjectView: existingView numberOfFontSubstitutes: numberOfFontSubstitutes substituteFont: substituteFont mgr: mgr + + | proj projectsToBeDeleted ef | + Smalltalk at: #Flaps ifPresent: [:flaps | + (flaps globalFlapTabWithID: 'Navigator' translated)ifNotNil: [:f | f hideFlap]]. + proj := morphOrList arrayOfRoots + detect: [:mm | mm isKindOf: Project] + ifNone: [^ nil]. + numberOfFontSubstitutes > 0 ifTrue: [ + proj projectParameterAt: #substitutedFont put: substituteFont]. + ef := proj projectParameterAt: #eToysFont. + (ef isNil or: [ef ~= substituteFont familySizeFace]) ifTrue: [ + proj projectParameterAt: #substitutedFont put: substituteFont. + ]. + proj projectParameters at: #MultiSymbolInWrongPlace put: false. + "Yoshiki did not put MultiSymbols into outPointers in older images!!" + morphOrList arrayOfRoots do: [:obj | + obj fixUponLoad: proj seg: morphOrList "imageSegment"]. + (proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [ + morphOrList arrayOfRoots do: [:obj | (obj isKindOf: Set) ifTrue: [obj rehash]]]. + + proj resourceManager: mgr. + "proj versionFrom: preStream." + proj lastDirectory: aDirectoryOrNil. + proj setParent: Project current. + projectsToBeDeleted := OrderedCollection new. + existingView == #none ifFalse: [ + self makeExistingView: existingView project: proj projectsToBeDeleted: projectsToBeDeleted]. + ChangeSorter allChangeSets add: proj changeSet. + Project current projectParameters + at: #deleteWhenEnteringNewProject + ifPresent: [ :ignored | + projectsToBeDeleted add: Project current. + Project current removeParameter: #deleteWhenEnteringNewProject. + ]. + projectsToBeDeleted isEmpty ifFalse: [ + proj projectParameters + at: #projectsToBeDeleted + put: projectsToBeDeleted. + ]. + proj removeParameter: #eToysFont. + ^ proj! Item was added: + ----- Method: ProjectLoading class>>makeExistingView:project:projectsToBeDeleted: (in category 'utilities') ----- + makeExistingView: existingView project: proj projectsToBeDeleted: projectsToBeDeleted + existingView ifNil: [ + proj createViewIfAppropriate. + ChangeSorter allChangeSets add: proj changeSet. + Project current openProject: proj. + ] ifNotNil: [ + (existingView project isKindOf: DiskProxy) ifFalse: [ + existingView project changeSet name: + ChangeSet defaultName. + projectsToBeDeleted add: existingView project. + ]. + (existingView owner isSystemWindow) ifTrue: [ + existingView owner model: proj + ]. + existingView project: proj. + ].! Item was added: + ----- Method: ProjectLoading class>>morphOrList:stream:fromDirectory:archive: (in category 'utilities') ----- + morphOrList: aFileName stream: preStream fromDirectory: aDirectoryOrNil archive: archive + "Answer morphOrList or nil if problem happened" + | projStream localDir morphOrList | + projStream := archive + ifNil: [preStream] + ifNotNil: [self projectStreamFromArchive: archive]. + (self checkSecurity: aFileName preStream: preStream projStream: projStream) + ifFalse: [^nil]. + localDir := Project squeakletDirectory. + aFileName ifNotNil: [ + (aDirectoryOrNil isNil or: [aDirectoryOrNil pathName + ~= localDir pathName]) ifTrue: [ + localDir deleteFileNamed: aFileName. + (localDir fileNamed: aFileName) binary + nextPutAll: preStream remainingContents; + close. + ]. + ]. + morphOrList := projStream asUnZippedStream. + preStream sleep. "if ftp, let the connection close" + ^ morphOrList! Item was changed: ----- Method: ProjectLoading class>>openName:stream:fromDirectory:withProjectView: (in category 'loading') ----- openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView - "Reconstitute a Morph from the selected file, presumed to be - represent a Morph saved via the SmartRefStream mechanism, and open it - in an appropriate Morphic world." + ^ self openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil + withProjectView: existingView clearOriginFlag: false.! - | morphOrList proj trusted localDir projStream archive mgr - projectsToBeDeleted baseChangeSet enterRestricted substituteFont - numberOfFontSubstitutes exceptions | - (preStream isNil or: [preStream size = 0]) ifTrue: [ - ProgressNotification signal: '9999 about to enter - project'. "the hard part is over" - ^self inform: - 'It looks like a problem occurred while - getting this project. It may be temporary, - so you may want to try again,' translated - ]. - ProgressNotification signal: '2:fileSizeDetermined - ',preStream size printString. - preStream isZipArchive - ifTrue:[ archive := ZipArchive new readFrom: preStream. - projStream := self - projectStreamFromArchive: archive] - ifFalse:[projStream := preStream]. - trusted := SecurityManager default positionToSecureContentsOf: - projStream. - trusted ifFalse: - [enterRestricted := (preStream isTypeHTTP or: - [aFileName isNil]) - ifTrue: [Preferences securityChecksEnabled] - ifFalse: [Preferences standaloneSecurityChecksEnabled]. - enterRestricted - ifTrue: [SecurityManager default enterRestrictedMode - ifFalse: - [preStream close. - ^ self]]]. - - localDir := Project squeakletDirectory. - aFileName ifNotNil: [ - (aDirectoryOrNil isNil or: [aDirectoryOrNil pathName - ~= localDir pathName]) ifTrue: [ - localDir deleteFileNamed: aFileName. - (localDir fileNamed: aFileName) binary - nextPutAll: preStream contents; - close. - ]. - ]. - morphOrList := projStream asUnZippedStream. - preStream sleep. "if ftp, let the connection close" - ProgressNotification signal: '3:unzipped'. - ResourceCollector current: ResourceCollector new. - baseChangeSet := ChangeSet current. - self useTempChangeSet. "named zzTemp" - "The actual reading happens here" - substituteFont := Preferences standardEToysFont copy. - numberOfFontSubstitutes := 0. - exceptions := Set new. - [[morphOrList := morphOrList fileInObjectAndCodeForProject] - on: MissingFont do: [ :ex | - exceptions add: ex. - numberOfFontSubstitutes := - numberOfFontSubstitutes + 1. - ex resume: substituteFont ]] - ensure: [ ChangeSet newChanges: baseChangeSet]. - mgr := ResourceManager new initializeFrom: ResourceCollector current. - mgr fixJISX0208Resource. - mgr registerUnloadedResources. - archive ifNotNil:[mgr preLoadFromArchive: archive cacheName: - aFileName]. - (preStream respondsTo: #close) ifTrue:[preStream close]. - ResourceCollector current: nil. - ProgressNotification signal: '4:filedIn'. - ProgressNotification signal: '9999 about to enter project'. - "the hard part is over" - (morphOrList isKindOf: ImageSegment) ifTrue: [ - proj := morphOrList arrayOfRoots - detect: [:mm | mm isKindOf: Project] - ifNone: [^self inform: 'No project found in - this file']. - proj projectParameters at: #substitutedFont put: ( - numberOfFontSubstitutes > 0 - ifTrue: [substituteFont] - ifFalse: [#none]). - proj projectParameters at: #MultiSymbolInWrongPlace put: false. - "Yoshiki did not put MultiSymbols into - outPointers in older images!!" - morphOrList arrayOfRoots do: [:obj | - obj fixUponLoad: proj seg: morphOrList "imageSegment"]. - (proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [ - morphOrList arrayOfRoots do: [:obj | (obj - isKindOf: HashedCollection) ifTrue: [obj rehash]]]. - - proj resourceManager: mgr. - "proj versionFrom: preStream." - proj lastDirectory: aDirectoryOrNil. - proj setParent: Project current. - projectsToBeDeleted := OrderedCollection new. - existingView ifNil: [ - ChangeSet allChangeSets add: proj changeSet. - Project current openProject: proj. - "Note: in MVC we get no further than the above" - ] ifNotNil: [ - (existingView project isKindOf: DiskProxy) ifFalse: [ - existingView project changeSet name: - ChangeSet defaultName. - projectsToBeDeleted add: existingView project. - ]. - (existingView owner isSystemWindow) ifTrue: [ - existingView owner model: proj - ]. - existingView project: proj. - ]. - ChangeSet allChangeSets add: proj changeSet. - Project current projectParameters - at: #deleteWhenEnteringNewProject - ifPresent: [ :ignored | - projectsToBeDeleted add: Project current. - Project current removeParameter: - #deleteWhenEnteringNewProject. - ]. - projectsToBeDeleted isEmpty ifFalse: [ - proj projectParameters - at: #projectsToBeDeleted - put: projectsToBeDeleted. - ]. - ^ ProjectEntryNotification signal: proj - ]. - Project current openViewAndEnter: morphOrList - ! Item was added: + ----- Method: ProjectLoading class>>openName:stream:fromDirectory:withProjectView:clearOriginFlag: (in category 'loading') ----- + openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil + withProjectView: existingView clearOriginFlag: clearOriginFlag + "Reconstitute a Morph from the selected file, presumed to + represent a Morph saved via the SmartRefStream mechanism, and open it + in an appropriate Morphic world." + + | morphOrList archive mgr substituteFont numberOfFontSubstitutes resultArray anObject project manifests dict | + (self checkStream: preStream) ifTrue: [^ self]. + ProgressNotification signal: '0.2'. + archive _ preStream isZipArchive + ifTrue:[ZipArchive new readFrom: preStream] + ifFalse:[nil]. + archive ifNotNil:[ + manifests _ (archive membersMatching: '*manifest'). + (manifests size = 1 and: [((dict _ self parseManifest: manifests first contents) at: 'Project-Format' ifAbsent: []) = 'S-Expression']) + ifTrue: [ + ^ (self respondsTo: #openSexpProjectDict:stream:fromDirectory:withProjectView:) + ifTrue: [self openSexpProjectDict: dict stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView] + ifFalse: [self inform: 'Cannot load S-Expression format projects without Etoys' translated]]]. + + morphOrList _ self morphOrList: aFileName stream: preStream fromDirectory: aDirectoryOrNil archive: archive. + morphOrList ifNil: [^ self]. + ProgressNotification signal: '0.4'. + resultArray _ self fileInName: aFileName archive: archive morphOrList: morphOrList. + anObject _ resultArray first. + numberOfFontSubstitutes _ resultArray second. + substituteFont _ resultArray third. + mgr _ resultArray fourth. + preStream close. + ProgressNotification signal: '0.7'. + "the hard part is over" + (anObject isKindOf: ImageSegment) ifTrue: [ + project _ self loadImageSegment: anObject + fromDirectory: aDirectoryOrNil + withProjectView: existingView + numberOfFontSubstitutes: numberOfFontSubstitutes + substituteFont: substituteFont + mgr: mgr. + project noteManifestDetailsIn: dict. + project removeParameter: #sugarProperties. + Smalltalk at: #SugarPropertiesNotification ifPresent: [:sp | + sp signal ifNotNilDo: [:props | + project keepSugarProperties: props monitor: true]]. + clearOriginFlag ifTrue: [project forgetExistingURL]. + ProgressNotification signal: '0.8'. + ^ project + ifNil: [self inform: 'No project found in this file' translated] + ifNotNil: [ProjectEntryNotification signal: project]]. + Project current openViewAndEnter: anObject! Item was added: + ----- Method: ProjectLoading class>>parseManifest: (in category 'utilities') ----- + parseManifest: aString + + | dict line index key value aStream | + aStream := aString readStream. + dict := Dictionary new. + [(line := aStream nextLine) notNil] whileTrue: [ + index := line indexOf: $:. + index > 0 ifTrue: [ + key := line copyFrom: 1 to: index - 1. + value := (line copyFrom: index + 1 to: line size) withBlanksTrimmed. + dict at: key put: value. + ]. + ]. + ^ dict.! Item was changed: ----- Method: ProjectLoading class>>projectStreamFromArchive: (in category 'accessing') ----- projectStreamFromArchive: archive | ext prFiles entry unzipped | ext := FileDirectory dot, Project projectExtension. prFiles := archive members select:[:any| any fileName endsWith: ext]. + prFiles isEmpty ifTrue: + [ext := FileDirectory dot, 'sexp'. + prFiles := archive members select:[:any| any fileName endsWith: ext]]. + prFiles isEmpty ifTrue: ['']. - prFiles isEmpty ifTrue:[^'']. entry := prFiles first. + unzipped := MultiByteBinaryOrTextStream on: (ByteArray new: entry uncompressedSize). - unzipped := RWBinaryOrTextStream on: (ByteArray new: entry uncompressedSize). entry extractTo: unzipped. ^unzipped reset! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SqueakTheme class>>addSyntaxHighlighting: (in category 'instance creation') ----- addSyntaxHighlighting: theme + "This was the former sub-dued highlighting." - "This was the former sub-dued highlighting. - self create apply. - " theme + set: #color for: #TextAction to: (Color r: 0.4 g: 0.0 b: 1); - set: #color for: #TextAction to: Color aqua; set: #default for: #SHTextStylerST80 to: {Color black}; set: #invalid for: #SHTextStylerST80 to: {Color red}; set: #excessCode for: #SHTextStylerST80 to: {Color red}; set: #comment for: #SHTextStylerST80 to: {Color cyan muchDarker}; set: #unfinishedComment for: #SHTextStylerST80 to: {Color red muchDarker. TextEmphasis italic}; set: #'$' for: #SHTextStylerST80 to: {Color red muchDarker}; set: #character for: #SHTextStylerST80 to: {Color red muchDarker}; set: #integer for: #SHTextStylerST80 to: {Color red muchDarker}; set: #number for: #SHTextStylerST80 to: {Color red muchDarker}; set: #- for: #SHTextStylerST80 to: {Color red muchDarker}; set: #symbol for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #stringSymbol for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #literalArray for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #string for: #SHTextStylerST80 to: {Color magenta muchDarker. TextEmphasis normal}; set: #unfinishedString for: #SHTextStylerST80 to: {Color red. TextEmphasis normal}; set: #assignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #literal for: #SHTextStylerST80 to: {nil. TextEmphasis italic}; set: #keyword for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #binary for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #unary for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #incompleteKeyword for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #incompleteBinary for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {Color gray muchDarker. TextEmphasis underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {Color red}; set: #undefinedBinary for: #SHTextStylerST80 to: {Color red}; set: #undefinedUnary for: #SHTextStylerST80 to: {Color red}; set: #patternKeyword for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternBinary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #patternUnary for: #SHTextStylerST80 to: {nil. TextEmphasis bold}; set: #self for: #SHTextStylerST80 to: {Color red muchDarker}; set: #super for: #SHTextStylerST80 to: {Color red muchDarker}; set: #true for: #SHTextStylerST80 to: {Color red muchDarker}; set: #false for: #SHTextStylerST80 to: {Color red muchDarker}; set: #nil for: #SHTextStylerST80 to: {Color red muchDarker}; set: #thisContext for: #SHTextStylerST80 to: {Color red muchDarker}; set: #return for: #SHTextStylerST80 to: {Color red muchDarker}; set: #patternArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #methodArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockPatternArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockArg for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #argument for: #SHTextStylerST80 to: {Color blue muchDarker}; set: #blockArgColon for: #SHTextStylerST80 to: {Color black}; set: #leftParenthesis for: #SHTextStylerST80 to: {Color black}; set: #rightParenthesis for: #SHTextStylerST80 to: {Color black}; set: #leftParenthesis1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #rightParenthesis1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #leftParenthesis2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #rightParenthesis2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #leftParenthesis3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #rightParenthesis3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #leftParenthesis4 for: #SHTextStylerST80 to: {Color green darker}; set: #rightParenthesis4 for: #SHTextStylerST80 to: {Color green darker}; set: #leftParenthesis5 for: #SHTextStylerST80 to: {Color orange darker}; set: #rightParenthesis5 for: #SHTextStylerST80 to: {Color orange darker}; set: #leftParenthesis6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #rightParenthesis6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #leftParenthesis7 for: #SHTextStylerST80 to: {Color blue}; set: #rightParenthesis7 for: #SHTextStylerST80 to: {Color blue}; set: #blockStart for: #SHTextStylerST80 to: {Color black}; set: #blockEnd for: #SHTextStylerST80 to: {Color black}; set: #blockStart1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #blockEnd1 for: #SHTextStylerST80 to: {Color green muchDarker}; set: #blockStart2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #blockEnd2 for: #SHTextStylerST80 to: {Color magenta muchDarker}; set: #blockStart3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #blockEnd3 for: #SHTextStylerST80 to: {Color red muchDarker}; set: #blockStart4 for: #SHTextStylerST80 to: {Color green darker}; set: #blockEnd4 for: #SHTextStylerST80 to: {Color green darker}; set: #blockStart5 for: #SHTextStylerST80 to: {Color orange darker}; set: #blockEnd5 for: #SHTextStylerST80 to: {Color orange darker}; set: #blockStart6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #blockEnd6 for: #SHTextStylerST80 to: {Color magenta darker}; set: #blockStart7 for: #SHTextStylerST80 to: {Color blue}; set: #blockEnd7 for: #SHTextStylerST80 to: {Color blue}; set: #arrayStart for: #SHTextStylerST80 to: {Color black}; set: #arrayEnd for: #SHTextStylerST80 to: {Color black}; set: #arrayStart1 for: #SHTextStylerST80 to: {Color black}; set: #arrayEnd1 for: #SHTextStylerST80 to: {Color black}; set: #byteArrayStart for: #SHTextStylerST80 to: {Color black}; set: #byteArrayEnd for: #SHTextStylerST80 to: {Color black}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {Color black}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {Color black}; set: #leftBrace for: #SHTextStylerST80 to: {Color black}; set: #rightBrace for: #SHTextStylerST80 to: {Color black}; set: #cascadeSeparator for: #SHTextStylerST80 to: {Color black}; set: #statementSeparator for: #SHTextStylerST80 to: {Color black}; set: #externalCallType for: #SHTextStylerST80 to: {Color black}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {Color black}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {Color black}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {Color black}; set: #methodTempBar for: #SHTextStylerST80 to: {Color gray}; set: #blockTempBar for: #SHTextStylerST80 to: {Color gray}; set: #blockArgsBar for: #SHTextStylerST80 to: {Color gray}; set: #primitive for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #module for: #SHTextStylerST80 to: {Color green muchDarker. TextEmphasis bold}; set: #blockTempVar for: #SHTextStylerST80 to: {Color gray}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {Color gray}; set: #instVar for: #SHTextStylerST80 to: {Color black}; set: #workspaceVar for: #SHTextStylerST80 to: {Color black}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {Color red}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {Color gray darker. {TextEmphasis italic. TextEmphasis underlined}}; set: #tempVar for: #SHTextStylerST80 to: {Color gray darker}; set: #patternTempVar for: #SHTextStylerST80 to: {Color gray darker}; set: #poolConstant for: #SHTextStylerST80 to: {Color gray muchDarker}; set: #classVar for: #SHTextStylerST80 to: {Color gray muchDarker}; set: #globalVar for: #SHTextStylerST80 to: {Color black}. "And the text differ" theme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor red }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor blue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 09:21:25 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:21:36 2016 Subject: [squeak-dev] The Trunk: System-tfel.880.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.880.mcz ==================== Summary ==================== Name: System-tfel.880 Author: tfel Time: 10 August 2016, 3:25:06.212665 pm UUID: 8363ffbe-86d8-a54f-811e-07a91aeb6a61 Ancestors: System-tfel.879 Import Etoys and SISS independent bits for storing and loading images also from sexps from the Squeakland release. Mostly this just refactors the Project loading code into multiple different methods, but it also puts the junctions in there to save and load SISS SExpressions rather than image segments, if SISS and Etoys are loaded =============== Diff against System-cmm.876 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- localeChangedGently + SystemNavigation default allBehaviorsDo: [:b | b == self ifFalse: [b localeChangedGently]].! - self class environment allBehaviorsDo: [:b | b localeChangedGently].! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName "try to translate with small footprint: if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. if InternalTranslator isn't available, then actually load MO and use it" | translator | translator := self availableForLocaleID: localeID. + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. (translator isDomainLoaded: aDomainName) ifFalse: [ (InternalTranslator availableLanguageLocaleIDs includes: localeID) ifTrue: [translator := InternalTranslator localeID: localeID]. ]. ^translator translate: aString inDomain: aDomainName! Item was added: + ----- Method: Object>>translatedNoop (in category '*System-Localization-locales') ----- + translatedNoop + "This is correspondence gettext_noop() in gettext." + ^ self + ! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was removed: - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- - alwaysShowConnectionVocabulary - ^ self - valueOfFlag: #alwaysShowConnectionVocabulary - ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was removed: - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- - useSmartLabels - ^ self - valueOfFlag: #useSmartLabels - ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was added: + ----- Method: Project class>>publishInSexp (in category 'preferences') ----- + publishInSexp + + Smalltalk at: #SISSDictionaryForScanning ifPresent: [:siss | ^ siss publishInSexp]. + ^ false + ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := (Smalltalk at: #SugarLauncher ifPresent: [:c | + c current parameterAt: 'SQUEAKLETS' ifAbsent: []]) ifNil: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was added: + ----- Method: Project>>acceptProjectDetails: (in category 'file in/out') ----- + acceptProjectDetails: details + "Store project details back into a property of the world, and if a name is provided, make sure the name is properly installed in the project." + + world setProperty: #ProjectDetails toValue: details. + details at: 'projectname' ifPresent: [ :newName | + self renameTo: newName]! Item was added: + ----- Method: Project>>compressFilesIn:to:in: (in category 'file in/out') ----- + compressFilesIn: tempDir to: localName in: localDirectory + "Compress all the files in tempDir making up a zip file in localDirectory named localName" + + | archive archiveName entry fileNames | + archive := ZipArchive new. + fileNames := tempDir fileNames. + (fileNames includes: 'manifest') + ifTrue: [fileNames := #('manifest'), (fileNames copyWithout: 'manifest')]. + fileNames do:[:fn| + archiveName := fn. + entry := archive addFile: (tempDir fullNameFor: fn) as: archiveName. + entry desiredCompressionMethod: ( + fn = 'manifest' + ifTrue: [ZipArchive compressionLevelNone] + ifFalse: [ZipArchive compressionDeflated]). + ]. + archive writeToFileNamed: (localDirectory fullNameFor: localName). + archive close. + tempDir fileNames do:[:fn| + tempDir deleteFileNamed: fn ifAbsent:[]]. + localDirectory deleteDirectory: tempDir localName.! Item was added: + ----- Method: Project>>createViewIfAppropriate (in category 'utilities') ----- + createViewIfAppropriate + "overridden in subclasses" + ^ self! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>exportSegmentFileName:directory: (in category 'file in/out') ----- exportSegmentFileName: aFileName directory: aDirectory + ^ self exportSegmentFileName: aFileName directory: aDirectory withoutInteraction: false! - | exportChangeSet | - - "An experimental version to fileout a changeSet first so that a project can contain its own classes" - - "Store my project out on the disk as an *exported* ImageSegment. Put all outPointers in a form that can be resolved in the target image. Name it .extSeg. - Player classes are included automatically." - - exportChangeSet := nil. - (changeSet notNil and: [changeSet isEmpty not]) ifTrue: [ - (self confirm: - 'Would you like to include all the changes in the change set - as part of this publishing operation?' translated) ifTrue: [ - exportChangeSet := changeSet - ]. - ]. - ^ self - exportSegmentWithChangeSet: exportChangeSet - fileName: aFileName - directory: aDirectory - ! Item was added: + ----- Method: Project>>exportSegmentFileName:directory:withoutInteraction: (in category 'file in/out') ----- + exportSegmentFileName: aFileName directory: aDirectory withoutInteraction: noInteraction + + | exportChangeSet | + + "An experimental version to fileout a changeSet first so that a project can contain its own classes" + + "Store my project out on the disk as an *exported* ImageSegment. Put all outPointers in a form that can be resolved in the target image. Name it .extSeg. + Player classes are included automatically." + exportChangeSet := nil. + (changeSet notNil and: [changeSet isEmpty not]) ifTrue: [ + (noInteraction or: [self confirm: + 'Would you like to include all the changes in the change set + as part of this publishing operation?' translated]) ifTrue: [ + exportChangeSet := changeSet + ]. + ]. + + Project publishInSexp ifTrue: [ + ^ self exportSegmentInSexpWithChangeSet: exportChangeSet fileName: aFileName directory: aDirectory withoutInteraction: noInteraction + ]. + ^ self + exportSegmentWithChangeSet: exportChangeSet + fileName: aFileName + directory: aDirectory + withoutInteraction: noInteraction + ! Item was added: + ----- Method: Project>>exportSegmentInSexpWithChangeSet:fileName:directory:withoutInteraction: (in category 'file in/out') ----- + exportSegmentInSexpWithChangeSet: aChangeSetOrNil fileName: aFileName directory: aDirectory withoutInteraction: noInteraction + + self subclassResponsibility! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was added: + ----- Method: ProjectLoading class>>checkSecurity:preStream:projStream: (in category 'utilities') ----- + checkSecurity: aFileName preStream: preStream projStream: projStream + "Answer true if passed" + | trusted enterRestricted | + trusted := SecurityManager default positionToSecureContentsOf: + projStream. + trusted ifFalse: + [enterRestricted := (preStream isTypeHTTP or: + [aFileName isNil]) + ifTrue: [Preferences securityChecksEnabled] + ifFalse: [Preferences standaloneSecurityChecksEnabled]. + enterRestricted + ifTrue: [SecurityManager default enterRestrictedMode + ifFalse: + [preStream close. + ^ false]]]. + ^ true + ! Item was added: + ----- Method: ProjectLoading class>>checkStream: (in category 'utilities') ----- + checkStream: aStream + (aStream isNil + or: [aStream size = 0]) + ifFalse: [^ false]. + ProgressNotification signal: '9999 about to enter + project'. + "the hard part is over" + self inform: 'It looks like a problem occurred while + getting this project. It may be temporary, + so you may want to try again,' translated. + ^ true! Item was added: + ----- Method: ProjectLoading class>>fileInName:archive:morphOrList: (in category 'utilities') ----- + fileInName: aFileName archive: archive morphOrList: morphOrList + | baseChangeSet substituteFont numberOfFontSubstitutes exceptions anObject mgr | + ResourceCollector current: ResourceCollector new. + baseChangeSet := ChangeSet current. + self useTempChangeSet. "named zzTemp" + "The actual reading happens here" + substituteFont := Preferences standardDefaultTextFont copy. + numberOfFontSubstitutes := 0. + exceptions := Set new. + [[anObject := morphOrList fileInObjectAndCodeForProject] + on: MissingFont do: [ :ex | + exceptions add: ex. + numberOfFontSubstitutes := numberOfFontSubstitutes + 1. + ex resume: substituteFont ]] + ensure: [ ChangeSet newChanges: baseChangeSet]. + mgr := ResourceManager new initializeFrom: ResourceCollector current. + mgr fixJISX0208Resource. + mgr registerUnloadedResources. + archive ifNotNil:[mgr preLoadFromArchive: archive cacheName: aFileName]. + ResourceCollector current: nil. + ^ {anObject. numberOfFontSubstitutes. substituteFont. mgr}! Item was added: + ----- Method: ProjectLoading class>>loadImageSegment:fromDirectory:withProjectView:numberOfFontSubstitutes:substituteFont:mgr: (in category 'loading') ----- + loadImageSegment: morphOrList fromDirectory: aDirectoryOrNil withProjectView: existingView numberOfFontSubstitutes: numberOfFontSubstitutes substituteFont: substituteFont mgr: mgr + + | proj projectsToBeDeleted ef | + Smalltalk at: #Flaps ifPresent: [:flaps | + (flaps globalFlapTabWithID: 'Navigator' translated)ifNotNil: [:f | f hideFlap]]. + proj := morphOrList arrayOfRoots + detect: [:mm | mm isKindOf: Project] + ifNone: [^ nil]. + numberOfFontSubstitutes > 0 ifTrue: [ + proj projectParameterAt: #substitutedFont put: substituteFont]. + ef := proj projectParameterAt: #eToysFont. + (ef isNil or: [ef ~= substituteFont familySizeFace]) ifTrue: [ + proj projectParameterAt: #substitutedFont put: substituteFont. + ]. + proj projectParameters at: #MultiSymbolInWrongPlace put: false. + "Yoshiki did not put MultiSymbols into outPointers in older images!!" + morphOrList arrayOfRoots do: [:obj | + obj fixUponLoad: proj seg: morphOrList "imageSegment"]. + (proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [ + morphOrList arrayOfRoots do: [:obj | (obj isKindOf: Set) ifTrue: [obj rehash]]]. + + proj resourceManager: mgr. + "proj versionFrom: preStream." + proj lastDirectory: aDirectoryOrNil. + proj setParent: Project current. + projectsToBeDeleted := OrderedCollection new. + existingView == #none ifFalse: [ + self makeExistingView: existingView project: proj projectsToBeDeleted: projectsToBeDeleted]. + ChangeSorter allChangeSets add: proj changeSet. + Project current projectParameters + at: #deleteWhenEnteringNewProject + ifPresent: [ :ignored | + projectsToBeDeleted add: Project current. + Project current removeParameter: #deleteWhenEnteringNewProject. + ]. + projectsToBeDeleted isEmpty ifFalse: [ + proj projectParameters + at: #projectsToBeDeleted + put: projectsToBeDeleted. + ]. + proj removeParameter: #eToysFont. + ^ proj! Item was added: + ----- Method: ProjectLoading class>>makeExistingView:project:projectsToBeDeleted: (in category 'utilities') ----- + makeExistingView: existingView project: proj projectsToBeDeleted: projectsToBeDeleted + existingView ifNil: [ + proj createViewIfAppropriate. + ChangeSorter allChangeSets add: proj changeSet. + Project current openProject: proj. + ] ifNotNil: [ + (existingView project isKindOf: DiskProxy) ifFalse: [ + existingView project changeSet name: + ChangeSet defaultName. + projectsToBeDeleted add: existingView project. + ]. + (existingView owner isSystemWindow) ifTrue: [ + existingView owner model: proj + ]. + existingView project: proj. + ]. + ! Item was added: + ----- Method: ProjectLoading class>>morphOrList:stream:fromDirectory:archive: (in category 'utilities') ----- + morphOrList: aFileName stream: preStream fromDirectory: aDirectoryOrNil archive: archive + "Answer morphOrList or nil if problem happened" + | projStream localDir morphOrList | + projStream := archive + ifNil: [preStream] + ifNotNil: [self projectStreamFromArchive: archive]. + (self checkSecurity: aFileName preStream: preStream projStream: projStream) + ifFalse: [^nil]. + localDir := Project squeakletDirectory. + aFileName ifNotNil: [ + (aDirectoryOrNil isNil or: [aDirectoryOrNil pathName + ~= localDir pathName]) ifTrue: [ + localDir deleteFileNamed: aFileName. + (localDir fileNamed: aFileName) binary + nextPutAll: preStream remainingContents; + close. + ]. + ]. + morphOrList := projStream asUnZippedStream. + preStream sleep. "if ftp, let the connection close" + ^ morphOrList + ! Item was changed: ----- Method: ProjectLoading class>>openName:stream:fromDirectory:withProjectView: (in category 'loading') ----- openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView - "Reconstitute a Morph from the selected file, presumed to be - represent a Morph saved via the SmartRefStream mechanism, and open it - in an appropriate Morphic world." + ^ self openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil + withProjectView: existingView clearOriginFlag: false. - | morphOrList proj trusted localDir projStream archive mgr - projectsToBeDeleted baseChangeSet enterRestricted substituteFont - numberOfFontSubstitutes exceptions | - (preStream isNil or: [preStream size = 0]) ifTrue: [ - ProgressNotification signal: '9999 about to enter - project'. "the hard part is over" - ^self inform: - 'It looks like a problem occurred while - getting this project. It may be temporary, - so you may want to try again,' translated - ]. - ProgressNotification signal: '2:fileSizeDetermined - ',preStream size printString. - preStream isZipArchive - ifTrue:[ archive := ZipArchive new readFrom: preStream. - projStream := self - projectStreamFromArchive: archive] - ifFalse:[projStream := preStream]. - trusted := SecurityManager default positionToSecureContentsOf: - projStream. - trusted ifFalse: - [enterRestricted := (preStream isTypeHTTP or: - [aFileName isNil]) - ifTrue: [Preferences securityChecksEnabled] - ifFalse: [Preferences standaloneSecurityChecksEnabled]. - enterRestricted - ifTrue: [SecurityManager default enterRestrictedMode - ifFalse: - [preStream close. - ^ self]]]. - localDir := Project squeakletDirectory. - aFileName ifNotNil: [ - (aDirectoryOrNil isNil or: [aDirectoryOrNil pathName - ~= localDir pathName]) ifTrue: [ - localDir deleteFileNamed: aFileName. - (localDir fileNamed: aFileName) binary - nextPutAll: preStream contents; - close. - ]. - ]. - morphOrList := projStream asUnZippedStream. - preStream sleep. "if ftp, let the connection close" - ProgressNotification signal: '3:unzipped'. - ResourceCollector current: ResourceCollector new. - baseChangeSet := ChangeSet current. - self useTempChangeSet. "named zzTemp" - "The actual reading happens here" - substituteFont := Preferences standardEToysFont copy. - numberOfFontSubstitutes := 0. - exceptions := Set new. - [[morphOrList := morphOrList fileInObjectAndCodeForProject] - on: MissingFont do: [ :ex | - exceptions add: ex. - numberOfFontSubstitutes := - numberOfFontSubstitutes + 1. - ex resume: substituteFont ]] - ensure: [ ChangeSet newChanges: baseChangeSet]. - mgr := ResourceManager new initializeFrom: ResourceCollector current. - mgr fixJISX0208Resource. - mgr registerUnloadedResources. - archive ifNotNil:[mgr preLoadFromArchive: archive cacheName: - aFileName]. - (preStream respondsTo: #close) ifTrue:[preStream close]. - ResourceCollector current: nil. - ProgressNotification signal: '4:filedIn'. - ProgressNotification signal: '9999 about to enter project'. - "the hard part is over" - (morphOrList isKindOf: ImageSegment) ifTrue: [ - proj := morphOrList arrayOfRoots - detect: [:mm | mm isKindOf: Project] - ifNone: [^self inform: 'No project found in - this file']. - proj projectParameters at: #substitutedFont put: ( - numberOfFontSubstitutes > 0 - ifTrue: [substituteFont] - ifFalse: [#none]). - proj projectParameters at: #MultiSymbolInWrongPlace put: false. - "Yoshiki did not put MultiSymbols into - outPointers in older images!!" - morphOrList arrayOfRoots do: [:obj | - obj fixUponLoad: proj seg: morphOrList "imageSegment"]. - (proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [ - morphOrList arrayOfRoots do: [:obj | (obj - isKindOf: HashedCollection) ifTrue: [obj rehash]]]. - - proj resourceManager: mgr. - "proj versionFrom: preStream." - proj lastDirectory: aDirectoryOrNil. - proj setParent: Project current. - projectsToBeDeleted := OrderedCollection new. - existingView ifNil: [ - ChangeSet allChangeSets add: proj changeSet. - Project current openProject: proj. - "Note: in MVC we get no further than the above" - ] ifNotNil: [ - (existingView project isKindOf: DiskProxy) ifFalse: [ - existingView project changeSet name: - ChangeSet defaultName. - projectsToBeDeleted add: existingView project. - ]. - (existingView owner isSystemWindow) ifTrue: [ - existingView owner model: proj - ]. - existingView project: proj. - ]. - ChangeSet allChangeSets add: proj changeSet. - Project current projectParameters - at: #deleteWhenEnteringNewProject - ifPresent: [ :ignored | - projectsToBeDeleted add: Project current. - Project current removeParameter: - #deleteWhenEnteringNewProject. - ]. - projectsToBeDeleted isEmpty ifFalse: [ - proj projectParameters - at: #projectsToBeDeleted - put: projectsToBeDeleted. - ]. - ^ ProjectEntryNotification signal: proj - ]. - Project current openViewAndEnter: morphOrList ! Item was added: + ----- Method: ProjectLoading class>>openName:stream:fromDirectory:withProjectView:clearOriginFlag: (in category 'loading') ----- + openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil + withProjectView: existingView clearOriginFlag: clearOriginFlag + "Reconstitute a Morph from the selected file, presumed to + represent a Morph saved via the SmartRefStream mechanism, and open it + in an appropriate Morphic world." + + | morphOrList archive mgr substituteFont numberOfFontSubstitutes resultArray anObject project manifests dict | + (self checkStream: preStream) ifTrue: [^ self]. + ProgressNotification signal: '0.2'. + archive _ preStream isZipArchive + ifTrue:[ZipArchive new readFrom: preStream] + ifFalse:[nil]. + archive ifNotNil:[ + manifests _ (archive membersMatching: '*manifest'). + (manifests size = 1 and: [((dict _ self parseManifest: manifests first contents) at: 'Project-Format' ifAbsent: []) = 'S-Expression']) + ifTrue: [ + ^ (self respondsTo: #openSexpProjectDict:stream:fromDirectory:withProjectView:) + ifTrue: [self openSexpProjectDict: dict stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView] + ifFalse: [self inform: 'Cannot load S-Expression format projects without Etoys' translated]]]. + + morphOrList _ self morphOrList: aFileName stream: preStream fromDirectory: aDirectoryOrNil archive: archive. + morphOrList ifNil: [^ self]. + ProgressNotification signal: '0.4'. + resultArray _ self fileInName: aFileName archive: archive morphOrList: morphOrList. + anObject _ resultArray first. + numberOfFontSubstitutes _ resultArray second. + substituteFont _ resultArray third. + mgr _ resultArray fourth. + preStream close. + ProgressNotification signal: '0.7'. + "the hard part is over" + (anObject isKindOf: ImageSegment) ifTrue: [ + project _ self loadImageSegment: anObject + fromDirectory: aDirectoryOrNil + withProjectView: existingView + numberOfFontSubstitutes: numberOfFontSubstitutes + substituteFont: substituteFont + mgr: mgr. + project noteManifestDetailsIn: dict. + project removeParameter: #sugarProperties. + Smalltalk at: #SugarPropertiesNotification ifPresent: [:sp | + sp signal ifNotNilDo: [:props | + project keepSugarProperties: props monitor: true]]. + clearOriginFlag ifTrue: [project forgetExistingURL]. + ProgressNotification signal: '0.8'. + ^ project + ifNil: [self inform: 'No project found in this file' translated] + ifNotNil: [ProjectEntryNotification signal: project]]. + Project current openViewAndEnter: anObject! Item was added: + ----- Method: ProjectLoading class>>parseManifest: (in category 'utilities') ----- + parseManifest: aString + + | dict line index key value aStream | + aStream := aString readStream. + dict := Dictionary new. + [(line := aStream nextLine) notNil] whileTrue: [ + index := line indexOf: $:. + index > 0 ifTrue: [ + key := line copyFrom: 1 to: index - 1. + value := (line copyFrom: index + 1 to: line size) withBlanksTrimmed. + dict at: key put: value. + ]. + ]. + ^ dict.! Item was changed: ----- Method: ProjectLoading class>>projectStreamFromArchive: (in category 'accessing') ----- projectStreamFromArchive: archive | ext prFiles entry unzipped | ext := FileDirectory dot, Project projectExtension. prFiles := archive members select:[:any| any fileName endsWith: ext]. + prFiles isEmpty ifTrue: + [ext := FileDirectory dot, 'sexp'. + prFiles := archive members select:[:any| any fileName endsWith: ext]]. + prFiles isEmpty ifTrue: ['']. - prFiles isEmpty ifTrue:[^'']. entry := prFiles first. + unzipped := MultiByteBinaryOrTextStream on: (ByteArray new: entry uncompressedSize). - unzipped := RWBinaryOrTextStream on: (ByteArray new: entry uncompressedSize). entry extractTo: unzipped. ^unzipped reset! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 09:21:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:21:42 2016 Subject: [squeak-dev] The Trunk: System-tfel.882.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.882.mcz ==================== Summary ==================== Name: System-tfel.882 Author: tfel Time: 15 August 2016, 10:49:19.882909 am UUID: 63636ed9-4e42-d14c-a41f-ec8924e8c6e9 Ancestors: System-tfel.880, System-mt.881 - merge with trunk - update DiskProxy>>enter:revert:saveForRevert: with Squeakland code =============== Diff against System-mt.881 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: DiskProxy>>enter:revert:saveForRevert: (in category 'exceptions') ----- enter: returningFlag revert: revertFlag saveForRevert: saveForRevert "Look for our project on the server, then try to enter it!! DiskProxy is acting as a stub for the real thing. Called from a ProjectViewMorph in the current project. If have url, use it. Else look in current Project's server and folder." + constructorSelector == #namedExample: ifTrue: ["Project namedUrl: xxx" + ^ ((Smalltalk at: globalObjectName) perform: #fromExampleEtoys: + withArguments: constructorArgs) ]. constructorSelector == #namedUrl: ifTrue: ["Project namedUrl: xxx" ^ ((Smalltalk at: globalObjectName) perform: #fromUrl: withArguments: constructorArgs) ]. constructorSelector == #named: ifTrue: [ Project current fromMyServerLoad: constructorArgs first]. "name" ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was added: + ----- Method: NaturalLanguageTranslator class>>availableLanguageLocaleIDs (in category 'accessing') ----- + availableLanguageLocaleIDs + "Return the locale ids for the currently available languages. + Meaning those which either internally or externally have + translations available." + "NaturalLanguageTranslator availableLanguageLocaleIDs" + ^ self translators values collect:[:each | each localeID]! Item was changed: ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName "try to translate with small footprint: if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. if InternalTranslator isn't available, then actually load MO and use it" | translator | translator := self availableForLocaleID: localeID. + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. (translator isDomainLoaded: aDomainName) ifFalse: [ (InternalTranslator availableLanguageLocaleIDs includes: localeID) ifTrue: [translator := InternalTranslator localeID: localeID]. ]. ^translator translate: aString inDomain: aDomainName! Item was added: + ----- Method: Object>>translatedNoop (in category '*System-Localization-locales') ----- + translatedNoop + "This is correspondence gettext_noop() in gettext." + ^ self + ! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was removed: - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- - alwaysShowConnectionVocabulary - ^ self - valueOfFlag: #alwaysShowConnectionVocabulary - ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was removed: - ----- Method: Preferences class>>useButtonPropertiesToFire (in category 'standard queries') ----- - useButtonPropertiesToFire - ^ self - valueOfFlag: #useButtonProprtiesToFire - ifAbsent: [ false ]! Item was removed: - ----- Method: Preferences class>>useFormsInPaintBox (in category 'prefs - misc') ----- - useFormsInPaintBox - - ^ self valueOfFlag: #useFormsInPaintBox! Item was removed: - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- - useSmartLabels - ^ self - valueOfFlag: #useSmartLabels - ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was added: + ----- Method: Project class>>publishInSexp (in category 'preferences') ----- + publishInSexp + + Smalltalk at: #SISSDictionaryForScanning ifPresent: [:siss | ^ siss publishInSexp]. + ^ false! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := (Smalltalk at: #SugarLauncher ifPresent: [:c | + c current parameterAt: 'SQUEAKLETS' ifAbsent: []]) ifNil: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was added: + ----- Method: Project>>acceptProjectDetails: (in category 'file in/out') ----- + acceptProjectDetails: details + "Store project details back into a property of the world, and if a name is provided, make sure the name is properly installed in the project." + + world setProperty: #ProjectDetails toValue: details. + details at: 'projectname' ifPresent: [ :newName | + self renameTo: newName]! Item was added: + ----- Method: Project>>compressFilesIn:to:in: (in category 'file in/out') ----- + compressFilesIn: tempDir to: localName in: localDirectory + "Compress all the files in tempDir making up a zip file in localDirectory named localName" + + | archive archiveName entry fileNames | + archive := ZipArchive new. + fileNames := tempDir fileNames. + (fileNames includes: 'manifest') + ifTrue: [fileNames := #('manifest'), (fileNames copyWithout: 'manifest')]. + fileNames do:[:fn| + archiveName := fn. + entry := archive addFile: (tempDir fullNameFor: fn) as: archiveName. + entry desiredCompressionMethod: ( + fn = 'manifest' + ifTrue: [ZipArchive compressionLevelNone] + ifFalse: [ZipArchive compressionDeflated]). + ]. + archive writeToFileNamed: (localDirectory fullNameFor: localName). + archive close. + tempDir fileNames do:[:fn| + tempDir deleteFileNamed: fn ifAbsent:[]]. + localDirectory deleteDirectory: tempDir localName.! Item was added: + ----- Method: Project>>createViewIfAppropriate (in category 'utilities') ----- + createViewIfAppropriate + "overridden in subclasses" + ^ self! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>exportSegmentFileName:directory: (in category 'file in/out') ----- exportSegmentFileName: aFileName directory: aDirectory + ^ self exportSegmentFileName: aFileName directory: aDirectory withoutInteraction: false! - | exportChangeSet | - - "An experimental version to fileout a changeSet first so that a project can contain its own classes" - - "Store my project out on the disk as an *exported* ImageSegment. Put all outPointers in a form that can be resolved in the target image. Name it .extSeg. - Player classes are included automatically." - - exportChangeSet := nil. - (changeSet notNil and: [changeSet isEmpty not]) ifTrue: [ - (self confirm: - 'Would you like to include all the changes in the change set - as part of this publishing operation?' translated) ifTrue: [ - exportChangeSet := changeSet - ]. - ]. - ^ self - exportSegmentWithChangeSet: exportChangeSet - fileName: aFileName - directory: aDirectory - ! Item was added: + ----- Method: Project>>exportSegmentFileName:directory:withoutInteraction: (in category 'file in/out') ----- + exportSegmentFileName: aFileName directory: aDirectory withoutInteraction: noInteraction + + | exportChangeSet | + + "An experimental version to fileout a changeSet first so that a project can contain its own classes" + + "Store my project out on the disk as an *exported* ImageSegment. Put all outPointers in a form that can be resolved in the target image. Name it .extSeg. + Player classes are included automatically." + exportChangeSet := nil. + (changeSet notNil and: [changeSet isEmpty not]) ifTrue: [ + (noInteraction or: [self confirm: + 'Would you like to include all the changes in the change set + as part of this publishing operation?' translated]) ifTrue: [ + exportChangeSet := changeSet + ]. + ]. + + Project publishInSexp ifTrue: [ + ^ self exportSegmentInSexpWithChangeSet: exportChangeSet fileName: aFileName directory: aDirectory withoutInteraction: noInteraction + ]. + ^ self + exportSegmentWithChangeSet: exportChangeSet + fileName: aFileName + directory: aDirectory + withoutInteraction: noInteraction! Item was added: + ----- Method: Project>>exportSegmentInSexpWithChangeSet:fileName:directory:withoutInteraction: (in category 'file in/out') ----- + exportSegmentInSexpWithChangeSet: aChangeSetOrNil fileName: aFileName directory: aDirectory withoutInteraction: noInteraction + + self subclassResponsibility! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was added: + ----- Method: ProjectLoading class>>checkSecurity:preStream:projStream: (in category 'utilities') ----- + checkSecurity: aFileName preStream: preStream projStream: projStream + "Answer true if passed" + | trusted enterRestricted | + trusted := SecurityManager default positionToSecureContentsOf: + projStream. + trusted ifFalse: + [enterRestricted := (preStream isTypeHTTP or: + [aFileName isNil]) + ifTrue: [Preferences securityChecksEnabled] + ifFalse: [Preferences standaloneSecurityChecksEnabled]. + enterRestricted + ifTrue: [SecurityManager default enterRestrictedMode + ifFalse: + [preStream close. + ^ false]]]. + ^ true! Item was added: + ----- Method: ProjectLoading class>>checkStream: (in category 'utilities') ----- + checkStream: aStream + (aStream isNil + or: [aStream size = 0]) + ifFalse: [^ false]. + ProgressNotification signal: '9999 about to enter + project'. + "the hard part is over" + self inform: 'It looks like a problem occurred while + getting this project. It may be temporary, + so you may want to try again,' translated. + ^ true! Item was added: + ----- Method: ProjectLoading class>>fileInName:archive:morphOrList: (in category 'utilities') ----- + fileInName: aFileName archive: archive morphOrList: morphOrList + | baseChangeSet substituteFont numberOfFontSubstitutes exceptions anObject mgr | + ResourceCollector current: ResourceCollector new. + baseChangeSet := ChangeSet current. + self useTempChangeSet. "named zzTemp" + "The actual reading happens here" + substituteFont := Preferences standardDefaultTextFont copy. + numberOfFontSubstitutes := 0. + exceptions := Set new. + [[anObject := morphOrList fileInObjectAndCodeForProject] + on: MissingFont do: [ :ex | + exceptions add: ex. + numberOfFontSubstitutes := numberOfFontSubstitutes + 1. + ex resume: substituteFont ]] + ensure: [ ChangeSet newChanges: baseChangeSet]. + mgr := ResourceManager new initializeFrom: ResourceCollector current. + mgr fixJISX0208Resource. + mgr registerUnloadedResources. + archive ifNotNil:[mgr preLoadFromArchive: archive cacheName: aFileName]. + ResourceCollector current: nil. + ^ {anObject. numberOfFontSubstitutes. substituteFont. mgr}! Item was added: + ----- Method: ProjectLoading class>>loadImageSegment:fromDirectory:withProjectView:numberOfFontSubstitutes:substituteFont:mgr: (in category 'loading') ----- + loadImageSegment: morphOrList fromDirectory: aDirectoryOrNil withProjectView: existingView numberOfFontSubstitutes: numberOfFontSubstitutes substituteFont: substituteFont mgr: mgr + + | proj projectsToBeDeleted ef | + Smalltalk at: #Flaps ifPresent: [:flaps | + (flaps globalFlapTabWithID: 'Navigator' translated)ifNotNil: [:f | f hideFlap]]. + proj := morphOrList arrayOfRoots + detect: [:mm | mm isKindOf: Project] + ifNone: [^ nil]. + numberOfFontSubstitutes > 0 ifTrue: [ + proj projectParameterAt: #substitutedFont put: substituteFont]. + ef := proj projectParameterAt: #eToysFont. + (ef isNil or: [ef ~= substituteFont familySizeFace]) ifTrue: [ + proj projectParameterAt: #substitutedFont put: substituteFont. + ]. + proj projectParameters at: #MultiSymbolInWrongPlace put: false. + "Yoshiki did not put MultiSymbols into outPointers in older images!!" + morphOrList arrayOfRoots do: [:obj | + obj fixUponLoad: proj seg: morphOrList "imageSegment"]. + (proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [ + morphOrList arrayOfRoots do: [:obj | (obj isKindOf: Set) ifTrue: [obj rehash]]]. + + proj resourceManager: mgr. + "proj versionFrom: preStream." + proj lastDirectory: aDirectoryOrNil. + proj setParent: Project current. + projectsToBeDeleted := OrderedCollection new. + existingView == #none ifFalse: [ + self makeExistingView: existingView project: proj projectsToBeDeleted: projectsToBeDeleted]. + ChangeSorter allChangeSets add: proj changeSet. + Project current projectParameters + at: #deleteWhenEnteringNewProject + ifPresent: [ :ignored | + projectsToBeDeleted add: Project current. + Project current removeParameter: #deleteWhenEnteringNewProject. + ]. + projectsToBeDeleted isEmpty ifFalse: [ + proj projectParameters + at: #projectsToBeDeleted + put: projectsToBeDeleted. + ]. + proj removeParameter: #eToysFont. + ^ proj! Item was added: + ----- Method: ProjectLoading class>>makeExistingView:project:projectsToBeDeleted: (in category 'utilities') ----- + makeExistingView: existingView project: proj projectsToBeDeleted: projectsToBeDeleted + existingView ifNil: [ + proj createViewIfAppropriate. + ChangeSorter allChangeSets add: proj changeSet. + Project current openProject: proj. + ] ifNotNil: [ + (existingView project isKindOf: DiskProxy) ifFalse: [ + existingView project changeSet name: + ChangeSet defaultName. + projectsToBeDeleted add: existingView project. + ]. + (existingView owner isSystemWindow) ifTrue: [ + existingView owner model: proj + ]. + existingView project: proj. + ].! Item was added: + ----- Method: ProjectLoading class>>morphOrList:stream:fromDirectory:archive: (in category 'utilities') ----- + morphOrList: aFileName stream: preStream fromDirectory: aDirectoryOrNil archive: archive + "Answer morphOrList or nil if problem happened" + | projStream localDir morphOrList | + projStream := archive + ifNil: [preStream] + ifNotNil: [self projectStreamFromArchive: archive]. + (self checkSecurity: aFileName preStream: preStream projStream: projStream) + ifFalse: [^nil]. + localDir := Project squeakletDirectory. + aFileName ifNotNil: [ + (aDirectoryOrNil isNil or: [aDirectoryOrNil pathName + ~= localDir pathName]) ifTrue: [ + localDir deleteFileNamed: aFileName. + (localDir fileNamed: aFileName) binary + nextPutAll: preStream remainingContents; + close. + ]. + ]. + morphOrList := projStream asUnZippedStream. + preStream sleep. "if ftp, let the connection close" + ^ morphOrList! Item was changed: ----- Method: ProjectLoading class>>openName:stream:fromDirectory:withProjectView: (in category 'loading') ----- openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView - "Reconstitute a Morph from the selected file, presumed to be - represent a Morph saved via the SmartRefStream mechanism, and open it - in an appropriate Morphic world." + ^ self openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil + withProjectView: existingView clearOriginFlag: false.! - | morphOrList proj trusted localDir projStream archive mgr - projectsToBeDeleted baseChangeSet enterRestricted substituteFont - numberOfFontSubstitutes exceptions | - (preStream isNil or: [preStream size = 0]) ifTrue: [ - ProgressNotification signal: '9999 about to enter - project'. "the hard part is over" - ^self inform: - 'It looks like a problem occurred while - getting this project. It may be temporary, - so you may want to try again,' translated - ]. - ProgressNotification signal: '2:fileSizeDetermined - ',preStream size printString. - preStream isZipArchive - ifTrue:[ archive := ZipArchive new readFrom: preStream. - projStream := self - projectStreamFromArchive: archive] - ifFalse:[projStream := preStream]. - trusted := SecurityManager default positionToSecureContentsOf: - projStream. - trusted ifFalse: - [enterRestricted := (preStream isTypeHTTP or: - [aFileName isNil]) - ifTrue: [Preferences securityChecksEnabled] - ifFalse: [Preferences standaloneSecurityChecksEnabled]. - enterRestricted - ifTrue: [SecurityManager default enterRestrictedMode - ifFalse: - [preStream close. - ^ self]]]. - - localDir := Project squeakletDirectory. - aFileName ifNotNil: [ - (aDirectoryOrNil isNil or: [aDirectoryOrNil pathName - ~= localDir pathName]) ifTrue: [ - localDir deleteFileNamed: aFileName. - (localDir fileNamed: aFileName) binary - nextPutAll: preStream contents; - close. - ]. - ]. - morphOrList := projStream asUnZippedStream. - preStream sleep. "if ftp, let the connection close" - ProgressNotification signal: '3:unzipped'. - ResourceCollector current: ResourceCollector new. - baseChangeSet := ChangeSet current. - self useTempChangeSet. "named zzTemp" - "The actual reading happens here" - substituteFont := Preferences standardEToysFont copy. - numberOfFontSubstitutes := 0. - exceptions := Set new. - [[morphOrList := morphOrList fileInObjectAndCodeForProject] - on: MissingFont do: [ :ex | - exceptions add: ex. - numberOfFontSubstitutes := - numberOfFontSubstitutes + 1. - ex resume: substituteFont ]] - ensure: [ ChangeSet newChanges: baseChangeSet]. - mgr := ResourceManager new initializeFrom: ResourceCollector current. - mgr fixJISX0208Resource. - mgr registerUnloadedResources. - archive ifNotNil:[mgr preLoadFromArchive: archive cacheName: - aFileName]. - (preStream respondsTo: #close) ifTrue:[preStream close]. - ResourceCollector current: nil. - ProgressNotification signal: '4:filedIn'. - ProgressNotification signal: '9999 about to enter project'. - "the hard part is over" - (morphOrList isKindOf: ImageSegment) ifTrue: [ - proj := morphOrList arrayOfRoots - detect: [:mm | mm isKindOf: Project] - ifNone: [^self inform: 'No project found in - this file']. - proj projectParameters at: #substitutedFont put: ( - numberOfFontSubstitutes > 0 - ifTrue: [substituteFont] - ifFalse: [#none]). - proj projectParameters at: #MultiSymbolInWrongPlace put: false. - "Yoshiki did not put MultiSymbols into - outPointers in older images!!" - morphOrList arrayOfRoots do: [:obj | - obj fixUponLoad: proj seg: morphOrList "imageSegment"]. - (proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [ - morphOrList arrayOfRoots do: [:obj | (obj - isKindOf: HashedCollection) ifTrue: [obj rehash]]]. - - proj resourceManager: mgr. - "proj versionFrom: preStream." - proj lastDirectory: aDirectoryOrNil. - proj setParent: Project current. - projectsToBeDeleted := OrderedCollection new. - existingView ifNil: [ - ChangeSet allChangeSets add: proj changeSet. - Project current openProject: proj. - "Note: in MVC we get no further than the above" - ] ifNotNil: [ - (existingView project isKindOf: DiskProxy) ifFalse: [ - existingView project changeSet name: - ChangeSet defaultName. - projectsToBeDeleted add: existingView project. - ]. - (existingView owner isSystemWindow) ifTrue: [ - existingView owner model: proj - ]. - existingView project: proj. - ]. - ChangeSet allChangeSets add: proj changeSet. - Project current projectParameters - at: #deleteWhenEnteringNewProject - ifPresent: [ :ignored | - projectsToBeDeleted add: Project current. - Project current removeParameter: - #deleteWhenEnteringNewProject. - ]. - projectsToBeDeleted isEmpty ifFalse: [ - proj projectParameters - at: #projectsToBeDeleted - put: projectsToBeDeleted. - ]. - ^ ProjectEntryNotification signal: proj - ]. - Project current openViewAndEnter: morphOrList - ! Item was added: + ----- Method: ProjectLoading class>>openName:stream:fromDirectory:withProjectView:clearOriginFlag: (in category 'loading') ----- + openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil + withProjectView: existingView clearOriginFlag: clearOriginFlag + "Reconstitute a Morph from the selected file, presumed to + represent a Morph saved via the SmartRefStream mechanism, and open it + in an appropriate Morphic world." + + | morphOrList archive mgr substituteFont numberOfFontSubstitutes resultArray anObject project manifests dict | + (self checkStream: preStream) ifTrue: [^ self]. + ProgressNotification signal: '0.2'. + archive _ preStream isZipArchive + ifTrue:[ZipArchive new readFrom: preStream] + ifFalse:[nil]. + archive ifNotNil:[ + manifests _ (archive membersMatching: '*manifest'). + (manifests size = 1 and: [((dict _ self parseManifest: manifests first contents) at: 'Project-Format' ifAbsent: []) = 'S-Expression']) + ifTrue: [ + ^ (self respondsTo: #openSexpProjectDict:stream:fromDirectory:withProjectView:) + ifTrue: [self openSexpProjectDict: dict stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView] + ifFalse: [self inform: 'Cannot load S-Expression format projects without Etoys' translated]]]. + + morphOrList _ self morphOrList: aFileName stream: preStream fromDirectory: aDirectoryOrNil archive: archive. + morphOrList ifNil: [^ self]. + ProgressNotification signal: '0.4'. + resultArray _ self fileInName: aFileName archive: archive morphOrList: morphOrList. + anObject _ resultArray first. + numberOfFontSubstitutes _ resultArray second. + substituteFont _ resultArray third. + mgr _ resultArray fourth. + preStream close. + ProgressNotification signal: '0.7'. + "the hard part is over" + (anObject isKindOf: ImageSegment) ifTrue: [ + project _ self loadImageSegment: anObject + fromDirectory: aDirectoryOrNil + withProjectView: existingView + numberOfFontSubstitutes: numberOfFontSubstitutes + substituteFont: substituteFont + mgr: mgr. + project noteManifestDetailsIn: dict. + project removeParameter: #sugarProperties. + Smalltalk at: #SugarPropertiesNotification ifPresent: [:sp | + sp signal ifNotNilDo: [:props | + project keepSugarProperties: props monitor: true]]. + clearOriginFlag ifTrue: [project forgetExistingURL]. + ProgressNotification signal: '0.8'. + ^ project + ifNil: [self inform: 'No project found in this file' translated] + ifNotNil: [ProjectEntryNotification signal: project]]. + Project current openViewAndEnter: anObject! Item was added: + ----- Method: ProjectLoading class>>parseManifest: (in category 'utilities') ----- + parseManifest: aString + + | dict line index key value aStream | + aStream := aString readStream. + dict := Dictionary new. + [(line := aStream nextLine) notNil] whileTrue: [ + index := line indexOf: $:. + index > 0 ifTrue: [ + key := line copyFrom: 1 to: index - 1. + value := (line copyFrom: index + 1 to: line size) withBlanksTrimmed. + dict at: key put: value. + ]. + ]. + ^ dict.! Item was changed: ----- Method: ProjectLoading class>>projectStreamFromArchive: (in category 'accessing') ----- projectStreamFromArchive: archive | ext prFiles entry unzipped | ext := FileDirectory dot, Project projectExtension. prFiles := archive members select:[:any| any fileName endsWith: ext]. + prFiles isEmpty ifTrue: + [ext := FileDirectory dot, 'sexp'. + prFiles := archive members select:[:any| any fileName endsWith: ext]]. + prFiles isEmpty ifTrue: ['']. - prFiles isEmpty ifTrue:[^'']. entry := prFiles first. + unzipped := MultiByteBinaryOrTextStream on: (ByteArray new: entry uncompressedSize). - unzipped := RWBinaryOrTextStream on: (ByteArray new: entry uncompressedSize). entry extractTo: unzipped. ^unzipped reset! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 09:21:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:21:54 2016 Subject: [squeak-dev] The Trunk: System-tfel.879.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.879.mcz ==================== Summary ==================== Name: System-tfel.879 Author: tfel Time: 10 August 2016, 10:41:58.514848 am UUID: 626dfc61-8ec1-9f40-84ad-112abc56d755 Ancestors: System-tfel.878 remove direct reference to Etoys =============== Diff against System-cmm.876 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- localeChangedGently + SystemNavigation default allBehaviorsDo: [:b | b == self ifFalse: [b localeChangedGently]].! - self class environment allBehaviorsDo: [:b | b localeChangedGently].! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName "try to translate with small footprint: if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. if InternalTranslator isn't available, then actually load MO and use it" | translator | translator := self availableForLocaleID: localeID. + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. (translator isDomainLoaded: aDomainName) ifFalse: [ (InternalTranslator availableLanguageLocaleIDs includes: localeID) ifTrue: [translator := InternalTranslator localeID: localeID]. ]. ^translator translate: aString inDomain: aDomainName! Item was added: + ----- Method: Object>>translatedNoop (in category '*System-Localization-locales') ----- + translatedNoop + "This is correspondence gettext_noop() in gettext." + ^ self + ! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was removed: - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- - alwaysShowConnectionVocabulary - ^ self - valueOfFlag: #alwaysShowConnectionVocabulary - ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was removed: - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- - useSmartLabels - ^ self - valueOfFlag: #useSmartLabels - ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := (Smalltalk at: #SugarLauncher ifPresent: [:c | + c current parameterAt: 'SQUEAKLETS' ifAbsent: []]) ifNil: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 09:21:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:22:06 2016 Subject: [squeak-dev] The Trunk: System-tfel.878.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.878.mcz ==================== Summary ==================== Name: System-tfel.878 Author: tfel Time: 10 August 2016, 9:51:41.662314 am UUID: 70c58675-7950-f044-892b-4195c4eb4dd6 Ancestors: System-tfel.877 add Object>>translatedNoop as catch-all for localization =============== Diff against System-cmm.876 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- localeChangedGently + SystemNavigation default allBehaviorsDo: [:b | b == self ifFalse: [b localeChangedGently]].! - self class environment allBehaviorsDo: [:b | b localeChangedGently].! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName "try to translate with small footprint: if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. if InternalTranslator isn't available, then actually load MO and use it" | translator | translator := self availableForLocaleID: localeID. + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. (translator isDomainLoaded: aDomainName) ifFalse: [ (InternalTranslator availableLanguageLocaleIDs includes: localeID) ifTrue: [translator := InternalTranslator localeID: localeID]. ]. ^translator translate: aString inDomain: aDomainName! Item was added: + ----- Method: Object>>translatedNoop (in category '*System-Localization-locales') ----- + translatedNoop + "This is correspondence gettext_noop() in gettext." + ^ self + ! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was removed: - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- - alwaysShowConnectionVocabulary - ^ self - valueOfFlag: #alwaysShowConnectionVocabulary - ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was removed: - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- - useSmartLabels - ^ self - valueOfFlag: #useSmartLabels - ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := SugarLauncher current + parameterAt: 'SQUEAKLETS' + ifAbsent: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 09:35:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:35:35 2016 Subject: [squeak-dev] The Trunk: System-tfel.877.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.877.mcz ==================== Summary ==================== Name: System-tfel.877 Author: tfel Time: 10 August 2016, 9:45:24.363314 am UUID: 97848dfb-1a63-7148-96dd-6944014677c6 Ancestors: System-cmm.876, System-tfel.873 merge with trunk =============== Diff against System-cmm.876 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- localeChangedGently + SystemNavigation default allBehaviorsDo: [:b | b == self ifFalse: [b localeChangedGently]].! - self class environment allBehaviorsDo: [:b | b localeChangedGently].! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName "try to translate with small footprint: if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. if InternalTranslator isn't available, then actually load MO and use it" | translator | translator := self availableForLocaleID: localeID. + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. (translator isDomainLoaded: aDomainName) ifFalse: [ (InternalTranslator availableLanguageLocaleIDs includes: localeID) ifTrue: [translator := InternalTranslator localeID: localeID]. ]. ^translator translate: aString inDomain: aDomainName! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was removed: - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- - alwaysShowConnectionVocabulary - ^ self - valueOfFlag: #alwaysShowConnectionVocabulary - ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was removed: - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- - useSmartLabels - ^ self - valueOfFlag: #useSmartLabels - ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := SugarLauncher current + parameterAt: 'SQUEAKLETS' + ifAbsent: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 09:36:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:36:13 2016 Subject: [squeak-dev] The Trunk: System-tfel.873.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.873.mcz ==================== Summary ==================== Name: System-tfel.873 Author: tfel Time: 8 August 2016, 4:43:15.739129 pm UUID: 58178fcf-779d-ca40-9e8f-a1691a345b98 Ancestors: System-tfel.872 Fix an infinite loop when the locale is changed during startup =============== Diff against System-mt.870 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: Locale class>>localeChangedGently (in category 'notification') ----- localeChangedGently + SystemNavigation default allBehaviorsDo: [:b | b == self ifFalse: [b localeChangedGently]].! - self class environment allBehaviorsDo: [:b | b localeChangedGently].! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName "try to translate with small footprint: if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. if InternalTranslator isn't available, then actually load MO and use it" | translator | translator := self availableForLocaleID: localeID. + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. (translator isDomainLoaded: aDomainName) ifFalse: [ (InternalTranslator availableLanguageLocaleIDs includes: localeID) ifTrue: [translator := InternalTranslator localeID: localeID]. ]. ^translator translate: aString inDomain: aDomainName! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was removed: - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- - alwaysShowConnectionVocabulary - ^ self - valueOfFlag: #alwaysShowConnectionVocabulary - ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was removed: - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- - useSmartLabels - ^ self - valueOfFlag: #useSmartLabels - ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := SugarLauncher current + parameterAt: 'SQUEAKLETS' + ifAbsent: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 09:36:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:36:37 2016 Subject: [squeak-dev] The Trunk: System-tfel.872.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.872.mcz ==================== Summary ==================== Name: System-tfel.872 Author: tfel Time: 6 August 2016, 1:52:05.699519 pm UUID: 488c4f3a-c6f2-4f08-92ce-136da38c76ac Ancestors: System-tfel.871 don't error when there are no translations available =============== Diff against System-mt.870 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName "try to translate with small footprint: if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. if InternalTranslator isn't available, then actually load MO and use it" | translator | translator := self availableForLocaleID: localeID. + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. (translator isDomainLoaded: aDomainName) ifFalse: [ (InternalTranslator availableLanguageLocaleIDs includes: localeID) ifTrue: [translator := InternalTranslator localeID: localeID]. ]. ^translator translate: aString inDomain: aDomainName! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was removed: - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- - alwaysShowConnectionVocabulary - ^ self - valueOfFlag: #alwaysShowConnectionVocabulary - ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was removed: - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- - useSmartLabels - ^ self - valueOfFlag: #useSmartLabels - ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := SugarLauncher current + parameterAt: 'SQUEAKLETS' + ifAbsent: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 09:37:24 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 09:37:28 2016 Subject: [squeak-dev] The Trunk: System-tfel.871.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.871.mcz ==================== Summary ==================== Name: System-tfel.871 Author: tfel Time: 6 August 2016, 1:10:56.953657 pm UUID: 73462584-e3ec-422a-961a-fa10bf629706 Ancestors: System-mt.870, System-tfel.858 merge with trunk =============== Diff against System-mt.870 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was removed: - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- - alwaysShowConnectionVocabulary - ^ self - valueOfFlag: #alwaysShowConnectionVocabulary - ifAbsent: [false]! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was removed: - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- - useSmartLabels - ^ self - valueOfFlag: #useSmartLabels - ifAbsent: [false]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := SugarLauncher current + parameterAt: 'SQUEAKLETS' + ifAbsent: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From Das.Linux at gmx.de Wed Aug 31 09:57:07 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Aug 31 09:57:12 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: References: Message-ID: <5BCAF36D-D7BB-40F9-9BD7-222B901263BC@gmx.de> On 31.08.2016, at 11:14, Bert Freudenberg wrote: > On Wednesday, 31 August 2016, H. Hirzel wrote: > > We might consider JSON or Fuel might as well options for a format to > save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for > example). > > If someone wants to take a serious look I'd suggest Fuel. Being a replacement for ImageSegments was one of its design goals, if I remember correctly. > > - Bert - +1 Also, Max Leske always made an effort that Fuel easily loads in Squeak. best regards -Tobias From hannes.hirzel at gmail.com Wed Aug 31 10:59:57 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 11:00:00 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: <5BCAF36D-D7BB-40F9-9BD7-222B901263BC@gmx.de> References: <5BCAF36D-D7BB-40F9-9BD7-222B901263BC@gmx.de> Message-ID: https://github.com/theseion/Fuel says about Fuel - No special VM-support needed. - Can serialize/materialize not only plain objects but also classes, traits, methods, closures, contexts, packages, etc. - Very customizable: ignore certain instance variables, substitute objects by others, pre and post serialization and materialization actions, etc. - Supports class rename and class reshape. - Good test coverage (almost 600 unit tests). On 8/31/16, Tobias Pape wrote: > > On 31.08.2016, at 11:14, Bert Freudenberg wrote: > >> On Wednesday, 31 August 2016, H. Hirzel wrote: >> >> We might consider JSON or Fuel might as well options for a format to >> save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for >> example). >> >> If someone wants to take a serious look I'd suggest Fuel. Being a >> replacement for ImageSegments was one of its design goals, if I remember >> correctly. >> >> - Bert - > > +1 > > Also, Max Leske always made an effort that Fuel easily loads in Squeak. > > best regards > -Tobias > > > From edgardec2005 at gmail.com Wed Aug 31 11:05:03 2016 From: edgardec2005 at gmail.com (Edgar J. De Cleene) Date: Wed Aug 31 11:05:15 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: Message-ID: +1 JSON as is used for thousands On 8/31/16, 3:33 AM, "H. Hirzel" wrote: > Hello > > Note: > The SIXX serialisation format has been around for a long time (on > SqueakMap for 5.1) > http://www.mars.dti.ne.jp/~umejava/smalltalk/sixx/ > It has as well Pharo, Cuis and other implementations. > > We might consider JSON or Fuel might as well options for a format to > save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for > example). > > --Hannes From lists at fniephaus.com Wed Aug 31 11:08:12 2016 From: lists at fniephaus.com (Fabio Niephaus) Date: Wed Aug 31 11:08:28 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: References: <5BCAF36D-D7BB-40F9-9BD7-222B901263BC@gmx.de> Message-ID: +1 Fuel Max also runs all CI tests on different Squeak versions: https://travis-ci.org/theseion/Fuel Therefore, Fuel should be compatible to Squeak versions later than 4.4. -- On Wed, Aug 31, 2016 at 1:00 PM H. Hirzel wrote: > https://github.com/theseion/Fuel > > says about Fuel > > - No special VM-support needed. > - Can serialize/materialize not only plain objects but also classes, > traits, methods, closures, contexts, packages, etc. > - Very customizable: ignore certain instance variables, substitute > objects by others, pre and post serialization and materialization > actions, etc. > - Supports class rename and class reshape. > - Good test coverage (almost 600 unit tests). > > On 8/31/16, Tobias Pape wrote: > > > > On 31.08.2016, at 11:14, Bert Freudenberg wrote: > > > >> On Wednesday, 31 August 2016, H. Hirzel > wrote: > >> > >> We might consider JSON or Fuel might as well options for a format to > >> save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for > >> example). > >> > >> If someone wants to take a serious look I'd suggest Fuel. Being a > >> replacement for ImageSegments was one of its design goals, if I remember > >> correctly. > >> > >> - Bert - > > > > +1 > > > > Also, Max Leske always made an effort that Fuel easily loads in Squeak. > > > > best regards > > -Tobias > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/8beef34e/attachment.htm From commits at source.squeak.org Wed Aug 31 11:08:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 11:08:54 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.221.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.221.mcz ==================== Summary ==================== Name: EToys-tfel.221 Author: tfel Time: 31 August 2016, 12:54:44.683793 pm UUID: 0ce34bb0-0e85-9b42-b237-bc223dbf6403 Ancestors: EToys-tfel.220 fix parsing of parameters =============== Diff against EToys-tfel.218 =============== Item was changed: ----- Method: EtoysPresenter>>drawingJustCompleted: (in category 'misc') ----- drawingJustCompleted: aSketchMorph "The user just finished drawing. Now maybe put up a viewer" | aWorld | self flushPlayerListCache. "Because a new drawing already created one, thus obviating #assuredPlayer kicking in with its invalidation" aWorld := associatedMorph world. (aWorld hasProperty: #automaticFlapViewing) ifTrue: [^ aWorld presenter viewMorph: aSketchMorph]. + (aWorld hasProperty: #automaticViewing) - (aSketchMorph pasteUpMorph hasProperty: #automaticViewing) ifTrue: [self viewMorph: aSketchMorph]! Item was changed: ----- Method: KedamaMorph class>>additionsToViewerCategories (in category 'class initialization') ----- additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (kedama ( (command addToPatchDisplayList: 'add patch to display list' Patch) (command removeAllFromPatchDisplayList 'clear the patch display list') (slot patchDisplayList 'patches to display' String readOnly Player getPatchesList unused unused) (command addToTurtleDisplayList: 'add turtle to display list' Player) (command removeAllFromTurtleDisplayList 'clear the turtle display list') (slot turtleDisplayList 'turtles to display' String readOnly Player getTurtlesList unused unused) (slot pixelsPerPatch 'the display scale' Number readWrite Player getPixelsPerPatch Player setPixelsPerPatch:) + (slot dimensions 'the turtles in x and y direction' Point readWrite Player getDimensions Player setDimensions:) (slot color 'The color of the object' Color readWrite Player getColor Player setColor:) "(command makeTurtlesMap 'Internally create the map of turtles')" (slot leftEdgeMode 'the mode of left edge' EdgeMode readWrite Player getLeftEdgeMode Player setLeftEdgeMode:) (slot rightEdgeMode 'the mode of right edge' EdgeMode readWrite Player getRightEdgeMode Player setRightEdgeMode:) (slot topEdgeMode 'the mode of top edge' EdgeMode readWrite Player getTopEdgeMode Player setTopEdgeMode:) (slot bottomEdgeMode 'the mode of bottom edge' EdgeMode readWrite Player getBottomEdgeMode Player setBottomEdgeMode:) )) ). ! Item was added: + ----- Method: KedamaMorph class>>registerInFlapsRegistry (in category 'as yet unclassified') ----- + registerInFlapsRegistry + "Register the receiver in the system's flaps registry" + self environment + at: #Flaps + ifPresent: [:cl | + cl registerQuad: { + #KedamaMorph. #newSet. 'Particles' translatedNoop. + 'A Kedama World with pre-made components' translatedNoop} + forFlapNamed: 'Supplies']! Item was changed: ----- Method: KedamaMorph>>acceptForm: (in category 'event handling') ----- acceptForm: aForm | c xArray yArray colorArray newX newY turtlesByColor colorArrays thisPlayer xArrays yArrays | turtlesDict keysAndValuesDo: [:player :vector | player setTurtleCount: 0]. turtlesByColor := Dictionary new. turtlesDict keysAndValuesDo: [:player :vector | turtlesByColor at: player color put: player]. xArrays := Dictionary new. yArrays := Dictionary new. colorArrays := Dictionary new. 0 to: aForm height do: [:y | 0 to: aForm width do: [:x | c := aForm colorAt: (x@y). c isTransparent ifFalse: [ + newX := x + aForm offset x. + newY := y + aForm offset y. - newX := x. - newY := y. ((newX >= 0 and: [newX < (self dimensions * pixelsPerPatch) x]) and: [newY >= 0 and: [newY < (self dimensions * pixelsPerPatch) y]]) ifTrue: [ thisPlayer := turtlesByColor at: c ifAbsentPut: [ turtlesByColor keys detect: [:thisColor | (thisColor diff: c) < 0.2] ifFound: [:thisColor | turtlesByColor at: thisColor] ifNone: [ (self player newTurtleSilently color: c; player)]]. xArray := xArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. yArray := yArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. colorArray := colorArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. xArray add: newX asFloat / pixelsPerPatch. yArray add: newY asFloat / pixelsPerPatch. colorArray add: (c pixelValueForDepth: 32). ]. ]. ]. ]. xArrays keysAndValuesDo: [:player :xArry | self makeTurtlesAtPositionsIn: {xArry asArray. (yArrays at: player) asArray. (colorArrays at: player) asArray} examplerPlayer: player ofPrototype: nil. player costume privateTurtleCount: (self turtlesCountOf: player)].! Item was added: + ----- Method: KedamaMorph>>dimensions: (in category 'accessing') ----- + dimensions: aPoint + + dimensions := aPoint. + wrapX := dimensions x asFloat. + wrapY := dimensions y asFloat. + patchVarDisplayForm := Form extent: dimensions depth: 32. + self pixelsPerPatch: self pixelsPerPatch.! Item was changed: ----- Method: KedamaMorph>>editDrawing (in category 'menu') ----- editDrawing | bnds sketchEditor delBlock myForm mySketch | self world assureNotPaintingElse: [^self]. self world prepareToPaint; displayWorld. bnds := self boundsInWorld. sketchEditor := SketchEditorMorph new. self comeToFront. myForm := self imageForm clippedToSize: (bnds extent - 2). myForm mapColor: self color to: Color transparent. mySketch := SketchMorph withForm: myForm. mySketch position: self position. self world addMorphFront: sketchEditor. sketchEditor initializeFor: mySketch inBounds: bnds pasteUpMorph: self world. delBlock := [self world paintingFlapTab ifNotNil: [:pt | pt hideFlap] ifNil: [self world paintBox ifNotNil: [:pb | pb delete]]]. sketchEditor afterNewPicDo: [:aForm :aRect | + aForm offset: aRect topLeft - self topLeft. self acceptForm: aForm. delBlock value] ifNoBits: [delBlock value]! Item was changed: ----- Method: KedamaMorph>>initialize (in category 'initialization') ----- initialize super initialize. drawRequested := true. changePending := false. + pixelsPerPatch := (World width min: World height) // (self class defaultDimensions x * 2). "heuristic..." + self dimensions: self class defaultDimensions. "dimensions of this StarSqueak world in patches" - dimensions := self class defaultDimensions. "dimensions of this StarSqueak world in patches" - wrapX := dimensions x asFloat. - wrapY := dimensions y asFloat. - pixelsPerPatch := (World width min: World height) // 200. "heuristic..." super extent: dimensions * pixelsPerPatch. self assuredPlayer assureUniClass. self clearAll. "be sure this is done once in case setup fails to do it" autoChanged := true. self leftEdgeMode: #wrap. self rightEdgeMode: #wrap. self topEdgeMode: #wrap. self bottomEdgeMode: #wrap. turtlesDictSemaphore := Semaphore forMutualExclusion. ! Item was changed: ----- Method: Parser>>method:context:encoder: (in category '*Etoys-Squeakland-expression types') ----- method: doit context: ctxt encoder: encoderToUse " pattern [ | temporaries ] block => MethodNode." | sap blk prim temps messageComment methodNode | properties := AdditionalMethodState new. encoder := encoderToUse. sap := self pattern: doit inContext: ctxt. "sap={selector, arguments, precedence}" properties selector: (sap at: 1). + (sap at: 2) do: [:argNode | argNode beMethodArg]. - (sap at: 2) do: [:argNode | argNode isArg: true]. doit ifFalse: [self pragmaSequence]. temps := self temporaries. messageComment := currentComment. currentComment := nil. doit ifFalse: [self pragmaSequence]. prim := self pragmaPrimitives. self statements: #() innerBlock: doit. blk := parseNode. doit ifTrue: [blk returnLast] ifFalse: [blk returnSelfIfNoOther]. hereType == #doIt ifFalse: [^self expected: 'Nothing more']. self interactive ifTrue: [self removeUnusedTemps]. methodNode := self newMethodNode comment: messageComment. ^methodNode selector: (sap at: 1) arguments: (sap at: 2) precedence: (sap at: 3) temporaries: temps block: blk encoder: encoder primitive: prim properties: properties! Item was added: + ----- Method: Player>>getDimensions (in category 'slot-kedama') ----- + getDimensions + + ^ self getValueFromCostume: #dimensions. + ! Item was added: + ----- Method: Player>>setDimensions: (in category 'slot-kedama') ----- + setDimensions: aNumber + + ^ self setCostumeSlot: #dimensions: toValue: aNumber asPoint. + ! From commits at source.squeak.org Wed Aug 31 11:10:35 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 11:10:37 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.219.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.219.mcz ==================== Summary ==================== Name: EToys-tfel.219 Author: tfel Time: 31 August 2016, 11:10:42.577793 am UUID: 67ea8fba-c3dd-ca4c-8b22-4abf7e60e6ba Ancestors: EToys-tfel.218 pasteUpMorph is usually nil at this point, ask the world =============== Diff against EToys-tfel.218 =============== Item was changed: ----- Method: EtoysPresenter>>drawingJustCompleted: (in category 'misc') ----- drawingJustCompleted: aSketchMorph "The user just finished drawing. Now maybe put up a viewer" | aWorld | self flushPlayerListCache. "Because a new drawing already created one, thus obviating #assuredPlayer kicking in with its invalidation" aWorld := associatedMorph world. (aWorld hasProperty: #automaticFlapViewing) ifTrue: [^ aWorld presenter viewMorph: aSketchMorph]. + (aWorld hasProperty: #automaticViewing) - (aSketchMorph pasteUpMorph hasProperty: #automaticViewing) ifTrue: [self viewMorph: aSketchMorph]! From commits at source.squeak.org Wed Aug 31 11:11:59 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 11:12:03 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.220.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.220.mcz ==================== Summary ==================== Name: EToys-tfel.220 Author: tfel Time: 31 August 2016, 11:49:20.463793 am UUID: a52ba16f-ef4a-cd49-bd51-c28b7e8b2dcf Ancestors: EToys-tfel.219 - make it easy to set the Kedama dimensions from etoys - register kedama particles in supplies =============== Diff against EToys-tfel.219 =============== Item was changed: ----- Method: KedamaMorph class>>additionsToViewerCategories (in category 'class initialization') ----- additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (kedama ( (command addToPatchDisplayList: 'add patch to display list' Patch) (command removeAllFromPatchDisplayList 'clear the patch display list') (slot patchDisplayList 'patches to display' String readOnly Player getPatchesList unused unused) (command addToTurtleDisplayList: 'add turtle to display list' Player) (command removeAllFromTurtleDisplayList 'clear the turtle display list') (slot turtleDisplayList 'turtles to display' String readOnly Player getTurtlesList unused unused) (slot pixelsPerPatch 'the display scale' Number readWrite Player getPixelsPerPatch Player setPixelsPerPatch:) + (slot dimensions 'the turtles in x and y direction' Point readWrite Player getDimensions Player setDimensions:) (slot color 'The color of the object' Color readWrite Player getColor Player setColor:) "(command makeTurtlesMap 'Internally create the map of turtles')" (slot leftEdgeMode 'the mode of left edge' EdgeMode readWrite Player getLeftEdgeMode Player setLeftEdgeMode:) (slot rightEdgeMode 'the mode of right edge' EdgeMode readWrite Player getRightEdgeMode Player setRightEdgeMode:) (slot topEdgeMode 'the mode of top edge' EdgeMode readWrite Player getTopEdgeMode Player setTopEdgeMode:) (slot bottomEdgeMode 'the mode of bottom edge' EdgeMode readWrite Player getBottomEdgeMode Player setBottomEdgeMode:) )) ). ! Item was added: + ----- Method: KedamaMorph class>>registerInFlapsRegistry (in category 'as yet unclassified') ----- + registerInFlapsRegistry + "Register the receiver in the system's flaps registry" + self environment + at: #Flaps + ifPresent: [:cl | + cl registerQuad: { + #KedamaMorph. #newSet. 'Particles' translatedNoop. + 'A Kedama World with pre-made components' translatedNoop} + forFlapNamed: 'Supplies']! Item was changed: ----- Method: KedamaMorph>>acceptForm: (in category 'event handling') ----- acceptForm: aForm | c xArray yArray colorArray newX newY turtlesByColor colorArrays thisPlayer xArrays yArrays | turtlesDict keysAndValuesDo: [:player :vector | player setTurtleCount: 0]. turtlesByColor := Dictionary new. turtlesDict keysAndValuesDo: [:player :vector | turtlesByColor at: player color put: player]. xArrays := Dictionary new. yArrays := Dictionary new. colorArrays := Dictionary new. 0 to: aForm height do: [:y | 0 to: aForm width do: [:x | c := aForm colorAt: (x@y). c isTransparent ifFalse: [ + newX := x + aForm offset x. + newY := y + aForm offset y. - newX := x. - newY := y. ((newX >= 0 and: [newX < (self dimensions * pixelsPerPatch) x]) and: [newY >= 0 and: [newY < (self dimensions * pixelsPerPatch) y]]) ifTrue: [ thisPlayer := turtlesByColor at: c ifAbsentPut: [ turtlesByColor keys detect: [:thisColor | (thisColor diff: c) < 0.2] ifFound: [:thisColor | turtlesByColor at: thisColor] ifNone: [ (self player newTurtleSilently color: c; player)]]. xArray := xArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. yArray := yArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. colorArray := colorArrays at: thisPlayer ifAbsentPut: [OrderedCollection new: aForm width * aForm height]. xArray add: newX asFloat / pixelsPerPatch. yArray add: newY asFloat / pixelsPerPatch. colorArray add: (c pixelValueForDepth: 32). ]. ]. ]. ]. xArrays keysAndValuesDo: [:player :xArry | self makeTurtlesAtPositionsIn: {xArry asArray. (yArrays at: player) asArray. (colorArrays at: player) asArray} examplerPlayer: player ofPrototype: nil. player costume privateTurtleCount: (self turtlesCountOf: player)].! Item was added: + ----- Method: KedamaMorph>>dimensions: (in category 'accessing') ----- + dimensions: aPoint + + dimensions := aPoint. + wrapX := dimensions x asFloat. + wrapY := dimensions y asFloat. + patchVarDisplayForm := Form extent: dimensions depth: 32. + self pixelsPerPatch: self pixelsPerPatch.! Item was changed: ----- Method: KedamaMorph>>editDrawing (in category 'menu') ----- editDrawing | bnds sketchEditor delBlock myForm mySketch | self world assureNotPaintingElse: [^self]. self world prepareToPaint; displayWorld. bnds := self boundsInWorld. sketchEditor := SketchEditorMorph new. self comeToFront. myForm := self imageForm clippedToSize: (bnds extent - 2). myForm mapColor: self color to: Color transparent. mySketch := SketchMorph withForm: myForm. mySketch position: self position. self world addMorphFront: sketchEditor. sketchEditor initializeFor: mySketch inBounds: bnds pasteUpMorph: self world. delBlock := [self world paintingFlapTab ifNotNil: [:pt | pt hideFlap] ifNil: [self world paintBox ifNotNil: [:pb | pb delete]]]. sketchEditor afterNewPicDo: [:aForm :aRect | + aForm offset: aRect topLeft - self topLeft. self acceptForm: aForm. delBlock value] ifNoBits: [delBlock value]! Item was changed: ----- Method: KedamaMorph>>initialize (in category 'initialization') ----- initialize super initialize. drawRequested := true. changePending := false. + pixelsPerPatch := (World width min: World height) // (self class defaultDimensions x * 2). "heuristic..." + self dimensions: self class defaultDimensions. "dimensions of this StarSqueak world in patches" - dimensions := self class defaultDimensions. "dimensions of this StarSqueak world in patches" - wrapX := dimensions x asFloat. - wrapY := dimensions y asFloat. - pixelsPerPatch := (World width min: World height) // 200. "heuristic..." super extent: dimensions * pixelsPerPatch. self assuredPlayer assureUniClass. self clearAll. "be sure this is done once in case setup fails to do it" autoChanged := true. self leftEdgeMode: #wrap. self rightEdgeMode: #wrap. self topEdgeMode: #wrap. self bottomEdgeMode: #wrap. turtlesDictSemaphore := Semaphore forMutualExclusion. ! Item was added: + ----- Method: Player>>getDimensions (in category 'slot-kedama') ----- + getDimensions + + ^ self getValueFromCostume: #dimensions. + ! Item was added: + ----- Method: Player>>setDimensions: (in category 'slot-kedama') ----- + setDimensions: aNumber + + ^ self setCostumeSlot: #dimensions: toValue: aNumber asPoint. + ! From commits at source.squeak.org Wed Aug 31 11:13:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 11:13:13 2016 Subject: [squeak-dev] The Trunk: Morphic-tfel.1305.mcz Message-ID: Tim Felgentreff uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tfel.1305.mcz ==================== Summary ==================== Name: Morphic-tfel.1305 Author: tfel Time: 31 August 2016, 11:11:43.198793 am UUID: 556342b2-8907-b240-ba46-ac3638687c87 Ancestors: Morphic-tfel.1304 remove ugly owner hacks when we draw a new sketch and add its flex shell =============== Diff against Morphic-tfel.1304 =============== Item was changed: ----- Method: Morph>>addFlexShell (in category 'rotate scale and flex') ----- addFlexShell "Wrap a rotating and scaling shell around this morph." + | oldHalo myWorld flexMorph anIndex | - | oldHalo flexMorph myWorld anIndex morphOwner | - myWorld := self world. oldHalo:= self halo. + myWorld := self world. + self owner + ifNil: [flexMorph := self newTransformationMorph asFlexOf: self] + ifNotNil: [:myOwner | + anIndex := myOwner submorphIndexOf: self. + flexMorph := self newTransformationMorph asFlexOf: self. + myOwner addMorph: flexMorph asElementNumber: anIndex. + myWorld ifNotNil: [myWorld startSteppingSubmorphsOf: flexMorph]]. - self owner ifNotNil:[ morphOwner := self owner] - ifNil:[morphOwner := self currentWorld]. - - anIndex := morphOwner submorphIndexOf: self. - morphOwner addMorph: (flexMorph := self newTransformationMorph asFlexOf: self) - asElementNumber: anIndex. self transferStateToRenderer: flexMorph. oldHalo ifNotNil: [oldHalo setTarget: flexMorph]. - myWorld ifNotNil: [myWorld startSteppingSubmorphsOf: flexMorph]. ^ flexMorph! Item was changed: ----- Method: PasteUpMorph>>makeNewDrawing:at: (in category 'world menu') ----- makeNewDrawing: evt at: aPoint "make a new drawing, triggered by the given event, with the painting area centered around the given point" | w newSketch newPlayer sketchEditor aPalette rect aPaintBox aPaintTab aWorld | w := self world. w assureNotPaintingElse: [^ self]. rect := self paintingBoundsAround: aPoint. aPalette := self standardPalette. aPalette ifNotNil: [aPalette showNoPalette; layoutChanged]. w prepareToPaint. newSketch := self drawingClass new. Smalltalk at: #UnscriptedPlayer ifPresent:[:aClass| newSketch player: (newPlayer := aClass newUserInstance). newPlayer costume: newSketch. ]. newSketch nominalForm: (Form extent: rect extent depth: w assuredCanvas depth). newSketch bounds: rect. sketchEditor := SketchEditorMorph new. w addMorphFront: sketchEditor. sketchEditor initializeFor: newSketch inBounds: rect pasteUpMorph: self. sketchEditor + afterNewPicDo: [:aForm :aRect | | tfx whereToPresent | - afterNewPicDo: [:aForm :aRect | | tfx ownerBeforeHack whereToPresent | whereToPresent := self presenter. newSketch form: aForm. tfx := self transformFrom: w. newSketch position: (tfx globalPointToLocal: aRect origin). newSketch rotationStyle: sketchEditor rotationStyle. newSketch forwardDirection: sketchEditor forwardDirection. - ownerBeforeHack := newSketch owner. "about to break the invariant!!!!" - newSketch privateOwner: self. "temp for halo access" newPlayer ifNotNil:[newPlayer setHeading: sketchEditor forwardDirection]. (aPaintTab := (aWorld := self world) paintingFlapTab) ifNotNil:[aPaintTab hideFlap] ifNil:[(aPaintBox := aWorld paintBox) ifNotNil:[aPaintBox delete]]. - "Includes newSketch rotationDegrees: sketchEditor forwardDirection." - newSketch privateOwner: ownerBeforeHack. "probably nil, but let's be certain" - self addMorphFront: (newPlayer ifNil:[newSketch] ifNotNil:[newPlayer costume]). w startSteppingSubmorphsOf: newSketch. whereToPresent drawingJustCompleted: newSketch] ifNoBits:[ (aPaintTab := (aWorld := self world) paintingFlapTab) ifNotNil:[aPaintTab hideFlap] ifNil:[(aPaintBox := aWorld paintBox) ifNotNil:[aPaintBox delete]]. aPalette ifNotNil: [aPalette showNoPalette].]! From commits at source.squeak.org Wed Aug 31 11:14:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 11:14:32 2016 Subject: [squeak-dev] The Trunk: MorphicExtras-tfel.195.mcz Message-ID: Tim Felgentreff uploaded a new version of MorphicExtras to project The Trunk: http://source.squeak.org/trunk/MorphicExtras-tfel.195.mcz ==================== Summary ==================== Name: MorphicExtras-tfel.195 Author: tfel Time: 31 August 2016, 11:49:55.843793 am UUID: f9f29860-1341-e745-b3d4-9446283a1c8c Ancestors: MorphicExtras-tfel.194 Show the FrameRateMorph in the supplies tab =============== Diff against MorphicExtras-tfel.194 =============== Item was changed: ----- Method: FrameRateMorph class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | + cl registerQuad: { + #FrameRateMorph. #authoringPrototype. 'Frame Rate' translatedNoop. + 'An indicator of how fast your system is running' translatedNoop} + forFlapNamed: 'Widgets'. + cl registerQuad: { + #FrameRateMorph. #authoringPrototype. 'Frame Rate' translatedNoop. + 'An indicator of how fast your system is running' translatedNoop} + forFlapNamed: 'Supplies']! - ifPresent: [:cl | cl registerQuad: {#FrameRateMorph. #authoringPrototype. 'Frame Rate' translatedNoop. 'An indicator of how fast your system is running' translatedNoop} - forFlapNamed: 'Widgets']! From commits at source.squeak.org Wed Aug 31 11:15:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 11:15:17 2016 Subject: [squeak-dev] The Trunk: Nebraska-tfel.47.mcz Message-ID: Tim Felgentreff uploaded a new version of Nebraska to project The Trunk: http://source.squeak.org/trunk/Nebraska-tfel.47.mcz ==================== Summary ==================== Name: Nebraska-tfel.47 Author: tfel Time: 31 August 2016, 11:50:24.726793 am UUID: a1098db7-626c-db4e-91a1-8966f1e3b9bb Ancestors: Nebraska-tfel.46 workaround. at least the PartsBin should work =============== Diff against Nebraska-tfel.46 =============== Item was changed: ----- Method: NebraskaFridgeMorph>>groupToggleButton (in category 'as yet unclassified') ----- groupToggleButton + self flag: #todo. - ^(self inAColumn: { (ThreePhaseButtonMorph checkBox) target: self; actionSelector: #toggleChoice:; arguments: {'group'}; + "getSelector: #getChoice:;" - getSelector: #getChoice:; setBalloonText: 'Changes between group mode and individuals' translated; step }) hResizing: #shrinkWrap ! From commits at source.squeak.org Wed Aug 31 11:15:13 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 11:15:22 2016 Subject: [squeak-dev] The Trunk: Morphic-tfel.1305.mcz Message-ID: Tim Felgentreff uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-tfel.1305.mcz ==================== Summary ==================== Name: Morphic-tfel.1305 Author: tfel Time: 31 August 2016, 11:11:43.198793 am UUID: 556342b2-8907-b240-ba46-ac3638687c87 Ancestors: Morphic-tfel.1304 remove ugly owner hacks when we draw a new sketch and add its flex shell =============== Diff against Morphic-tfel.1304 =============== Item was changed: ----- Method: Morph>>addFlexShell (in category 'rotate scale and flex') ----- addFlexShell "Wrap a rotating and scaling shell around this morph." + | oldHalo myWorld flexMorph anIndex | - | oldHalo flexMorph myWorld anIndex morphOwner | - myWorld := self world. oldHalo:= self halo. + myWorld := self world. + self owner + ifNil: [flexMorph := self newTransformationMorph asFlexOf: self] + ifNotNil: [:myOwner | + anIndex := myOwner submorphIndexOf: self. + flexMorph := self newTransformationMorph asFlexOf: self. + myOwner addMorph: flexMorph asElementNumber: anIndex. + myWorld ifNotNil: [myWorld startSteppingSubmorphsOf: flexMorph]]. - self owner ifNotNil:[ morphOwner := self owner] - ifNil:[morphOwner := self currentWorld]. - - anIndex := morphOwner submorphIndexOf: self. - morphOwner addMorph: (flexMorph := self newTransformationMorph asFlexOf: self) - asElementNumber: anIndex. self transferStateToRenderer: flexMorph. oldHalo ifNotNil: [oldHalo setTarget: flexMorph]. - myWorld ifNotNil: [myWorld startSteppingSubmorphsOf: flexMorph]. ^ flexMorph! Item was changed: ----- Method: PasteUpMorph>>makeNewDrawing:at: (in category 'world menu') ----- makeNewDrawing: evt at: aPoint "make a new drawing, triggered by the given event, with the painting area centered around the given point" | w newSketch newPlayer sketchEditor aPalette rect aPaintBox aPaintTab aWorld | w := self world. w assureNotPaintingElse: [^ self]. rect := self paintingBoundsAround: aPoint. aPalette := self standardPalette. aPalette ifNotNil: [aPalette showNoPalette; layoutChanged]. w prepareToPaint. newSketch := self drawingClass new. Smalltalk at: #UnscriptedPlayer ifPresent:[:aClass| newSketch player: (newPlayer := aClass newUserInstance). newPlayer costume: newSketch. ]. newSketch nominalForm: (Form extent: rect extent depth: w assuredCanvas depth). newSketch bounds: rect. sketchEditor := SketchEditorMorph new. w addMorphFront: sketchEditor. sketchEditor initializeFor: newSketch inBounds: rect pasteUpMorph: self. sketchEditor + afterNewPicDo: [:aForm :aRect | | tfx whereToPresent | - afterNewPicDo: [:aForm :aRect | | tfx ownerBeforeHack whereToPresent | whereToPresent := self presenter. newSketch form: aForm. tfx := self transformFrom: w. newSketch position: (tfx globalPointToLocal: aRect origin). newSketch rotationStyle: sketchEditor rotationStyle. newSketch forwardDirection: sketchEditor forwardDirection. - ownerBeforeHack := newSketch owner. "about to break the invariant!!!!" - newSketch privateOwner: self. "temp for halo access" newPlayer ifNotNil:[newPlayer setHeading: sketchEditor forwardDirection]. (aPaintTab := (aWorld := self world) paintingFlapTab) ifNotNil:[aPaintTab hideFlap] ifNil:[(aPaintBox := aWorld paintBox) ifNotNil:[aPaintBox delete]]. - "Includes newSketch rotationDegrees: sketchEditor forwardDirection." - newSketch privateOwner: ownerBeforeHack. "probably nil, but let's be certain" - self addMorphFront: (newPlayer ifNil:[newSketch] ifNotNil:[newPlayer costume]). w startSteppingSubmorphsOf: newSketch. whereToPresent drawingJustCompleted: newSketch] ifNoBits:[ (aPaintTab := (aWorld := self world) paintingFlapTab) ifNotNil:[aPaintTab hideFlap] ifNil:[(aPaintBox := aWorld paintBox) ifNotNil:[aPaintBox delete]]. aPalette ifNotNil: [aPalette showNoPalette].]! From hannes.hirzel at gmail.com Wed Aug 31 11:18:13 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 11:18:15 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: References: <5BCAF36D-D7BB-40F9-9BD7-222B901263BC@gmx.de> Message-ID: A test of Fuel with Squeak 5.1 ran three hours ago. https://travis-ci.org/theseion/Fuel/jobs/156426655 SmalltalkCI: 515 Tests, 0 Failures, 0 Errors in 5.713s On 8/31/16, Fabio Niephaus wrote: > +1 Fuel > > Max also runs all CI tests on different Squeak versions: > https://travis-ci.org/theseion/Fuel > Therefore, Fuel should be compatible to Squeak versions later than 4.4. > > -- > > On Wed, Aug 31, 2016 at 1:00 PM H. Hirzel wrote: > >> https://github.com/theseion/Fuel >> >> says about Fuel >> >> - No special VM-support needed. >> - Can serialize/materialize not only plain objects but also classes, >> traits, methods, closures, contexts, packages, etc. >> - Very customizable: ignore certain instance variables, substitute >> objects by others, pre and post serialization and materialization >> actions, etc. >> - Supports class rename and class reshape. >> - Good test coverage (almost 600 unit tests). >> >> On 8/31/16, Tobias Pape wrote: >> > >> > On 31.08.2016, at 11:14, Bert Freudenberg wrote: >> > >> >> On Wednesday, 31 August 2016, H. Hirzel >> wrote: >> >> >> >> We might consider JSON or Fuel might as well options for a format to >> >> save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for >> >> example). >> >> >> >> If someone wants to take a serious look I'd suggest Fuel. Being a >> >> replacement for ImageSegments was one of its design goals, if I >> >> remember >> >> correctly. >> >> >> >> - Bert - >> > >> > +1 >> > >> > Also, Max Leske always made an effort that Fuel easily loads in Squeak. >> > >> > best regards >> > -Tobias >> > >> > >> > >> >> > From commits at source.squeak.org Wed Aug 31 11:33:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 11:33:57 2016 Subject: [squeak-dev] The Inbox: EToys-jl.222.mcz Message-ID: A new version of EToys was added to project The Inbox: http://source.squeak.org/inbox/EToys-jl.222.mcz ==================== Summary ==================== Name: EToys-jl.222 Author: jl Time: 31 August 2016, 1:32:30.460376 pm UUID: e71a0d5f-8d2c-0f42-a000-d248ad8b871d Ancestors: EToys-tfel.221 tfel fixed reduceOnStack =============== Diff against EToys-tfel.221 =============== Item was changed: ----- Method: EToyExpressionTransformer2>>reduceOnStack (in category 'all') ----- reduceOnStack | list left sel right m | list := stack removeLast: 3. left := list at: 1. sel := list at: 2. + self flag: #tfel. + sel isSymbol ifFalse: [sel := sel key]. right := list at: 3. m := MessageNode new receiver: left + selector: sel - selector: sel key arguments: (Array with: right) precedence: (sel precedence) from: encoder sourceRange: nil. stack addLast: m. ! From eliot.miranda at gmail.com Wed Aug 31 11:40:10 2016 From: eliot.miranda at gmail.com (Eliot Miranda) Date: Wed Aug 31 11:40:18 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: References: Message-ID: <00A78F34-3E9C-447D-B1BE-B3653B7C19D2@gmail.com> > On Aug 31, 2016, at 11:14 AM, Bert Freudenberg wrote: > >> On Wednesday, 31 August 2016, H. Hirzel wrote: >> >> We might consider JSON or Fuel might as well options for a format to >> save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for >> example). > > If someone wants to take a serious look I'd suggest Fuel. Being a replacement for ImageSegments was one of its design goals, if I remember correctly. +1. It also has a very performant architecture. It is very similar to VW's parcel format which priced to be significantly faster than other formats at PPD. > > - Bert - > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/dfa24238/attachment.htm From commits at source.squeak.org Wed Aug 31 12:31:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:31:51 2016 Subject: [squeak-dev] The Inbox: EToys-jl.223.mcz Message-ID: A new version of EToys was added to project The Inbox: http://source.squeak.org/inbox/EToys-jl.223.mcz ==================== Summary ==================== Name: EToys-jl.223 Author: jl Time: 31 August 2016, 2:30:13.751376 pm UUID: 05f8b1d1-a505-a248-9a2a-e51f7e0c1689 Ancestors: EToys-jl.222 Implement timesRepeat: tiles for Kedama =============== Diff against EToys-jl.222 =============== Item was changed: ----- Method: KedamaVectorParseTreeRewriter>>visit:andParent: (in category 'entry point') ----- visit: node andParent: parent + | newNode possibleSelector selIndex parentRewriterBlock newNodeBlock | - | newNode possibleSelector selIndex | node isLeaf not ifTrue: [ node getAllChildren do: [:child | self visit: child andParent: node. ]. ]. (node rewriteInfoOut notNil) ifTrue: [ ((node isMemberOf: VariableNode) or: [node isMemberOf: LiteralVariableNode]) ifTrue: [ newNode := TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2. parent replaceNode: node with: newNode. ]. - ]. (node isMemberOf: MessageNode) ifTrue: [ (node statementType = #sequential) ifTrue: [ node selector key = #doSequentialCommand: ifTrue: [ (node isStatement) ifTrue: [ node receiver: node primaryBreedPair second. ]. ] ]. ]. + (node isMemberOf: MessageNode) ifTrue: [ + newNodeBlock := [:selector :args | + self + createMessageNode: node + inParentNode: parent + receiverNode: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2) + selector: selector + arguments: args]. + - (node isMemberOf: MessageNode) ifTrue: [ ((selIndex := #(parallel sequential die) indexOf: node statementType) > 0) ifTrue: [ possibleSelector := #(doCommand: doSequentialCommand: doDieCommand:) at: selIndex. + + parentRewriterBlock := [:newNod | + self + rewriteMessageNode: node + inParentNode: parent + receiverNode: node rewriteInfoIn second + selector: possibleSelector + arguments: {self + makeBlockNodeArguments: {node rewriteInfoOut second} + statements: {newNod} returns: false}]. + (node messageType = #condition) ifTrue: [ + newNode := newNodeBlock + value: #test:ifTrue:ifFalse: + value: {node receiver. node arguments first. node arguments second}. - newNode := self createMessageNode: node inParentNode: parent receiverNode: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2) selector: #test:ifTrue:ifFalse: arguments: (Array with: node receiver with: node arguments first with: node arguments second). (node isStatement) ifFalse: [ parent replaceNode: node with: newNode. ] ifTrue: [ + parentRewriterBlock value: newNode. - self rewriteMessageNode: node inParentNode: parent receiverNode: node rewriteInfoIn second selector: possibleSelector arguments: (Array with: (self makeBlockNodeArguments: (Array with: node rewriteInfoOut second) statements: (Array with: newNode) returns: false)). ]. ] ifFalse: [ + node selector key = #timesRepeat: + ifTrue: [ + newNode := newNodeBlock + value: #times:repeat: + value: {node receiver. node arguments first}. + (node isStatement) ifFalse: [ + parent replaceNode: node with: newNode. + ] ifTrue: [ + parentRewriterBlock value: newNode. + ]. + ] + ifFalse: [(node isStatement) ifTrue: [ + parentRewriterBlock value: node + ]. - (node isStatement) ifTrue: [ - self rewriteMessageNode: node inParentNode: parent receiverNode: node rewriteInfoIn second selector: possibleSelector arguments: (Array with: (self makeBlockNodeArguments: (Array with: node rewriteInfoOut second) statements: (Array with: node) returns: false)). ]. ] ]. ]. (node isMemberOf: BlockNode) ifTrue: [ (node rewriteInfoOut notNil) ifTrue: [ self rewriteBlockNode: node inParentNode: parent arguments: (Array with: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2)) statements: node statements returns: false. ]. ]. ! Item was added: + ----- Method: Object>>times:repeat: (in category '*Etoys-Squeakland-Tweak-Kedama') ----- + times: aNumber repeat: aBlock + + aNumber timesRepeat: [aBlock value: self] + ! From commits at source.squeak.org Wed Aug 31 12:34:58 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:35:00 2016 Subject: [squeak-dev] The Trunk: EToys-jl.222.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-jl.222.mcz ==================== Summary ==================== Name: EToys-jl.222 Author: jl Time: 31 August 2016, 1:32:30.460376 pm UUID: e71a0d5f-8d2c-0f42-a000-d248ad8b871d Ancestors: EToys-tfel.221 tfel fixed reduceOnStack =============== Diff against EToys-tfel.221 =============== Item was changed: ----- Method: EToyExpressionTransformer2>>reduceOnStack (in category 'all') ----- reduceOnStack | list left sel right m | list := stack removeLast: 3. left := list at: 1. sel := list at: 2. + self flag: #tfel. + sel isSymbol ifFalse: [sel := sel key]. right := list at: 3. m := MessageNode new receiver: left + selector: sel - selector: sel key arguments: (Array with: right) precedence: (sel precedence) from: encoder sourceRange: nil. stack addLast: m. ! From commits at source.squeak.org Wed Aug 31 12:41:30 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:41:32 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.224.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.224.mcz ==================== Summary ==================== Name: EToys-tfel.224 Author: tfel Time: 31 August 2016, 2:36:36.089793 pm UUID: 8a75af73-83e6-2e4b-b326-5b6319899e4f Ancestors: EToys-jl.223 evaluate conditions in Kedama parallel for every turtle (so that e.g. randomness is parallel) =============== Diff against EToys-jl.222 =============== Item was changed: ----- Method: KedamaTurtleVectorPlayer2>>test:ifTrue:ifFalse: (in category 'command execution') ----- test: cond ifTrue: trueBlock ifFalse: falseBlock + | origPredicate c actualCond | - | origPredicate c | (cond == true or: [cond == false]) ifTrue: [ ^ cond ifTrue: [trueBlock value: self] ifFalse: [falseBlock value: self]. ]. + actualCond := cond. + cond isBlock ifTrue: [ + actualCond := ByteArray new: predicate size. + 1 to: predicate size do: [:i | actualCond at: i put: (cond value ifTrue: [1] ifFalse: [0])] + ]. origPredicate := predicate clone. + predicate bytesAnd: actualCond. - predicate bytesAnd: cond. trueBlock value: self. + c := actualCond clone. - c := cond clone. c not. predicate replaceFrom: 1 to: (predicate size min: origPredicate size) with: origPredicate startingAt: 1. predicate bytesAnd: c. falseBlock value: self. predicate replaceFrom: 1 to: (predicate size min: origPredicate size) with: origPredicate startingAt: 1.! Item was changed: ----- Method: KedamaVectorParseTreeRewriter>>visit:andParent: (in category 'entry point') ----- visit: node andParent: parent + | newNode possibleSelector selIndex parentRewriterBlock newNodeBlock | - | newNode possibleSelector selIndex | node isLeaf not ifTrue: [ node getAllChildren do: [:child | self visit: child andParent: node. ]. ]. (node rewriteInfoOut notNil) ifTrue: [ ((node isMemberOf: VariableNode) or: [node isMemberOf: LiteralVariableNode]) ifTrue: [ newNode := TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2. parent replaceNode: node with: newNode. ]. - ]. (node isMemberOf: MessageNode) ifTrue: [ (node statementType = #sequential) ifTrue: [ node selector key = #doSequentialCommand: ifTrue: [ (node isStatement) ifTrue: [ node receiver: node primaryBreedPair second. ]. ] ]. ]. + (node isMemberOf: MessageNode) ifTrue: [ + newNodeBlock := [:selector :args | + self + createMessageNode: node + inParentNode: parent + receiverNode: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2) + selector: selector + arguments: args]. + - (node isMemberOf: MessageNode) ifTrue: [ ((selIndex := #(parallel sequential die) indexOf: node statementType) > 0) ifTrue: [ possibleSelector := #(doCommand: doSequentialCommand: doDieCommand:) at: selIndex. + + parentRewriterBlock := [:newNod | + self + rewriteMessageNode: node + inParentNode: parent + receiverNode: node rewriteInfoIn second + selector: possibleSelector + arguments: {self + makeBlockNodeArguments: {node rewriteInfoOut second} + statements: {newNod} returns: false}]. + (node messageType = #condition) ifTrue: [ + newNode := newNodeBlock + value: #test:ifTrue:ifFalse: + value: {BlockNode withJust: node receiver. node arguments first. node arguments second}. - newNode := self createMessageNode: node inParentNode: parent receiverNode: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2) selector: #test:ifTrue:ifFalse: arguments: (Array with: node receiver with: node arguments first with: node arguments second). (node isStatement) ifFalse: [ parent replaceNode: node with: newNode. ] ifTrue: [ + parentRewriterBlock value: newNode. - self rewriteMessageNode: node inParentNode: parent receiverNode: node rewriteInfoIn second selector: possibleSelector arguments: (Array with: (self makeBlockNodeArguments: (Array with: node rewriteInfoOut second) statements: (Array with: newNode) returns: false)). ]. ] ifFalse: [ + node selector key = #timesRepeat: + ifTrue: [ + newNode := newNodeBlock + value: #times:repeat: + value: {node receiver. node arguments first}. + (node isStatement) ifFalse: [ + parent replaceNode: node with: newNode. + ] ifTrue: [ + parentRewriterBlock value: newNode. + ]. + ] + ifFalse: [(node isStatement) ifTrue: [ + parentRewriterBlock value: node + ]. - (node isStatement) ifTrue: [ - self rewriteMessageNode: node inParentNode: parent receiverNode: node rewriteInfoIn second selector: possibleSelector arguments: (Array with: (self makeBlockNodeArguments: (Array with: node rewriteInfoOut second) statements: (Array with: node) returns: false)). ]. ] ]. ]. (node isMemberOf: BlockNode) ifTrue: [ (node rewriteInfoOut notNil) ifTrue: [ self rewriteBlockNode: node inParentNode: parent arguments: (Array with: (TempVariableNode new name: node rewriteInfoOut second index: 0 type: 2)) statements: node statements returns: false. ]. ]. ! Item was added: + ----- Method: Object>>times:repeat: (in category '*Etoys-Squeakland-Tweak-Kedama') ----- + times: aNumber repeat: aBlock + + aNumber timesRepeat: [aBlock value: self] + ! Item was changed: ----- Method: SpeechBubbleMorph>>balloon (in category 'accessing') ----- balloon ^balloon ifNil: [ | balloonForm | + balloonForm := Form extent: (self extent - (0 @ self tailHeight) max: 1@1) depth: 16. - balloonForm := Form extent: self extent - (0 @ self tailHeight) depth: 16. self drawBalloonOn: balloonForm getCanvas in: balloonForm boundingBox. balloonForm floodFill: self color at: balloonForm center. balloon := (SketchMorph withForm: balloonForm). ]! From commits at source.squeak.org Wed Aug 31 12:45:43 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:45:47 2016 Subject: [squeak-dev] The Trunk: System-tfel.858.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.858.mcz ==================== Summary ==================== Name: System-tfel.858 Author: tfel Time: 5 August 2016, 4:38:15.818259 pm UUID: 0198ea1a-7b8f-e542-a99a-26325f794532 Ancestors: System-tfel.857 - accessors for GetText translations so we can later get at the untranslated phrases - fix store project interaction - fix adding new font sizes for TTCFonts when the first derivative is a TTCFontSet =============== Diff against System-mt.855 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was added: + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- + moFiles + + ^ moFiles! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- searchByDictionary: aString | index | + index := translations at: aString ifAbsentPut: [nil]. + index ifNil: [^ nil]. + ^self translatedString: index! - index := translations at: aString ifAbsent: [^nil]. - ^self translatedString: index - - ! Item was added: + ----- Method: MOFile>>translations (in category 'private') ----- + translations + + ^ translations! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := SugarLauncher current + parameterAt: 'SQUEAKLETS' + ifAbsent: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServer (in category 'file in/out') ----- storeOnServer "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ].! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." world setProperty: #optimumExtentFromAuthor toValue: world extent. + self validateProjectNameIfOK: [:details | + self acceptProjectDetails: details. - self validateProjectNameIfOK: [ self isCurrentProject ifTrue: ["exit, then do the command" forget ifTrue: [self forgetExistingURL] ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. ^self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfoOn: aMorphOrNil. ]. ! Item was changed: ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- validateProjectNameIfOK: aBlock | details | details := world valueOfProperty: #ProjectDetails. details ifNotNil: ["ensure project info matches real project name" details at: 'projectname' put: self name. ]. + self doWeWantToRename ifFalse: [^ aBlock value: details]. - self doWeWantToRename ifFalse: [^aBlock value]. (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | etpdm getFullInfoFor: self + ifValid: [:d | - ifValid: [ World displayWorldSafely. + aBlock value: d - aBlock value. ] expandedFormat: false] ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- addNewFontSize: pointSize "Add a font in specified size to the array of fonts." | f d newArray t isSet | fontArray first emphasis ~= 0 ifTrue: [ t := TextConstants at: self fontArray first familyName asSymbol. t fonts first emphasis = 0 ifTrue: [ ^ t addNewFontSize: pointSize. ]. ]. pointSize <= 0 ifTrue: [^ nil]. fontArray do: [:s | s pointSize = pointSize ifTrue: [^ s]. ]. (isSet := fontArray first isKindOf: TTCFontSet) ifTrue:[ | fonts | fonts := fontArray first fontArray collect: [ :font | | newFont | (font isNil) ifTrue: [newFont := nil] ifFalse: [ newFont := (font ttcDescription size > 256) ifTrue: [MultiTTCFont new initialize] ifFalse: [TTCFont new initialize]. newFont ttcDescription: font ttcDescription. newFont pixelSize: pointSize * 96 // 72. font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | proto ifNotNil: [ d := proto class new initialize. d ttcDescription: proto ttcDescription. d pixelSize: newFont pixelSize. newFont derivativeFont: d]]]. ]. newFont]. f := TTCFontSet newFontArray: fonts] ifFalse: [ f := fontArray first class new initialize: fontArray first. f pointSize: pointSize. fontArray first derivativeFonts do: [:proto | proto ifNotNil: [ + d := TTCFont new initialize: proto. - d := proto class new initialize: proto. d pointSize: f pointSize. + f derivativeFont: d. - f derivativeFont: d mainFont: proto. ]. ]. ]. newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. self newFontArray: newArray. isSet ifTrue: [ TTCFontSet register: newArray at: newArray first familyName asSymbol. ]. ^ self fontOfPointSize: pointSize ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 12:46:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:46:13 2016 Subject: [squeak-dev] The Trunk: System-tfel.857.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.857.mcz ==================== Summary ==================== Name: System-tfel.857 Author: tfel Time: 2 August 2016, 10:57:36.940368 am UUID: 8a8a2465-3f5f-094c-b3bc-5e712d72d764 Ancestors: System-tfel.856 fasterKeys is deprecated =============== Diff against System-mt.855 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. - blockers := dummy blockers. - known := (refs := dummy references) size. refs keys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := SugarLauncher current + parameterAt: 'SQUEAKLETS' + ifAbsent: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 12:46:08 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:46:20 2016 Subject: [squeak-dev] The Trunk: System-tfel.856.mcz Message-ID: Tim Felgentreff uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-tfel.856.mcz ==================== Summary ==================== Name: System-tfel.856 Author: tfel Time: 2 August 2016, 10:05:09.000368 am UUID: 9674387a-d70f-d548-8b7e-db404c181b5f Ancestors: System-mt.855, System-kfr.65 merge from Squeakland Etoys image =============== Diff against System-mt.855 =============== Item was changed: ----- Method: CodeLoader>>installProject (in category 'installing') ----- installProject "Assume that we're loading a single file and it's a project" | aStream | + aStream _ sourceFiles first contentStream. - aStream := sourceFiles first contentStream. aStream ifNil:[^self error:'Project was not loaded']. + ProjectLoading openOn: aStream! - ProjectLoading - openName: nil "<--do we want to cache this locally? Need a name if so" - stream: aStream - fromDirectory: nil - withProjectView: nil. - ! Item was changed: ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- defaultProjectHandler + ^ ExternalDropHandler - ^ExternalDropHandler type: nil extension: 'pr' + action: [:stream | ProjectLoading openOn: stream]! - action: [:stream | - ProjectLoading - openName: nil - stream: stream - fromDirectory: nil - withProjectView: nil] - ! Item was changed: ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- assuredPreferenceDirectory "Answer the preference directory, creating it if necessary" + | prefDir topDir | - | prefDir | prefDir := self preferenceDirectory. prefDir ifNil: + [topDir := Preferences startInUntrustedDirectory + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] + ifFalse: [FileDirectory default]. + prefDir := topDir directoryNamed: self preferenceDirectoryName. - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. prefDir assureExistence]. ^ prefDir! Item was changed: ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- declareAndPossiblyRename: classThatIsARoot | existing catInstaller | "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." + catInstaller _ [ - catInstaller := [ classThatIsARoot superclass name == #Player ifTrue: [classThatIsARoot category: Object categoryForUniclasses] ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. ]. classThatIsARoot superclass addSubclass: classThatIsARoot. (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ "Class entry in Smalltalk not referred to in Segment, install anyway." catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. + existing _ Smalltalk at: classThatIsARoot name. - existing := Smalltalk at: classThatIsARoot name. existing xxxClass == ImageSegmentRootStub ifTrue: [ "We are that segment!! Must ask it carefully!!" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. existing == false | (existing == nil) ifTrue: [ "association is in outPointers, just installed" catInstaller value. ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Conflict with existing global or copy of the class" (existing isKindOf: Class) ifTrue: [ classThatIsARoot isSystemDefined not ifTrue: [ "UniClass. give it a new name" classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. catInstaller value. "must be after new name" ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. "Take the incoming one" self inform: 'Using newly arrived version of ', classThatIsARoot name. classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. catInstaller value. ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. self error: 'Name already in use by a non-class: ', classThatIsARoot name. ! Item was changed: ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- smartFillRoots: dummy + | refs known ours ww blockers | - | refs ours blockers known | "Put all traced objects into my arrayOfRoots. Remove some that want to be in outPointers. Return blockers, an IdentityDictionary of objects to replace in outPointers." + blockers _ dummy blockers. + known _ (refs _ dummy references) size. + refs fasterKeys do: [:obj | "copy keys to be OK with removing items" + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. - blockers := dummy blockers. - known := (refs := dummy references) size. - refs keys do: [:obj | "copy keys to be OK with removing items" - (obj isSymbol) ifTrue: [refs removeKey: obj. - known := known-1]. (obj class == PasteUpMorph) ifTrue: [ obj isWorldMorph & (obj owner == nil) ifTrue: [ + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ + refs removeKey: obj. known _ known-1. - obj == dummy project world ifFalse: [ - refs removeKey: obj. known := known-1. blockers at: obj put: + (StringMorph contents: 'The worldMorph of a different world')]]]. - (StringMorph - contents: 'The worldMorph of a different world')]]]. "Make a ProjectViewMorph here" "obj class == Project ifTrue: [Transcript show: obj; cr]." (blockers includesKey: obj) ifTrue: [ + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. - refs removeKey: obj ifAbsent: [known := - known+1]. known := known-1]. ]. + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. + refs keysDo: [:obj | - ours := dummy project world. - refs keysDo: [:obj | | ww | obj isMorph ifTrue: [ + ww _ obj world. - ww := obj world. (ww == ours) | (ww == nil) ifFalse: [ + refs removeKey: obj. known _ known-1. + blockers at: obj put: (StringMorph contents: + obj printString, ' from another world')]]]. - refs removeKey: obj. known := known-1. - blockers at: obj put: - (StringMorph contents: - obj - printString, ' from another world')]]]. "keep original roots on the front of the list" (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. + self classOrganizersBeRoots: dummy. + ^ dummy rootObject, refs fasterKeys asArray.! - ^ dummy rootObject, refs keys asArray. - - ! Item was changed: ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- serviceLoadVersion ^ SimpleServiceEntry provider: self + label: 'load' translatedNoop - label: 'load' selector: #loadVersionFile: + description: 'load a package version' translatedNoop! - description: 'load a package version'! Item was changed: ----- Method: Preference>>helpString (in category 'menu') ----- helpString "Answer the help string provided for the receiver" + ^ helpString ifNil: ['no help available' translatedNoop]! - ^ helpString ifNil: ['no help available']! Item was changed: + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- chooseEToysTitleFont + "Present a menu with the possible fonts for etoy titles" + - "present a menu with the possible fonts for the eToys" self + chooseFontWithPrompt: 'Choose the etoy title font' translated - chooseFontWithPrompt: 'eToys Title font...' translated andSendTo: self withSelector: #setEToysTitleFontTo: + highlight: self standardEToysTitleFont! - highlightSelector: #standardEToysTitleFont! Item was removed: - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- - haloTheme - ^ self - valueOfFlag: #haloTheme - ifAbsent: [ #iconicHaloSpecifications ]! Item was changed: + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- iconicHaloSpecifications "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" "Preferences resetHaloSpecifications" ^ #( " selector horiz vert color info icon key --------- ------ ----------- ------------------------------- ---------------" (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') (addPoohHandle: right center (white) 'Halo-Pooh') (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') (addRotateHandle: left bottom (blue) 'Halo-Rot') + (addMenuHandle: leftCenter top (white) 'Halo-Menu') - (addMenuHandle: leftCenter top (red) 'Halo-Menu') (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') (addViewHandle: left center (cyan) 'Halo-View') (addGrabHandle: center top (black) 'Halo-Grab') (addDragHandle: rightCenter top (brown) 'Halo-Drag') (addDupHandle: right top (green) 'Halo-Dup') (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') (addHelpHandle: center bottom (lightBlue) 'Halo-Help') (addGrowHandle: right bottom (yellow) 'Halo-Scale') (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') (addRepaintHandle: right center (lightGray) 'Halo-Paint') (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') ) ! Item was changed: + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- menuColorString ^ ((self valueOfFlag: #menuColorFromWorld) + ifTrue: ['stop menu-color-from-world' translated] + ifFalse: ['start menu-color-from-world' translated]) ! - ifTrue: ['stop menu-color-from-world'] - ifFalse: ['start menu-color-from-world']) translated! Item was changed: + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- restorePersonalPreferences "Restore all the user's saved personal preference settings" | savedPrefs | + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. savedPrefs associationsDo: + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: [:pref | pref preferenceValue: assoc value preferenceValue]]! Item was changed: + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- restorePreferencesFromDisk + | result | + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . + result ifNil: [^ self]. + self restorePreferencesFromDisk: result fullName + - (FileDirectory default fileExists: 'my.prefs') - ifTrue: [ Cursor wait showWhile: [ - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] - ] ] - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. ! Item was removed: - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- - showAdvancedNavigatorButtons - ^ self - valueOfFlag: #showAdvancedNavigatorButtons - ifAbsent: [ true ]! Item was changed: + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- storePreferencesToDisk + | newName | + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. + newName isEmpty + ifTrue: [^ self]. + Cursor wait + showWhile: [[self storePreferencesIn: newName , '.prefs'] + on: Error + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! - Cursor wait showWhile: [ - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! Item was changed: ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- mostRecent: projName onServer: aServerDirectory | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. File names may or may not be HTTP escaped, %20 on the server." self flag: #bob. "do we want to handle unversioned projects as well?" + "I think we do now - Yoshiki." + nothingFound _ {nil. -1}. - nothingFound := {nil. -1}. aServerDirectory ifNil: [^nothingFound]. "23 sept 2000 - some old projects have periods in name so be more careful" + unEscName _ projName unescapePercents. + triple _ Project parseProjectFileName: unEscName. + stem _ triple first. + rawList _ aServerDirectory fileNames. - unEscName := projName unescapePercents. - triple := Project parseProjectFileName: unEscName. - stem := triple first. - rawList := aServerDirectory fileNames. + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. + list _ rawList collect: [:nnn | nnn unescapePercents]. + max _ -1. goodName _ nil. - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. - list := rawList collect: [:nnn | nnn unescapePercents]. - max := -1. goodName := nil. list withIndexDo: [:aName :ind | + ((aName beginsWith: stem)) ifTrue: [ + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - (aName beginsWith: stem) ifTrue: [ - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try with underbar for spaces on server" (stem includes: $ ) ifTrue: [ + stem1 _ stem copyReplaceAll: ' ' with: '_'. - stem1 := stem copyReplaceAll: ' ' with: '_'. list withIndexDo: [:aName :ind | (aName beginsWith: stem1) ifTrue: [ + num _ (Project parseProjectFileName: aName) second. + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. - num := (Project parseProjectFileName: aName) second. - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. max = -1 ifFalse: [^ Array with: goodName with: max]. "try without the marker | " + stem1 _ stem allButLast, '.pr'. + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" - stem1 := stem allButLast, '.pr'. - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" list withIndexDo: [:aName :ind | (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" - (triple := aName findTokens: '.') size >= 2 ifTrue: [ - max := 0. goodName := (rawList at: ind)]]]. "no other versions" max = -1 ifFalse: [^ Array with: goodName with: max]. ^nothingFound "no matches" ! Item was changed: ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- squeakletDirectory | squeakletDirectoryName | + squeakletDirectoryName := SugarLauncher current + parameterAt: 'SQUEAKLETS' + ifAbsent: ['Squeaklets']. - squeakletDirectoryName := 'Squeaklets'. (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ FileDirectory default createDirectory: squeakletDirectoryName ]. ^FileDirectory default directoryNamed: squeakletDirectoryName! Item was changed: ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- sweep: aServerDirectory | repository list parts ind entry projectName versions | "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone directory: '/vol0/people/dani/Squeaklets/2.7')" "Ensure the 'older' directory" (aServerDirectory includesKey: 'older') ifFalse: [aServerDirectory createDirectory: 'older']. + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. "Collect each name, and decide on versions" + list _ aServerDirectory fileNames. + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. + list _ list asSortedCollection asOrderedCollection. + parts _ list collect: [:en | Project parseProjectFileName: en]. + parts _ parts select: [:en | en third = 'pr']. + ind _ 1. + [entry _ list at: ind. + projectName _ entry first asLowercase. + versions _ OrderedCollection new. versions add: entry. + [(ind _ ind + 1) > list size - list := aServerDirectory fileNames. - list isString ifTrue: [^ self inform: 'server is unavailable']. - list := list asSortedCollection asOrderedCollection. - parts := list collect: [:en | Project parseProjectFileName: en]. - parts := parts select: [:en | en third = 'pr']. - ind := 1. - [entry := list at: ind. - projectName := entry first asLowercase. - versions := OrderedCollection new. versions add: entry. - [(ind := ind + 1) > list size ifFalse: [(parts at: ind) first asLowercase = projectName ifTrue: [versions add: (parts at: ind). true] ifFalse: [false]] ifTrue: [false]] whileTrue. aServerDirectory moveYoungest: 3 in: versions to: repository. ind > list size] whileFalse. ! Item was changed: ----- Method: Project>>depth (in category 'active process') ----- depth "Return the depth of this project from the top. topProject = 0, next = 1, etc." "Project current depth." + | depth project | + depth _ 0. + project _ self. - | depth topProject project | - depth := 0. - topProject := Project topProject. - project := self. + [project class == DiskProxy ifTrue: [^ depth]. + project isTopProject] + whileFalse: + [project _ project parent. + depth _ depth + 1]. - [project ~= topProject and:[project notNil]] - whileTrue: - [project := project parent. - depth := depth + 1]. ^ depth! Item was changed: ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- doWeWantToRename | want | self hasBadNameForStoring ifTrue: [^true]. + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. - (self name beginsWith: 'Unnamed') ifTrue: [^true]. - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. world removeProperty: #SuperSwikiRename. ^want ! Item was changed: ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- htmlPagePrototype "Return the HTML page prototype" ^' Squeak Project - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> '! Item was changed: ----- Method: Project>>revert (in category 'file in/out') ----- revert | | "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. - projectParameters ifNil: [^ self inform: 'nothing to revert to']. parentProject enter: false revert: true saveForRevert: false. "does not return!!" ! Item was changed: ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- storeOnServerAssumingNameValid "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." - world setProperty: #optimumExtentFromAuthor toValue: world extent. self isCurrentProject ifTrue: ["exit, then do the command" + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. ^ self armsLengthCommand: #storeOnServerAssumingNameValid withDescription: 'Publishing' translated ]. self storeOnServerWithProgressInfo. ! Item was changed: ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- loginAs: userName "Assuming that we have a valid user url; read its contents and see if the user is really there." | actualName userList | eToyAuthentificationServer ifNil:[ self proceedWithLogin. ^true]. + userList _ eToyAuthentificationServer eToyUserList. - userList := eToyAuthentificationServer eToyUserList. userList ifNil:[ self inform: 'Sorry, I cannot find the user list. (this may be due to a network problem) + Please hit Cancel if you wish to use Squeak.' translated. - Please hit Cancel if you wish to use Squeak.'. ^false]. "case insensitive search" + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. actualName isNil ifTrue:[ + self inform: 'Unknown user: ' translated ,userName. - self inform: 'Unknown user: ',userName. ^false]. Utilities authorName: actualName. eToyAuthentificationServer eToyUserName: actualName. self proceedWithLogin. ^true! Item was changed: ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- serviceFileInSAR "Answer a service for opening a changelist browser on a file" ^ SimpleServiceEntry provider: self + label: 'install SAR' translatedNoop - label: 'install SAR' selector: #installSAR: + description: 'install this Squeak ARchive into the image.' translatedNoop + buttonLabel: 'install' translatedNoop! - description: 'install this Squeak ARchive into the image.' - buttonLabel: 'install'! Item was changed: ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- majorMinorVersion "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " - "SystemVersion current majorMinorVersion" | char stream | + ^ (version includes: $.) + ifTrue: + [stream := ReadStream on: version, 'x'. + stream upTo: $.. + char := stream next. + [char isDigit] + whileTrue: [char := stream next]. + version copyFrom: 1 to: stream position - 1] + ifFalse: + [version] + + " + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion + (SystemVersion new version: 'Testing') majorMinorVersion + SystemVersion current majorMinorVersion + " + - stream := ReadStream on: version, 'x'. - stream upTo: $.. - char := stream next. - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." - [char isDigit] - whileTrue: [char := stream next]. - ^ version copyFrom: 1 to: stream position - 1 ! Item was changed: ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- floatPrecisionForDecimalPlaces: places "Answer the floatPrecision that corresponds to the given number of decimal places" ^ places caseOf: {[0]->[1] . + [1]-> [0.1] . + [2]-> [0.01] . + [3]-> [0.001] . + [4]-> [0.0001] . + [5]-> [0.00001] . + [6]-> [0.000001] . + [7]-> [0.0000001] . + [8]-> [0.00000001] . + [9]-> [0.000000001]. + [10]->[0.0000000001]} - [1]->[0.1] . - [2]->[0.01] . - [3]->[0.001] . - [4]->[0.0001] . - [5]->[0.00001] . - [6]->[0.000001] . - [7]->[0.0000001] . - [8]->[0.00000001] . - [9]->[0.000000001]} otherwise: [(10.0 raisedTo: places negated) asFloat] " (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] "! Item was changed: ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- registerInFlapsRegistry "Register the receiver in the system's flaps registry" self environment at: #Flaps + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') forFlapNamed: 'Tools'.]! From commits at source.squeak.org Wed Aug 31 12:46:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:46:39 2016 Subject: [squeak-dev] The Trunk: Files-tfel.162.mcz Message-ID: Tim Felgentreff uploaded a new version of Files to project The Trunk: http://source.squeak.org/trunk/Files-tfel.162.mcz ==================== Summary ==================== Name: Files-tfel.162 Author: tfel Time: 2 August 2016, 9:58:45.471368 am UUID: 24364428-4ff5-ee49-931d-e71b61a634a4 Ancestors: Files-cmm.161, Files-Richo.2 merge from Squeakland Etoys image =============== Diff against Files-cmm.161 =============== Item was changed: ----- Method: FileStream class>>serviceFileIn (in category 'file reader services') ----- serviceFileIn "Answer a service for filing in an entire file" ^ SimpleServiceEntry provider: self + label: 'fileIn entire file' translatedNoop - label: 'fileIn entire file' selector: #fileIn: + description: 'file in the entire contents of the file, which is expected to contain Smalltalk code in fileout ("chunk") format' translatedNoop + buttonLabel: 'filein' translatedNoop! - description: 'file in the entire contents of the file, which is expected to contain Smalltalk code in fileout ("chunk") format' - buttonLabel: 'filein'! Item was changed: ----- Method: FileStream class>>serviceRemoveLineFeeds (in category 'file reader services') ----- serviceRemoveLineFeeds "Answer a service for removing linefeeds from a file" ^ FileModifyingSimpleServiceEntry provider: self + label: 'remove line feeds' translatedNoop - label: 'remove line feeds' selector: #removeLineFeeds: + description: 'remove line feeds in file' translatedNoop + buttonLabel: 'remove lfs' translatedNoop! - description: 'remove line feeds in file' - buttonLabel: 'remove lfs'! Item was changed: ----- Method: MacFileDirectory class>>maxFileNameLength (in category 'platform specific') ----- maxFileNameLength + ^ 32-1! - ^31! Item was changed: ----- Method: RemoteString>>string:onFileNumber: (in category 'private') ----- string: aString onFileNumber: fileNumber "Store this as my string if source files exist." | theFile | (SourceFiles at: fileNumber) == nil ifFalse: + [theFile _ SourceFiles at: fileNumber. + theFile isReadOnly ifTrue: [^ nil]. - [theFile := SourceFiles at: fileNumber. theFile setToEnd; cr. self string: aString onFileNumber: fileNumber toFile: theFile]! From commits at source.squeak.org Wed Aug 31 12:48:00 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:48:03 2016 Subject: [squeak-dev] The Trunk: Network-tfel.183.mcz Message-ID: Tim Felgentreff uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-tfel.183.mcz ==================== Summary ==================== Name: Network-tfel.183 Author: tfel Time: 21 August 2016, 4:46:56.513391 pm UUID: 8ae05b6c-9e45-4b04-af1a-510969feb0f8 Ancestors: Network-ul.182, Network-tfel.181 merge trunk =============== Diff against Network-ul.182 =============== Item was changed: ----- Method: FTPClient>>openPassiveDataConnection (in category 'private protocol') ----- openPassiveDataConnection | portInfo list dataPort remoteHostAddress | self sendCommand: 'PASV'. self lookForCode: 227 ifDifferent: [:response | (TelnetProtocolError protocolInstance: self) signal: 'Could not enter passive mode: ' , response]. - portInfo := (self lastResponse findTokens: '()') at: 2. list := portInfo findTokens: ','. + remoteHostAddress := NetNameResolver addressForName: (list at: 1) + , '.' + , (list at: 2) , '.' + , (list at: 3) , '.' + , (list at: 4) timeout: 30. - remoteHostAddress := ByteArray - with: (list at: 1) asNumber - with: (list at: 2) asNumber - with: (list at: 3) asNumber - with: (list at: 4) asNumber. dataPort := (list at: 5) asNumber * 256 + (list at: 6) asNumber. + self openDataSocket: remoteHostAddress port: dataPort! - self openDataSocket: remoteHostAddress port: dataPort - ! Item was changed: ----- Method: HTTPServerDirectory>>entries (in category 'file directory') ----- + entries + ^ [HTTPClient + getDirectoryListing: (self dirListUrl + ifNil: [^ #()])] + on: NameLookupFailure + do: [^ #()]! - entries - ^HTTPClient getDirectoryListing: self dirListUrl! Item was changed: ----- Method: ProtocolClient>>port (in category 'private') ----- port + ^self connectionInfo at: #port ifAbsent: [nil]! - ^self connectionInfo at: #port! Item was changed: ----- Method: ServerDirectory>>isRoot (in category 'testing') ----- isRoot + ^ directory = '/'! - ^directory = (String with: self pathNameDelimiter)! Item was changed: ----- Method: Socket>>waitForAcceptFor:ifTimedOut: (in category 'waiting') ----- waitForAcceptFor: timeout ifTimedOut: timeoutBlock "Wait and accept an incoming connection" self waitForConnectionFor: timeout ifTimedOut: [^timeoutBlock value]. + ^self isConnected + ifTrue:[self accept] + ! - ^self accept! From commits at source.squeak.org Wed Aug 31 12:48:07 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:48:14 2016 Subject: [squeak-dev] The Trunk: Network-tfel.181.mcz Message-ID: Tim Felgentreff uploaded a new version of Network to project The Trunk: http://source.squeak.org/trunk/Network-tfel.181.mcz ==================== Summary ==================== Name: Network-tfel.181 Author: tfel Time: 2 August 2016, 10:02:39.481368 am UUID: d07e59cc-708a-e444-abea-7ae935cc7cff Ancestors: Network-ul.180, Network-bf.3 merge from Squeakland Etoys image =============== Diff against Network-ul.180 =============== Item was changed: ----- Method: FTPClient>>openPassiveDataConnection (in category 'private protocol') ----- openPassiveDataConnection | portInfo list dataPort remoteHostAddress | self sendCommand: 'PASV'. self lookForCode: 227 ifDifferent: [:response | (TelnetProtocolError protocolInstance: self) signal: 'Could not enter passive mode: ' , response]. - portInfo := (self lastResponse findTokens: '()') at: 2. list := portInfo findTokens: ','. + remoteHostAddress := NetNameResolver addressForName: (list at: 1) + , '.' + , (list at: 2) , '.' + , (list at: 3) , '.' + , (list at: 4) timeout: 30. - remoteHostAddress := ByteArray - with: (list at: 1) asNumber - with: (list at: 2) asNumber - with: (list at: 3) asNumber - with: (list at: 4) asNumber. dataPort := (list at: 5) asNumber * 256 + (list at: 6) asNumber. + self openDataSocket: remoteHostAddress port: dataPort! - self openDataSocket: remoteHostAddress port: dataPort - ! Item was changed: ----- Method: HTTPServerDirectory>>entries (in category 'file directory') ----- + entries + ^ [HTTPClient + getDirectoryListing: (self dirListUrl + ifNil: [^ #()])] + on: NameLookupFailure + do: [^ #()]! - entries - ^HTTPClient getDirectoryListing: self dirListUrl! Item was changed: ----- Method: ProtocolClient>>port (in category 'private') ----- port + ^self connectionInfo at: #port ifAbsent: [nil]! - ^self connectionInfo at: #port! Item was changed: ----- Method: ServerDirectory>>isRoot (in category 'testing') ----- isRoot + ^ directory = '/'! - ^directory = (String with: self pathNameDelimiter)! Item was changed: ----- Method: Socket>>waitForAcceptFor:ifTimedOut: (in category 'waiting') ----- waitForAcceptFor: timeout ifTimedOut: timeoutBlock "Wait and accept an incoming connection" self waitForConnectionFor: timeout ifTimedOut: [^timeoutBlock value]. + ^self isConnected + ifTrue:[self accept] + ! - ^self accept! From commits at source.squeak.org Wed Aug 31 12:48:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:48:50 2016 Subject: [squeak-dev] The Trunk: TrueType-tfel.45.mcz Message-ID: Tim Felgentreff uploaded a new version of TrueType to project The Trunk: http://source.squeak.org/trunk/TrueType-tfel.45.mcz ==================== Summary ==================== Name: TrueType-tfel.45 Author: tfel Time: 21 August 2016, 4:51:06.015391 pm UUID: e1ed3f29-176b-4b3d-8b1d-b755b525da92 Ancestors: TrueType-mt.44, TrueType-tfel.44 merge trunk =============== Diff against TrueType-mt.44 =============== Item was changed: + ----- Method: TTFontDescription class>>removeDescriptionNamed:subfamilyName: (in category 'instance creations') ----- - ----- Method: TTFontDescription class>>removeDescriptionNamed:subfamilyName: (in category 'instance creation') ----- removeDescriptionNamed: descriptionName subfamilyName: subfamilyName | tts | Descriptions ifNil: [^ self]. + tts _ Descriptions select: [:f | f first name = descriptionName and: [f first subfamilyName = subfamilyName]]. - tts := Descriptions select: [:f | f name = descriptionName and: [f subfamilyName = subfamilyName]]. tts do: [:f | Descriptions remove: f]. ! Item was changed: ----- Method: TTFontDescription>>at: (in category 'accessing') ----- at: aCharOrInteger + ^glyphTable at: (aCharOrInteger isCharacter ifTrue: [aCharOrInteger charCode] ifFalse: [aCharOrInteger])+1! - ^glyphTable at: aCharOrInteger asInteger+1! Item was changed: ----- Method: TTFontReader class>>serviceOpenTrueTypeFont (in category 'class initialization') ----- serviceOpenTrueTypeFont ^ SimpleServiceEntry provider: self + label: 'open true type font' translatedNoop - label: 'open true type font' selector: #openTTFFile: + description: 'open true type font' translatedNoop! - description: 'open true type font'! From commits at source.squeak.org Wed Aug 31 12:48:55 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:49:02 2016 Subject: [squeak-dev] The Trunk: TrueType-tfel.44.mcz Message-ID: Tim Felgentreff uploaded a new version of TrueType to project The Trunk: http://source.squeak.org/trunk/TrueType-tfel.44.mcz ==================== Summary ==================== Name: TrueType-tfel.44 Author: tfel Time: 2 August 2016, 10:05:53.988368 am UUID: 4f4ae2de-5c0e-aa42-8cf2-237c73ad235c Ancestors: TrueType-mt.43, TrueType-bf.7 merge from Squeakland Etoys image =============== Diff against TrueType-mt.43 =============== Item was changed: + ----- Method: TTFontDescription class>>removeDescriptionNamed:subfamilyName: (in category 'instance creations') ----- - ----- Method: TTFontDescription class>>removeDescriptionNamed:subfamilyName: (in category 'instance creation') ----- removeDescriptionNamed: descriptionName subfamilyName: subfamilyName | tts | Descriptions ifNil: [^ self]. + tts _ Descriptions select: [:f | f first name = descriptionName and: [f first subfamilyName = subfamilyName]]. - tts := Descriptions select: [:f | f name = descriptionName and: [f subfamilyName = subfamilyName]]. tts do: [:f | Descriptions remove: f]. ! Item was changed: ----- Method: TTFontDescription>>at: (in category 'accessing') ----- at: aCharOrInteger + ^glyphTable at: (aCharOrInteger isCharacter ifTrue: [aCharOrInteger charCode] ifFalse: [aCharOrInteger])+1! - ^glyphTable at: aCharOrInteger asInteger+1! Item was changed: ----- Method: TTFontReader class>>serviceOpenTrueTypeFont (in category 'class initialization') ----- serviceOpenTrueTypeFont ^ SimpleServiceEntry provider: self + label: 'open true type font' translatedNoop - label: 'open true type font' selector: #openTTFFile: + description: 'open true type font' translatedNoop! - description: 'open true type font'! From commits at source.squeak.org Wed Aug 31 12:51:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:51:36 2016 Subject: [squeak-dev] The Trunk: Graphics-tfel.358.mcz Message-ID: Tim Felgentreff uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-tfel.358.mcz ==================== Summary ==================== Name: Graphics-tfel.358 Author: tfel Time: 8 August 2016, 8:58:52.805735 am UUID: f2b076dd-eefc-844f-9899-a17dc878b0df Ancestors: Graphics-tfel.357, Graphics-mt.357 merge trunk =============== Diff against Graphics-mt.357 =============== Item was changed: ----- Method: Form class>>importImage: (in category 'fileIn/Out') ----- importImage: fullName "Import the given image file and store the resulting Form in the default Imports. + The image is named with the short filename up to the first period, possibly with additions from the directory path to make it unique. Does nothing if called with nil fullName." - The image is named with the short filename up to the first period, possibly with additions from the directory path to make it unique." + fullName ifNotNil: + [Imports default importImageFromFileNamed: fullName] - Imports default importImageFromFileNamed: fullName. ! Item was changed: ----- Method: Form class>>openAsBackground: (in category 'file list services') ----- openAsBackground: fullName "Set an image as a background image. Support Squeak's common file format + (GIF, JPG, PNG, 'Form stoteOn: (run coded)' and BMP). + If name provided is nil, does nothing." - (GIF, JPG, PNG, 'Form stoteOn: (run coded)' and BMP)" + fullName ifNotNil: + [(self fromFileNamed: fullName) setAsBackground]! - (self fromFileNamed: fullName) setAsBackground! Item was changed: ----- Method: Form class>>serviceImageAsBackground (in category 'file list services') ----- serviceImageAsBackground "Answer a service for setting the desktop background from a given graphical file's contents" ^ SimpleServiceEntry provider: self + label: 'use graphic as background' translatedNoop - label: 'use graphic as background' selector: #openAsBackground: + description: 'use the graphic as the background for the desktop' translatedNoop + buttonLabel: 'background' translatedNoop! - description: 'use the graphic as the background for the desktop' - buttonLabel: 'background'! Item was changed: ----- Method: Form class>>serviceImageImportDirectory (in category 'file list services') ----- serviceImageImportDirectory "Answer a service for reading a graphic into ImageImports" ^(SimpleServiceEntry provider: self + label: 'import all images from this directory' translatedNoop - label: 'import all images from this directory' selector: #importImageDirectory: + description: 'Load all graphics found in this directory, adding them to the ImageImports repository.' translatedNoop + buttonLabel: 'import dir' translatedNoop) - description: 'Load all graphics found in this directory, adding them to the ImageImports repository.' - buttonLabel: 'import dir') argumentGetter: [ :fileList | fileList directory ]; yourself ! Item was changed: ----- Method: Form class>>serviceImageImportDirectoryWithSubdirectories (in category 'file list services') ----- serviceImageImportDirectoryWithSubdirectories "Answer a service for reading all graphics from a directory and its subdirectories into ImageImports" ^(SimpleServiceEntry provider: self + label: 'import all images from here and subdirectories' translatedNoop - label: 'import all images from here and subdirectories' selector: #importImageDirectoryWithSubdirectories: + description: 'Load all graphics found in this directory and its subdirectories, adding them to the ImageImports repository.' translatedNoop + buttonLabel: 'import subdirs' translatedNoop) - description: 'Load all graphics found in this directory and its subdirectories, adding them to the ImageImports repository.' - buttonLabel: 'import subdirs') argumentGetter: [ :fileList | fileList directory ]; yourself ! Item was changed: ----- Method: Form class>>serviceOpenImageInWindow (in category 'file list services') ----- serviceOpenImageInWindow "Answer a service for opening a graphic in a window" ^ SimpleServiceEntry provider: self + label: 'open graphic in a window' translatedNoop - label: 'open graphic in a window' selector: #openImageInWindow: + description: 'open a graphic file in a window' translatedNoop + buttonLabel: 'open' translatedNoop! - description: 'open a graphic file in a window' - buttonLabel: 'open'! Item was changed: ----- Method: Form class>>services (in category 'file list services') ----- services + | a | + a _ Array with: self serviceOpenImageInWindow. + + Preferences eToyFriendly ifFalse: [ + a _ (Array with: self serviceImageAsBackground with: self serviceImageImports), a. + ]. + ^ a. + + ! - ^ Array - with: self serviceImageImports - with: self serviceOpenImageInWindow - with: self serviceImageAsBackground ! Item was changed: ----- Method: GIFReadWriter>>readBitData (in category 'private-decoding') ----- readBitData "using modified Lempel-Ziv Welch algorithm." | outCodes outCount bitMask initCodeSize code curCode oldCode inCode finChar i bytes f c packedBits hasLocalColor localColorSize maxOutCodes | + maxOutCodes _ 4096. - maxOutCodes := 4096. offset := self readWord@self readWord. "Image Left@Image Top" + width _ self readWord. + height _ self readWord. - width := self readWord. - height := self readWord. "--- Local Color Table Flag 1 Bit Interlace Flag 1 Bit Sort Flag 1 Bit Reserved 2 Bits Size of Local Color Table 3 Bits ----" + packedBits _ self next. + interlace _ (packedBits bitAnd: 16r40) ~= 0. + hasLocalColor _ (packedBits bitAnd: 16r80) ~= 0. + localColorSize _ 1 bitShift: ((packedBits bitAnd: 16r7) + 1). + hasLocalColor ifTrue: [localColorTable _ self readColorTable: localColorSize]. - packedBits := self next. - interlace := (packedBits bitAnd: 16r40) ~= 0. - hasLocalColor := (packedBits bitAnd: 16r80) ~= 0. - localColorSize := 1 bitShift: ((packedBits bitAnd: 16r7) + 1). - hasLocalColor ifTrue: [localColorTable := self readColorTable: localColorSize]. + pass _ 0. + xpos _ 0. + ypos _ 0. + rowByteSize _ ((width + 3) // 4) * 4. + remainBitCount _ 0. + bufByte _ 0. + bufStream _ ReadStream on: ByteArray new. - pass := 0. - xpos := 0. - ypos := 0. - rowByteSize := ((width + 3) // 4) * 4. - remainBitCount := 0. - bufByte := 0. - bufStream := ReadStream on: ByteArray new. + outCodes _ ByteArray new: maxOutCodes + 1. + outCount _ 0. + + prefixTable _ Array new: 4096. + suffixTable _ Array new: 4096. - outCodes := ByteArray new: maxOutCodes + 1. - outCount := 0. - bitMask := (1 bitShift: bitsPerPixel) - 1. - prefixTable := Array new: 4096. - suffixTable := Array new: 4096. + initCodeSize _ self next. + bitMask _ (1 bitShift: initCodeSize ) - 1. - initCodeSize := self next. - self setParameters: initCodeSize. bitsPerPixel > 8 ifTrue: [^self error: 'never heard of a GIF that deep']. + bytes _ ByteArray new: rowByteSize * height. + [(code _ self readCode) = eoiCode] whileFalse: - bytes := ByteArray new: rowByteSize * height. - [(code := self readCode) = eoiCode] whileFalse: [code = clearCode ifTrue: [self setParameters: initCodeSize. + curCode _ oldCode _ code _ self readCode. + finChar _ curCode bitAnd: bitMask. - curCode := oldCode := code := self readCode. - finChar := curCode bitAnd: bitMask. "Horrible hack to avoid running off the end of the bitmap. Seems to cure problem reading some gifs!!? tk 6/24/97 20:16" xpos = 0 ifTrue: [ ypos < height ifTrue: [ bytes at: (ypos * rowByteSize) + xpos + 1 put: finChar]] ifFalse: [bytes at: (ypos * rowByteSize) + xpos + 1 put: finChar]. self updatePixelPosition] ifFalse: + [curCode _ inCode _ code. - [curCode := inCode := code. curCode >= freeCode ifTrue: + [curCode _ oldCode. + outCodes at: (outCount _ outCount + 1) put: finChar]. - [curCode := oldCode. - outCodes at: (outCount := outCount + 1) put: finChar]. [curCode > bitMask] whileTrue: [outCount > maxOutCodes ifTrue: [^self error: 'corrupt GIF file (OutCount)']. + outCodes at: (outCount _ outCount + 1) - outCodes at: (outCount := outCount + 1) put: (suffixTable at: curCode + 1). + curCode _ prefixTable at: curCode + 1]. + finChar _ curCode bitAnd: bitMask. + outCodes at: (outCount _ outCount + 1) put: finChar. + i _ outCount. - curCode := prefixTable at: curCode + 1]. - finChar := curCode bitAnd: bitMask. - outCodes at: (outCount := outCount + 1) put: finChar. - i := outCount. [i > 0] whileTrue: ["self writePixel: (outCodes at: i) to: bits" bytes at: (ypos * rowByteSize) + xpos + 1 put: (outCodes at: i). self updatePixelPosition. + i _ i - 1]. + outCount _ 0. - i := i - 1]. - outCount := 0. prefixTable at: freeCode + 1 put: oldCode. suffixTable at: freeCode + 1 put: finChar. + oldCode _ inCode. + freeCode _ freeCode + 1. - oldCode := inCode. - freeCode := freeCode + 1. self checkCodeSize]]. + prefixTable _ suffixTable _ nil. - prefixTable := suffixTable := nil. + f _ ColorForm extent: width@height depth: 8. - f := ColorForm extent: width@height depth: 8. f bits copyFromByteArray: bytes. "Squeak can handle depths 1, 2, 4, and 8" bitsPerPixel > 4 ifTrue: [^ f]. "reduce depth to save space" + c _ ColorForm extent: width@height - c := ColorForm extent: width@height depth: (bitsPerPixel = 3 ifTrue: [4] ifFalse: [bitsPerPixel]). f displayOn: c. ^ c ! Item was changed: ----- Method: JPEGReadWriter class>>typicalFileExtensions (in category 'image reading/writing') ----- typicalFileExtensions "Answer a collection of file extensions (lowercase) which files that I can read might commonly have" + ^#('jpg' 'jpeg' 'jpe')! - ^#('jpg' 'jpeg')! Item was changed: ----- Method: JPEGReadWriter2 class>>typicalFileExtensions (in category 'image reading/writing') ----- typicalFileExtensions "Answer a collection of file extensions (lowercase) which files that I can read might commonly have" + ^#('jpg' 'jpeg' 'jpe')! - ^#('jpg' 'jpeg')! From commits at source.squeak.org Wed Aug 31 12:51:33 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 12:51:54 2016 Subject: [squeak-dev] The Trunk: Graphics-tfel.361.mcz Message-ID: Tim Felgentreff uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-tfel.361.mcz ==================== Summary ==================== Name: Graphics-tfel.361 Author: tfel Time: 18 August 2016, 5:43:29.688286 pm UUID: 5549d092-1850-4b4a-91e7-28aa271ebe0a Ancestors: Graphics-mt.360, Graphics-tfel.358 merge trunk =============== Diff against Graphics-mt.360 =============== Item was changed: ----- Method: Form class>>importImage: (in category 'fileIn/Out') ----- importImage: fullName "Import the given image file and store the resulting Form in the default Imports. + The image is named with the short filename up to the first period, possibly with additions from the directory path to make it unique. Does nothing if called with nil fullName." - The image is named with the short filename up to the first period, possibly with additions from the directory path to make it unique." + fullName ifNotNil: + [Imports default importImageFromFileNamed: fullName] - Imports default importImageFromFileNamed: fullName. ! Item was changed: ----- Method: Form class>>openAsBackground: (in category 'file list services') ----- openAsBackground: fullName "Set an image as a background image. Support Squeak's common file format + (GIF, JPG, PNG, 'Form stoteOn: (run coded)' and BMP). + If name provided is nil, does nothing." - (GIF, JPG, PNG, 'Form stoteOn: (run coded)' and BMP)" + fullName ifNotNil: + [(self fromFileNamed: fullName) setAsBackground]! - (self fromFileNamed: fullName) setAsBackground! Item was changed: ----- Method: Form class>>serviceImageAsBackground (in category 'file list services') ----- serviceImageAsBackground "Answer a service for setting the desktop background from a given graphical file's contents" ^ SimpleServiceEntry provider: self + label: 'use graphic as background' translatedNoop - label: 'use graphic as background' selector: #openAsBackground: + description: 'use the graphic as the background for the desktop' translatedNoop + buttonLabel: 'background' translatedNoop! - description: 'use the graphic as the background for the desktop' - buttonLabel: 'background'! Item was changed: ----- Method: Form class>>serviceImageImportDirectory (in category 'file list services') ----- serviceImageImportDirectory "Answer a service for reading a graphic into ImageImports" ^(SimpleServiceEntry provider: self + label: 'import all images from this directory' translatedNoop - label: 'import all images from this directory' selector: #importImageDirectory: + description: 'Load all graphics found in this directory, adding them to the ImageImports repository.' translatedNoop + buttonLabel: 'import dir' translatedNoop) - description: 'Load all graphics found in this directory, adding them to the ImageImports repository.' - buttonLabel: 'import dir') argumentGetter: [ :fileList | fileList directory ]; yourself ! Item was changed: ----- Method: Form class>>serviceImageImportDirectoryWithSubdirectories (in category 'file list services') ----- serviceImageImportDirectoryWithSubdirectories "Answer a service for reading all graphics from a directory and its subdirectories into ImageImports" ^(SimpleServiceEntry provider: self + label: 'import all images from here and subdirectories' translatedNoop - label: 'import all images from here and subdirectories' selector: #importImageDirectoryWithSubdirectories: + description: 'Load all graphics found in this directory and its subdirectories, adding them to the ImageImports repository.' translatedNoop + buttonLabel: 'import subdirs' translatedNoop) - description: 'Load all graphics found in this directory and its subdirectories, adding them to the ImageImports repository.' - buttonLabel: 'import subdirs') argumentGetter: [ :fileList | fileList directory ]; yourself ! Item was changed: ----- Method: Form class>>serviceOpenImageInWindow (in category 'file list services') ----- serviceOpenImageInWindow "Answer a service for opening a graphic in a window" ^ SimpleServiceEntry provider: self + label: 'open graphic in a window' translatedNoop - label: 'open graphic in a window' selector: #openImageInWindow: + description: 'open a graphic file in a window' translatedNoop + buttonLabel: 'open' translatedNoop! - description: 'open a graphic file in a window' - buttonLabel: 'open'! Item was changed: ----- Method: Form class>>services (in category 'file list services') ----- services + | a | + a _ Array with: self serviceOpenImageInWindow. + + Preferences eToyFriendly ifFalse: [ + a _ (Array with: self serviceImageAsBackground with: self serviceImageImports), a. + ]. + ^ a. + + ! - ^ Array - with: self serviceImageImports - with: self serviceImageImportAndShowImports - with: self serviceOpenImageInWindow - with: self serviceImageAsBackground ! Item was changed: ----- Method: GIFReadWriter>>readBitData (in category 'private-decoding') ----- readBitData "using modified Lempel-Ziv Welch algorithm." | outCodes outCount bitMask initCodeSize code curCode oldCode inCode finChar i bytes f c packedBits hasLocalColor localColorSize maxOutCodes | + maxOutCodes _ 4096. - maxOutCodes := 4096. offset := self readWord@self readWord. "Image Left@Image Top" + width _ self readWord. + height _ self readWord. - width := self readWord. - height := self readWord. "--- Local Color Table Flag 1 Bit Interlace Flag 1 Bit Sort Flag 1 Bit Reserved 2 Bits Size of Local Color Table 3 Bits ----" + packedBits _ self next. + interlace _ (packedBits bitAnd: 16r40) ~= 0. + hasLocalColor _ (packedBits bitAnd: 16r80) ~= 0. + localColorSize _ 1 bitShift: ((packedBits bitAnd: 16r7) + 1). + hasLocalColor ifTrue: [localColorTable _ self readColorTable: localColorSize]. - packedBits := self next. - interlace := (packedBits bitAnd: 16r40) ~= 0. - hasLocalColor := (packedBits bitAnd: 16r80) ~= 0. - localColorSize := 1 bitShift: ((packedBits bitAnd: 16r7) + 1). - hasLocalColor ifTrue: [localColorTable := self readColorTable: localColorSize]. + pass _ 0. + xpos _ 0. + ypos _ 0. + rowByteSize _ ((width + 3) // 4) * 4. + remainBitCount _ 0. + bufByte _ 0. + bufStream _ ReadStream on: ByteArray new. - pass := 0. - xpos := 0. - ypos := 0. - rowByteSize := ((width + 3) // 4) * 4. - remainBitCount := 0. - bufByte := 0. - bufStream := ReadStream on: ByteArray new. + outCodes _ ByteArray new: maxOutCodes + 1. + outCount _ 0. + + prefixTable _ Array new: 4096. + suffixTable _ Array new: 4096. - outCodes := ByteArray new: maxOutCodes + 1. - outCount := 0. - bitMask := (1 bitShift: bitsPerPixel) - 1. - prefixTable := Array new: 4096. - suffixTable := Array new: 4096. + initCodeSize _ self next. + bitMask _ (1 bitShift: initCodeSize ) - 1. - initCodeSize := self next. - self setParameters: initCodeSize. bitsPerPixel > 8 ifTrue: [^self error: 'never heard of a GIF that deep']. + bytes _ ByteArray new: rowByteSize * height. + [(code _ self readCode) = eoiCode] whileFalse: - bytes := ByteArray new: rowByteSize * height. - [(code := self readCode) = eoiCode] whileFalse: [code = clearCode ifTrue: [self setParameters: initCodeSize. + curCode _ oldCode _ code _ self readCode. + finChar _ curCode bitAnd: bitMask. - curCode := oldCode := code := self readCode. - finChar := curCode bitAnd: bitMask. "Horrible hack to avoid running off the end of the bitmap. Seems to cure problem reading some gifs!!? tk 6/24/97 20:16" xpos = 0 ifTrue: [ ypos < height ifTrue: [ bytes at: (ypos * rowByteSize) + xpos + 1 put: finChar]] ifFalse: [bytes at: (ypos * rowByteSize) + xpos + 1 put: finChar]. self updatePixelPosition] ifFalse: + [curCode _ inCode _ code. - [curCode := inCode := code. curCode >= freeCode ifTrue: + [curCode _ oldCode. + outCodes at: (outCount _ outCount + 1) put: finChar]. - [curCode := oldCode. - outCodes at: (outCount := outCount + 1) put: finChar]. [curCode > bitMask] whileTrue: [outCount > maxOutCodes ifTrue: [^self error: 'corrupt GIF file (OutCount)']. + outCodes at: (outCount _ outCount + 1) - outCodes at: (outCount := outCount + 1) put: (suffixTable at: curCode + 1). + curCode _ prefixTable at: curCode + 1]. + finChar _ curCode bitAnd: bitMask. + outCodes at: (outCount _ outCount + 1) put: finChar. + i _ outCount. - curCode := prefixTable at: curCode + 1]. - finChar := curCode bitAnd: bitMask. - outCodes at: (outCount := outCount + 1) put: finChar. - i := outCount. [i > 0] whileTrue: ["self writePixel: (outCodes at: i) to: bits" bytes at: (ypos * rowByteSize) + xpos + 1 put: (outCodes at: i). self updatePixelPosition. + i _ i - 1]. + outCount _ 0. - i := i - 1]. - outCount := 0. prefixTable at: freeCode + 1 put: oldCode. suffixTable at: freeCode + 1 put: finChar. + oldCode _ inCode. + freeCode _ freeCode + 1. - oldCode := inCode. - freeCode := freeCode + 1. self checkCodeSize]]. + prefixTable _ suffixTable _ nil. - prefixTable := suffixTable := nil. + f _ ColorForm extent: width@height depth: 8. - f := ColorForm extent: width@height depth: 8. f bits copyFromByteArray: bytes. "Squeak can handle depths 1, 2, 4, and 8" bitsPerPixel > 4 ifTrue: [^ f]. "reduce depth to save space" + c _ ColorForm extent: width@height - c := ColorForm extent: width@height depth: (bitsPerPixel = 3 ifTrue: [4] ifFalse: [bitsPerPixel]). f displayOn: c. ^ c ! Item was changed: ----- Method: JPEGReadWriter class>>typicalFileExtensions (in category 'image reading/writing') ----- typicalFileExtensions "Answer a collection of file extensions (lowercase) which files that I can read might commonly have" + ^#('jpg' 'jpeg' 'jpe')! - ^#('jpg' 'jpeg')! Item was changed: ----- Method: JPEGReadWriter2 class>>typicalFileExtensions (in category 'image reading/writing') ----- typicalFileExtensions "Answer a collection of file extensions (lowercase) which files that I can read might commonly have" + ^#('jpg' 'jpeg' 'jpe')! - ^#('jpg' 'jpeg')! From commits at source.squeak.org Wed Aug 31 13:14:20 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 13:14:22 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.225.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.225.mcz ==================== Summary ==================== Name: EToys-tfel.225 Author: tfel Time: 31 August 2016, 3:13:09.554793 pm UUID: b4c31ceb-3ed5-ba40-a351-1672deafcacd Ancestors: EToys-tfel.224 if any subnode of a message node sends a sequential selector, we need to make the node itself sequential, too =============== Diff against EToys-tfel.224 =============== Item was changed: ----- Method: KedamaExamplerPlayer>>containsSequentialSelector: (in category '*Etoys-Squeakland-private') ----- containsSequentialSelector: aSymbol + ^ (#(random random: atRandom) includes: aSymbol)! - ^ (#(random random:) includes: aSymbol)! Item was changed: ----- Method: KedamaTurtleMethodAttributionDefinition2 class>>determineStatementType:fromDict:primaryBreedPair:messageType:isStatement:receiverObject: (in category 'rules') ----- determineStatementType: parentStmtType fromDict: dict primaryBreedPair: myPrimaryBreedPair messageType: myMessageType isStatement: myIsStatement receiverObject: myReceiverObject | vectorTurtle turtleSelectors participants reads writes unknownReceiverSelectors | "Do the calculation only at the statement level." myIsStatement ifFalse: [^ parentStmtType]. "If there is a doSequentially: block, the block is sequential." participants := dict at: self. (participants select: [:e | (e first notNil and: [e first isPrototypeTurtlePlayer])]) size = 0 ifTrue: [^ #none]. myMessageType = #sequential ifTrue: [^ #sequential]. parentStmtType = #sequential ifTrue: [^ #sequential]. "If there is not turtle involved in the statement, it is not transformed." myPrimaryBreedPair ifNil: [^ #none]. vectorTurtle := myPrimaryBreedPair first. myMessageType = #condition ifTrue: [ reads := IdentitySet new. writes := IdentitySet new. participants do: [:list | (((list at: 5) = #testBody or: [(list at: 5) = #testCond]) and: [(list at: 4) ~= #read]) ifTrue: [list first ifNotNil: [writes add: list first]]. (((list at: 5) = #testBody or: [(list at: 5) = #testCond]) and: [(list at: 4) = #read]) ifTrue: [list first ifNotNil: [reads add: list first]]. ]. ((writes intersection: reads) copyWithout: vectorTurtle) ifNotEmpty: [ ^ #sequential ]. ^ #parallel. ]. reads := IdentitySet new. writes := IdentitySet new. turtleSelectors := OrderedCollection new. unknownReceiverSelectors := OrderedCollection new. participants do: [:list | list first = vectorTurtle ifTrue: [ ((vectorTurtle isBreedSelector: list second) or: [ (vectorTurtle isUserDefinedSelector: list second)]) ifFalse: [ turtleSelectors add: list second ]. ]. list first ifNil: [unknownReceiverSelectors add: list second] ifNotNil: [ ((list at: 4) == #read) ifTrue: [reads add: list first]. ((list at: 4) == #read) ifFalse: [writes add: list first]. ]. (vectorTurtle containsSequentialSelector: list second) ifTrue: [^ #sequential]. ]. (turtleSelectors includes: #die) ifTrue: [^ #die]. (((self isKindOf: AssignmentNode) and: [myReceiverObject = vectorTurtle]) and: [vectorTurtle isBreedSelector: self property property]) ifTrue: [^ #none]. (vectorTurtle areOkaySelectors: unknownReceiverSelectors) ifFalse: [ ^ #sequential. ]. (vectorTurtle vectorizableTheseSelectors: turtleSelectors) ifFalse: [^ #sequential]. ((reads intersection: writes) copyWithout: vectorTurtle) ifNotEmpty: [^ #sequential]. + + "Check the hard way. If any leaf nodes" + self nodesDo: [:node | + (node isMessageNode and: [vectorTurtle containsSequentialSelector: node selector]) + ifTrue: [^ #sequential]]. + ^ #parallel. ! Item was changed: ----- Method: MessageAsTempNode>>determineStatementType:fromDict:primaryBreedPair:messageType:isStatement:receiverObject: (in category '*Etoys-Tweak-Kedama-Generated') ----- determineStatementType: t1 fromDict: t2 primaryBreedPair: t3 messageType: t4 isStatement: t5 receiverObject: t6 | t7 t8 t9 t10 t11 t13 | t5 ifFalse: [^ t1]. t9 := t2 at: self. (t9 select: [:t14 | t14 first notNil and: [t14 first isPrototypeTurtlePlayer]]) size = 0 ifTrue: [^ #none]. t4 = #sequential ifTrue: [^ #sequential]. t1 = #sequential ifTrue: [^ #sequential]. t3 ifNil: [^ #none]. t7 := t3 first. t4 = #condition ifTrue: [t11 := IdentitySet new. t13 := IdentitySet new. t9 do: [:t14 | (((t14 at: 5) = #testBody or: [(t14 at: 5) = #testCond]) and: [(t14 at: 4) ~= #read]) ifTrue: [t14 first ifNotNil: [t13 add: t14 first]]. (((t14 at: 5) = #testBody or: [(t14 at: 5) = #testCond]) and: [(t14 at: 4) = #read]) ifTrue: [t14 first ifNotNil: [t11 add: t14 first]]]. ((t13 intersection: t11) copyWithout: t7) ifNotEmpty: [^ #sequential]. ^ #parallel]. t11 := IdentitySet new. t13 := IdentitySet new. t8 := OrderedCollection new. t10 := OrderedCollection new. t9 do: [:t14 | t14 first = t7 ifTrue: [((t7 isBreedSelector: t14 second) or: [t7 isUserDefinedSelector: t14 second]) ifFalse: [t8 add: t14 second]]. t14 first ifNil: [t10 add: t14 second] ifNotNil: [(t14 at: 4) == #read ifTrue: [t11 add: t14 first]. (t14 at: 4) == #read ifFalse: [t13 add: t14 first]]. (t7 containsSequentialSelector: t14 second) ifTrue: [^ #sequential]]. (t8 includes: #die) ifTrue: [^ #die]. (((self isKindOf: AssignmentNode) and: [t6 = t7]) and: [t7 isBreedSelector: self property property]) ifTrue: [^ #none]. (t7 areOkaySelectors: t10) ifFalse: [^ #sequential]. (t7 vectorizableTheseSelectors: t8) ifFalse: [^ #sequential]. ((t11 intersection: t13) copyWithout: t7) ifNotEmpty: [^ #sequential]. + self + nodesDo: [:t14 | (t14 isLeaf + and: [t7 containsSequentialSelector: t14 key]) + ifTrue: [^ #sequential]]. ^ #parallel! Item was changed: ----- Method: MessageNode>>determineStatementType:fromDict:primaryBreedPair:messageType:isStatement:receiverObject: (in category '*Etoys-Tweak-Kedama-Generated') ----- determineStatementType: t1 fromDict: t2 primaryBreedPair: t3 messageType: t4 isStatement: t5 receiverObject: t6 | t7 t8 t9 t10 t11 t13 | t5 ifFalse: [^ t1]. t9 := t2 at: self. (t9 select: [:t14 | t14 first notNil and: [t14 first isPrototypeTurtlePlayer]]) size = 0 ifTrue: [^ #none]. t4 = #sequential ifTrue: [^ #sequential]. t1 = #sequential ifTrue: [^ #sequential]. t3 ifNil: [^ #none]. t7 := t3 first. t4 = #condition ifTrue: [t11 := IdentitySet new. t13 := IdentitySet new. t9 do: [:t14 | (((t14 at: 5) = #testBody or: [(t14 at: 5) = #testCond]) and: [(t14 at: 4) ~= #read]) ifTrue: [t14 first ifNotNil: [t13 add: t14 first]]. (((t14 at: 5) = #testBody or: [(t14 at: 5) = #testCond]) and: [(t14 at: 4) = #read]) ifTrue: [t14 first ifNotNil: [t11 add: t14 first]]]. ((t13 intersection: t11) copyWithout: t7) ifNotEmpty: [^ #sequential]. ^ #parallel]. t11 := IdentitySet new. t13 := IdentitySet new. t8 := OrderedCollection new. t10 := OrderedCollection new. t9 do: [:t14 | t14 first = t7 ifTrue: [((t7 isBreedSelector: t14 second) or: [t7 isUserDefinedSelector: t14 second]) ifFalse: [t8 add: t14 second]]. t14 first ifNil: [t10 add: t14 second] ifNotNil: [(t14 at: 4) == #read ifTrue: [t11 add: t14 first]. (t14 at: 4) == #read ifFalse: [t13 add: t14 first]]. (t7 containsSequentialSelector: t14 second) ifTrue: [^ #sequential]]. (t8 includes: #die) ifTrue: [^ #die]. (((self isKindOf: AssignmentNode) and: [t6 = t7]) and: [t7 isBreedSelector: self property property]) ifTrue: [^ #none]. (t7 areOkaySelectors: t10) ifFalse: [^ #sequential]. (t7 vectorizableTheseSelectors: t8) ifFalse: [^ #sequential]. ((t11 intersection: t13) copyWithout: t7) ifNotEmpty: [^ #sequential]. + self + nodesDo: [:t14 | (t14 isLeaf + and: [t7 containsSequentialSelector: t14 key]) + ifTrue: [^ #sequential]]. ^ #parallel! From commits at source.squeak.org Wed Aug 31 14:41:10 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 14:41:11 2016 Subject: [squeak-dev] The Inbox: EToys-jl.224.mcz Message-ID: A new version of EToys was added to project The Inbox: http://source.squeak.org/inbox/EToys-jl.224.mcz ==================== Summary ==================== Name: EToys-jl.224 Author: jl Time: 31 August 2016, 4:40:01.094637 pm UUID: df8cd49e-5ee7-4c4d-a115-c51127d5bd7b Ancestors: EToys-jl.223 implenented dimensions width and height for kedama =============== Diff against EToys-jl.223 =============== Item was changed: ----- Method: KedamaMorph class>>additionsToViewerCategories (in category 'class initialization') ----- additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (kedama ( (command addToPatchDisplayList: 'add patch to display list' Patch) (command removeAllFromPatchDisplayList 'clear the patch display list') (slot patchDisplayList 'patches to display' String readOnly Player getPatchesList unused unused) (command addToTurtleDisplayList: 'add turtle to display list' Player) (command removeAllFromTurtleDisplayList 'clear the turtle display list') (slot turtleDisplayList 'turtles to display' String readOnly Player getTurtlesList unused unused) (slot pixelsPerPatch 'the display scale' Number readWrite Player getPixelsPerPatch Player setPixelsPerPatch:) + (slot dimensionsWidth 'widht of kedma world' Number readWrite Player getDimensionsWidth Player setDimensionsWidth:) + (slot dimensionsHeigth 'height of kedama world' Number readWrite Player getDimensionsHeight Player setDimensionsHeight:) - (slot dimensions 'the turtles in x and y direction' Point readWrite Player getDimensions Player setDimensions:) (slot color 'The color of the object' Color readWrite Player getColor Player setColor:) "(command makeTurtlesMap 'Internally create the map of turtles')" (slot leftEdgeMode 'the mode of left edge' EdgeMode readWrite Player getLeftEdgeMode Player setLeftEdgeMode:) (slot rightEdgeMode 'the mode of right edge' EdgeMode readWrite Player getRightEdgeMode Player setRightEdgeMode:) (slot topEdgeMode 'the mode of top edge' EdgeMode readWrite Player getTopEdgeMode Player setTopEdgeMode:) (slot bottomEdgeMode 'the mode of bottom edge' EdgeMode readWrite Player getBottomEdgeMode Player setBottomEdgeMode:) )) ). ! Item was changed: ----- Method: KedamaMorph>>dimensions: (in category 'accessing') ----- + dimensions: anExtent + dimensions := anExtent. - dimensions: aPoint - - dimensions := aPoint. wrapX := dimensions x asFloat. wrapY := dimensions y asFloat. patchVarDisplayForm := Form extent: dimensions depth: 32. + patchesToDisplay do: [ :ea | + ea newExtent: anExtent. + ]. self pixelsPerPatch: self pixelsPerPatch.! Item was added: + ----- Method: Player>>getDimensionsHeight (in category 'slot-kedama') ----- + getDimensionsHeight + + ^ (self getValueFromCostume: #dimensions) y. + ! Item was added: + ----- Method: Player>>getDimensionsWidth (in category 'slot-kedama') ----- + getDimensionsWidth + + ^ (self getValueFromCostume: #dimensions) x. + ! Item was changed: ----- Method: Player>>setDimensions: (in category 'slot-kedama') ----- + setDimensions: asPoint - setDimensions: aNumber + ^ self setCostumeSlot: #dimensions: toValue: asPoint. - ^ self setCostumeSlot: #dimensions: toValue: aNumber asPoint. ! Item was added: + ----- Method: Player>>setDimensionsHeight: (in category 'slot-kedama') ----- + setDimensionsHeight: aNumber + + ^ self setDimensions: self getDimensionsWidth @ aNumber. + ! Item was added: + ----- Method: Player>>setDimensionsWidth: (in category 'slot-kedama') ----- + setDimensionsWidth: aNumber + + ^ self setDimensions: aNumber @ self getDimensionsHeight. + ! From commits at source.squeak.org Wed Aug 31 14:46:21 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 14:46:25 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.226.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.226.mcz ==================== Summary ==================== Name: EToys-tfel.226 Author: tfel Time: 31 August 2016, 4:45:00.978793 pm UUID: 55a28876-750e-f747-8816-b807cc5eb30e Ancestors: EToys-tfel.225 make the highlight morph work for single stepping through etoys scripts =============== Diff against EToys-tfel.225 =============== Item was added: + ----- Method: Morph>>boundsSignatureHash (in category '*Etoys') ----- + boundsSignatureHash + "Answer a hash value that can be used to see if I've moved or been changed significantly" + ^self boundsInWorld hash + ! From commits at source.squeak.org Wed Aug 31 14:49:09 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 14:49:11 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.227.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.227.mcz ==================== Summary ==================== Name: EToys-tfel.227 Author: tfel Time: 31 August 2016, 4:47:44.624793 pm UUID: 42b80a2b-dfc4-c447-8522-377e6102b736 Ancestors: EToys-tfel.226, EToys-jl.224 merge =============== Diff against EToys-tfel.226 =============== Item was changed: ----- Method: KedamaMorph class>>additionsToViewerCategories (in category 'class initialization') ----- additionsToViewerCategories "Answer a list of ( ) pairs that characterize the phrases this kind of morph wishes to add to various Viewer categories." ^ #( (kedama ( (command addToPatchDisplayList: 'add patch to display list' Patch) (command removeAllFromPatchDisplayList 'clear the patch display list') (slot patchDisplayList 'patches to display' String readOnly Player getPatchesList unused unused) (command addToTurtleDisplayList: 'add turtle to display list' Player) (command removeAllFromTurtleDisplayList 'clear the turtle display list') (slot turtleDisplayList 'turtles to display' String readOnly Player getTurtlesList unused unused) (slot pixelsPerPatch 'the display scale' Number readWrite Player getPixelsPerPatch Player setPixelsPerPatch:) + (slot dimensionsWidth 'widht of kedma world' Number readWrite Player getDimensionsWidth Player setDimensionsWidth:) + (slot dimensionsHeigth 'height of kedama world' Number readWrite Player getDimensionsHeight Player setDimensionsHeight:) - (slot dimensions 'the turtles in x and y direction' Point readWrite Player getDimensions Player setDimensions:) (slot color 'The color of the object' Color readWrite Player getColor Player setColor:) "(command makeTurtlesMap 'Internally create the map of turtles')" (slot leftEdgeMode 'the mode of left edge' EdgeMode readWrite Player getLeftEdgeMode Player setLeftEdgeMode:) (slot rightEdgeMode 'the mode of right edge' EdgeMode readWrite Player getRightEdgeMode Player setRightEdgeMode:) (slot topEdgeMode 'the mode of top edge' EdgeMode readWrite Player getTopEdgeMode Player setTopEdgeMode:) (slot bottomEdgeMode 'the mode of bottom edge' EdgeMode readWrite Player getBottomEdgeMode Player setBottomEdgeMode:) )) ). ! Item was changed: ----- Method: KedamaMorph>>dimensions: (in category 'accessing') ----- + dimensions: anExtent + dimensions := anExtent. - dimensions: aPoint - - dimensions := aPoint. wrapX := dimensions x asFloat. wrapY := dimensions y asFloat. patchVarDisplayForm := Form extent: dimensions depth: 32. + patchesToDisplay do: [ :ea | + ea newExtent: anExtent. + ]. self pixelsPerPatch: self pixelsPerPatch.! Item was added: + ----- Method: Player>>getDimensionsHeight (in category 'slot-kedama') ----- + getDimensionsHeight + + ^ (self getValueFromCostume: #dimensions) y. + ! Item was added: + ----- Method: Player>>getDimensionsWidth (in category 'slot-kedama') ----- + getDimensionsWidth + + ^ (self getValueFromCostume: #dimensions) x. + ! Item was changed: ----- Method: Player>>setDimensions: (in category 'slot-kedama') ----- + setDimensions: asPoint - setDimensions: aNumber + ^ self setCostumeSlot: #dimensions: toValue: asPoint. - ^ self setCostumeSlot: #dimensions: toValue: aNumber asPoint. ! Item was added: + ----- Method: Player>>setDimensionsHeight: (in category 'slot-kedama') ----- + setDimensionsHeight: aNumber + + ^ self setDimensions: self getDimensionsWidth @ aNumber. + ! Item was added: + ----- Method: Player>>setDimensionsWidth: (in category 'slot-kedama') ----- + setDimensionsWidth: aNumber + + ^ self setDimensions: aNumber @ self getDimensionsHeight. + ! From commits at source.squeak.org Wed Aug 31 15:16:34 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 15:16:36 2016 Subject: [squeak-dev] The Inbox: EToys-jl.225.mcz Message-ID: A new version of EToys was added to project The Inbox: http://source.squeak.org/inbox/EToys-jl.225.mcz ==================== Summary ==================== Name: EToys-jl.225 Author: jl Time: 31 August 2016, 5:15:35.387953 pm UUID: 62eab146-2959-e04e-aff7-ac043a243fc1 Ancestors: EToys-jl.224 added nil check when changing dimensions =============== Diff against EToys-jl.224 =============== Item was changed: ----- Method: KedamaMorph>>dimensions: (in category 'accessing') ----- dimensions: anExtent dimensions := anExtent. wrapX := dimensions x asFloat. wrapY := dimensions y asFloat. patchVarDisplayForm := Form extent: dimensions depth: 32. + patchesToDisplay ifNotNil: [ + patchesToDisplay do: [ :ea | + ea newExtent: anExtent. + ]. - patchesToDisplay do: [ :ea | - ea newExtent: anExtent. ]. self pixelsPerPatch: self pixelsPerPatch.! From commits at source.squeak.org Wed Aug 31 15:26:47 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 15:26:49 2016 Subject: [squeak-dev] The Inbox: EToys-jl.226.mcz Message-ID: A new version of EToys was added to project The Inbox: http://source.squeak.org/inbox/EToys-jl.226.mcz ==================== Summary ==================== Name: EToys-jl.226 Author: jl Time: 31 August 2016, 5:25:42.617953 pm UUID: 133c249e-9ef8-d945-8680-72ba4917215c Ancestors: EToys-jl.225 fixed comparing color in kedama =============== Diff against EToys-jl.225 =============== Item was changed: ----- Method: WordArray>>eToysEQ: (in category '*Etoys-Squeakland-array arithmetic') ----- eToysEQ: other | result | + result := ByteArray new: self size. other isNumber ifTrue: [ ^ self primEQScalar: self and: other into: result. ]. other isCollection ifTrue: [ ^ self primEQArray: self and: other into: result. ]. + other isColor ifTrue: [ + ^ self primEQScalar: self and: (other pixelValueForDepth: 32) into: result. + ]. + ^ super = other. ! From Yoshiki.Ohshima at acm.org Wed Aug 31 16:36:29 2016 From: Yoshiki.Ohshima at acm.org (Yoshiki Ohshima) Date: Wed Aug 31 16:36:32 2016 Subject: [squeak-dev] SISS serialisation format? In-Reply-To: References: Message-ID: On Tue, Aug 30, 2016 at 11:21 PM, H. Hirzel wrote: > Hello > > I understand that the SISS serialisation format has been used in the > Etoys 5.0 image to store quick guides. It is a plain text format. > > What does SISS stand for? I am really bad at naming things but Umezawa-san had an inter-implementation object exchange format called SIXX, based on XML; SISS was based on S-Expression instead of XML. > > Browsing the Etoys 5.0 image ..... > > To use SISS classes need to implement a method > > sissExportSpecification > > > For example for Workspace it is > > > sissExportSpecification > > ^ #(('contents' #sissGetContents) > ('bindings' #bindings) > ('acceptDroppedMorphs' #acceptsDroppingMorphForReference) > ) > > > And a method > > sissWriteValue > > Morph >> sissWriteValue > sissWriteValue > > self prepareToBeSaved. > > > or > > Object>>sissWriteValue > sissWriteValue > "Override if you wish" > > ^self > > > PasteUpMorph>>sissWriteValue > sissWriteValue > "Override if you wish" > > | new | > self prepareToBeSaved. > new _ self clone. > new privateSubmorphs: (submorphs reject: [:e | > (e isKindOf: SolidSugarSuppliesTab) > or: [(e isKindOf: Viewer) > or: [(e isKindOf: SugarNavTab) > or: [((e isKindOf: SystemWindow) and: [(e model isKindOf: Workspace) not]) > or: [(e isMemberOf: FlapTab) and: [e isGlobalFlap]]]]]]). > new instVarNamed: 'presenter' put: nil. > new instVarNamed: 'worldState' put: nil. > new privateExtension: self extension copy. > new extension removeOtherProperties. > self extension otherProperties keysDo: [:sym | > (#(commandKeySelectors lastKeystroke locked) includes: sym) ifFalse: [ > new setProperty: sym toValue: (self extension valueOfProperty: sym) > ]. > ]. > > ^ new. > > > > Form>> > sissWriteValue > > SISSDictionaryForScanning reduceFormDepth ifTrue: [ > ^ (self asFormOfDepth: 8) hibernate. > ]. > ^ self hibernate. > > > > > > An example of the format > > MSExpParser test1 > > | str1 str2 str3 | > str1 _ '(script :name "testscript1:" :type "Player" :player "12" > (parameter :name "parameter" :type "Number" :position "1") > (sequence > (loop :type "repeat" > (initial (literal :value "0")) > (increment (literal :value "1")) > (test (send :type "Number" > (selector :selector "+") > (send :type "Number" > (selector :getter "x") > (literal :type "Player" :value "self")) > (literal :type "Number" :value "1"))) > (sequence > (assign :type "Number" > :updating "Incr:" :property "x" > (literal :type > "Player" :value "4") > (send :type "Number" > (selector :selector "+") > (literal :type > "Number" :value "244.0") > (literal :type > "Number" :value "1")))))))'. > > > > I understand that the SISS format has been used successfully in the > Etoys image to store quick guide projects. > > As far as Project saving is concerned it there a difference between > Etoy Quick guide projects and regular Squeak Morphic projects? I can't remember for sure but the difference must be small. I can't even locate etoys-dev image on my computer in front of me so it'd need some digging. > Where can I find more information on the SISS format? I'd like to know about that, too^^; -- -- Yoshiki From hannes.hirzel at gmail.com Wed Aug 31 16:52:27 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 16:52:32 2016 Subject: [squeak-dev] SISS serialisation format? In-Reply-To: References: Message-ID: On 8/31/16, Yoshiki Ohshima wrote: > On Tue, Aug 30, 2016 at 11:21 PM, H. Hirzel > wrote: >> Hello >> >> I understand that the SISS serialisation format has been used in the >> Etoys 5.0 image to store quick guides. It is a plain text format. >> >> What does SISS stand for? > > I am really bad at naming things but Umezawa-san had an > inter-implementation object exchange format called SIXX, based on XML; > SISS was based on S-Expression instead of XML. >> >> Browsing the Etoys 5.0 image ..... >> To use SISS classes need to implement a method >> >> sissExportSpecification >> >> >> For example for Workspace it is >> >> >> sissExportSpecification >> >> ^ #(('contents' #sissGetContents) >> ('bindings' #bindings) >> ('acceptDroppedMorphs' #acceptsDroppingMorphForReference) >> ) >> >> >> And a method >> >> sissWriteValue >> >> Morph >> sissWriteValue >> sissWriteValue >> >> self prepareToBeSaved. >> >> >> or >> >> Object>>sissWriteValue >> sissWriteValue >> "Override if you wish" >> >> ^self >> >> >> PasteUpMorph>>sissWriteValue >> sissWriteValue >> "Override if you wish" >> >> | new | >> self prepareToBeSaved. >> new _ self clone. >> new privateSubmorphs: (submorphs reject: [:e | >> (e isKindOf: SolidSugarSuppliesTab) >> or: [(e isKindOf: Viewer) >> or: [(e isKindOf: SugarNavTab) >> or: [((e isKindOf: SystemWindow) >> and: [(e model isKindOf: Workspace) not]) >> or: [(e isMemberOf: >> FlapTab) and: [e isGlobalFlap]]]]]]). >> new instVarNamed: 'presenter' put: nil. >> new instVarNamed: 'worldState' put: nil. >> new privateExtension: self extension copy. >> new extension removeOtherProperties. >> self extension otherProperties keysDo: [:sym | >> (#(commandKeySelectors lastKeystroke locked) includes: >> sym) ifFalse: [ >> new setProperty: sym toValue: (self extension >> valueOfProperty: sym) >> ]. >> ]. >> >> ^ new. >> >> >> >> Form>> >> sissWriteValue >> >> SISSDictionaryForScanning reduceFormDepth ifTrue: [ >> ^ (self asFormOfDepth: 8) hibernate. >> ]. >> ^ self hibernate. >> >> >> >> >> >> An example of the format >> >> MSExpParser test1 >> >> | str1 str2 str3 | >> str1 _ '(script :name "testscript1:" :type "Player" :player "12" >> (parameter :name "parameter" :type "Number" :position >> "1") >> (sequence >> (loop :type "repeat" >> (initial (literal :value "0")) >> (increment (literal :value "1")) >> (test (send :type "Number" >> (selector :selector "+") >> (send :type "Number" >> (selector :getter "x") >> (literal :type "Player" :value "self")) >> (literal :type "Number" :value "1"))) >> (sequence >> (assign :type "Number" >> :updating "Incr:" :property "x" >> (literal :type >> "Player" :value "4") >> (send :type "Number" >> (selector >> :selector "+") >> (literal :type >> "Number" :value "244.0") >> (literal :type >> "Number" :value "1")))))))'. >> >> >> >> I understand that the SISS format has been used successfully in the >> Etoys image to store quick guide projects. >> >> As far as Project saving is concerned it there a difference between >> Etoy Quick guide projects and regular Squeak Morphic projects? > > I can't remember for sure but the difference must be small. I can't > even locate etoys-dev image on my computer in front of me so it'd need > some digging. The Etoys 6 image contains a slightly refactored version according to Tim Felgentreff. http://files.squeak.org/etoys/6.0beta/Etoys6.0beta-7605-32bit/ Three class categories ('SISS-Core' SISSDictionaryForGuideBook SISSDictionaryForMorphCopying SISSDictionaryForReading SISSDictionaryForScanning SISSProxy) ('SISS-Meta' MSExpParser MSExpTokenizer SExpAttributes SExpElement) ('Etoys-Squeakland-SISS-Serialization' ParseNodeBuilder) >> Where can I find more information on the SISS format? > > I'd like to know about that, too^^; > > -- > -- Yoshiki > -------------- next part -------------- A non-text attachment was scrubbed... Name: SISS_in_Etoys6_beta_2016-08.png Type: image/png Size: 27925 bytes Desc: not available Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/c5780fa1/SISS_in_Etoys6_beta_2016-08.png From leves at caesar.elte.hu Wed Aug 31 18:21:08 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 31 18:21:13 2016 Subject: [squeak-dev] source.squeak.org down? In-Reply-To: References: Message-ID: It works from here. Also, that method should sort the packages by ancestry. The random diffs it produces are bad. Levente On Wed, 31 Aug 2016, Tim Felgentreff wrote: > Hi, > I was using > > MCRepository trunk obtainMissingAncestryFrom: (MCRepository location: 'http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/etoys-spur') > > to copy the missing ancestry to trunk, and now source.squeak.org seems down. Can someone restart it? > > cheers, > Tim > > From tim at rowledge.org Wed Aug 31 18:32:16 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Aug 31 18:32:21 2016 Subject: ScratchPlugin>>primOpenURL: (was Re: [squeak-dev] The Trunk: EToys-tfel.211.mcz) In-Reply-To: References: <201608301028.u7UASmkF009598@mail102c0.megamailservers.com> Message-ID: > On 31-08-2016, at 12:32 AM, Tim Felgentreff wrote: > > Yes, I think the graphics filters could nowadays be done in-image. This method in particular I haven't stepped through and understood yet. There is a lot of cruft :) It shouldn?t too big a project for someone into graphic algorithms. The primURL thing is a fairly serious issue for safety though since it simply appends the input string to ?xdg-open ? and does a system call. I?m reasonably certain you can shut down nuclear reactors that way. Probably not the best idea. Simply calling it without some checking of the input to make sure it is a URL is not the best idea. Real operating systems like RISC OS have much less dangerous ways to launch a webpage. tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Trojan: Storage device for replicating codes... From commits at source.squeak.org Wed Aug 31 18:44:05 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 18:44:07 2016 Subject: [squeak-dev] The Trunk: Sound-tfel.58.mcz Message-ID: Tim Felgentreff uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-tfel.58.mcz ==================== Summary ==================== Name: Sound-tfel.58 Author: tfel Time: 21 August 2016, 4:48:44.407391 pm UUID: 50e3fdac-34a3-412c-8cd6-bc672a2424ae Ancestors: Sound-mt.57, Sound-tfel.57 merge trunk =============== Diff against Sound-mt.57 =============== Item was changed: ----- Method: AbstractSound class>>fileInSoundLibraryNamed: (in category 'sound library-file in/out') ----- fileInSoundLibraryNamed: fileName "File in the sound library with the given file name, and add its contents to the current sound library." | s newSounds | + s _ FileStream readOnlyFileNamed: fileName. + newSounds _ s fileInObjectAndCode. - s := FileStream oldFileNamed: fileName. - newSounds := s fileInObjectAndCode. s close. newSounds associationsDo: [:assoc | self storeFiledInSound: assoc value named: assoc key]. AbstractSound updateScorePlayers. Smalltalk garbageCollect. "Large objects may have been released" ! Item was changed: ----- Method: SampledSound class>>soundNamed: (in category 'sound library') ----- soundNamed: aString "Answer the sound of the given name, or, if there is no sound of that name, put up an informer so stating, and answer nil" "(SampledSound soundNamed: 'shutterClick') play" ^ self soundNamed: aString ifAbsent: + [self inform: aString, ' not found in the Sound Library' translated. - [self inform: aString, ' not found in the Sound Library'. nil]! Item was changed: ----- Method: SampledSound class>>soundNamed:ifAbsent: (in category 'sound library') ----- soundNamed: aString ifAbsent: aBlock "Answer the sound of the given name, or if there is no sound of that name, answer the result of evaluating aBlock" "(SampledSound soundNamed: 'shutterClick') play" + | entry samples compressedSound | + entry _ SoundLibrary - | entry samples | - entry := SoundLibrary at: aString ifAbsent: [^ aBlock value]. entry ifNil: [^ aBlock value]. + entry second isString + ifTrue: [compressedSound := Compiler evaluate: entry second. + compressedSound source: entry first. + ^ compressedSound asSound] + ifFalse: [samples _ entry at: 1. + samples class isBytes ifTrue: [samples _ self convert8bitSignedTo16Bit: samples]. + ^ self samples: samples samplingRate: (entry at: 2)] - samples := entry at: 1. - samples class isBytes ifTrue: [samples := self convert8bitSignedTo16Bit: samples]. - ^ self samples: samples samplingRate: (entry at: 2) ! Item was changed: ----- Method: SampledSound class>>universalSoundKeys (in category 'sound library') ----- universalSoundKeys "Answer a list of the sound-names that are expected to be found in the SoundLibrary of every image." + ^ {'camera' translatedNoop. 'chirp' translatedNoop. 'chomp' translatedNoop. 'click' translatedNoop. 'clink' translatedNoop. 'coyote' translatedNoop. 'croak' translatedNoop. 'horn' translatedNoop. 'laugh' translatedNoop. 'meow' translatedNoop. 'motor' translatedNoop. 'peaks' translatedNoop. 'scrape' translatedNoop. 'scratch' translatedNoop. 'scritch' translatedNoop. 'silence' translatedNoop. 'splash' translatedNoop. 'warble' translatedNoop.}! - - ^ #('splash' 'peaks' 'clink' 'croak' 'scratch' 'chirp' 'scritch' 'warble' 'scrape' 'camera' 'coyote' 'silence' 'motor') - - ! Item was changed: ----- Method: SampledSound>>compressWith: (in category 'accessing') ----- + compressWith: codecClass + | codec result | + codec := codecClass new. + result := codec compressSound: self. + codec release. + ^ result! - compressWith: codecClass - ^ codecClass new compressSound: self! Item was changed: ----- Method: SampledSound>>compressWith:atRate: (in category 'accessing') ----- + compressWith: codecClass atRate: aSamplingRate + | codec result | + codec := codecClass new. + result := codec compressSound: self atRate: aSamplingRate. + codec release. + ^ result! - compressWith: codecClass atRate: aSamplingRate - - ^ codecClass new compressSound: self atRate: aSamplingRate! Item was changed: ----- Method: SoundRecorder>>stopRecording (in category 'recording controls') ----- stopRecording "Stop the recording process and turn of the sound input driver." recordProcess ifNotNil: [recordProcess terminate]. + recordProcess _ nil. - recordProcess := nil. self primStopRecording. + RecorderActive _ false. - RecorderActive := false. Smalltalk unregisterExternalObject: bufferAvailableSema. ((currentBuffer ~~ nil) and: [nextIndex > 1]) ifTrue: [self emitPartialBuffer]. + codec ifNotNil: [codec reset]. self initializeRecordingState. ! From commits at source.squeak.org Wed Aug 31 18:44:29 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 18:44:35 2016 Subject: [squeak-dev] The Trunk: Sound-tfel.57.mcz Message-ID: Tim Felgentreff uploaded a new version of Sound to project The Trunk: http://source.squeak.org/trunk/Sound-tfel.57.mcz ==================== Summary ==================== Name: Sound-tfel.57 Author: tfel Time: 2 August 2016, 10:04:17.197368 am UUID: f696e8c2-a220-ef46-a307-d490412936c3 Ancestors: Sound-mt.56, Sound-kfr.27 merge from Squeakland Etoys image =============== Diff against Sound-mt.56 =============== Item was changed: ----- Method: AbstractSound class>>fileInSoundLibraryNamed: (in category 'sound library-file in/out') ----- fileInSoundLibraryNamed: fileName "File in the sound library with the given file name, and add its contents to the current sound library." | s newSounds | + s _ FileStream readOnlyFileNamed: fileName. + newSounds _ s fileInObjectAndCode. - s := FileStream oldFileNamed: fileName. - newSounds := s fileInObjectAndCode. s close. newSounds associationsDo: [:assoc | self storeFiledInSound: assoc value named: assoc key]. AbstractSound updateScorePlayers. Smalltalk garbageCollect. "Large objects may have been released" ! Item was changed: ----- Method: SampledSound class>>soundNamed: (in category 'sound library') ----- soundNamed: aString "Answer the sound of the given name, or, if there is no sound of that name, put up an informer so stating, and answer nil" "(SampledSound soundNamed: 'shutterClick') play" ^ self soundNamed: aString ifAbsent: + [self inform: aString, ' not found in the Sound Library' translated. - [self inform: aString, ' not found in the Sound Library'. nil]! Item was changed: ----- Method: SampledSound class>>soundNamed:ifAbsent: (in category 'sound library') ----- soundNamed: aString ifAbsent: aBlock "Answer the sound of the given name, or if there is no sound of that name, answer the result of evaluating aBlock" "(SampledSound soundNamed: 'shutterClick') play" + | entry samples compressedSound | + entry _ SoundLibrary - | entry samples | - entry := SoundLibrary at: aString ifAbsent: [^ aBlock value]. entry ifNil: [^ aBlock value]. + entry second isString + ifTrue: [compressedSound := Compiler evaluate: entry second. + compressedSound source: entry first. + ^ compressedSound asSound] + ifFalse: [samples _ entry at: 1. + samples class isBytes ifTrue: [samples _ self convert8bitSignedTo16Bit: samples]. + ^ self samples: samples samplingRate: (entry at: 2)] - samples := entry at: 1. - samples class isBytes ifTrue: [samples := self convert8bitSignedTo16Bit: samples]. - ^ self samples: samples samplingRate: (entry at: 2) ! Item was changed: ----- Method: SampledSound class>>universalSoundKeys (in category 'sound library') ----- universalSoundKeys "Answer a list of the sound-names that are expected to be found in the SoundLibrary of every image." + ^ {'camera' translatedNoop. 'chirp' translatedNoop. 'chomp' translatedNoop. 'click' translatedNoop. 'clink' translatedNoop. 'coyote' translatedNoop. 'croak' translatedNoop. 'horn' translatedNoop. 'laugh' translatedNoop. 'meow' translatedNoop. 'motor' translatedNoop. 'peaks' translatedNoop. 'scrape' translatedNoop. 'scratch' translatedNoop. 'scritch' translatedNoop. 'silence' translatedNoop. 'splash' translatedNoop. 'warble' translatedNoop.}! - - ^ #('splash' 'peaks' 'clink' 'croak' 'scratch' 'chirp' 'scritch' 'warble' 'scrape' 'camera' 'coyote' 'silence' 'motor') - - ! Item was changed: ----- Method: SampledSound>>compressWith: (in category 'accessing') ----- + compressWith: codecClass + | codec result | + codec := codecClass new. + result := codec compressSound: self. + codec release. + ^ result! - compressWith: codecClass - ^ codecClass new compressSound: self! Item was changed: ----- Method: SampledSound>>compressWith:atRate: (in category 'accessing') ----- + compressWith: codecClass atRate: aSamplingRate + | codec result | + codec := codecClass new. + result := codec compressSound: self atRate: aSamplingRate. + codec release. + ^ result! - compressWith: codecClass atRate: aSamplingRate - - ^ codecClass new compressSound: self atRate: aSamplingRate! Item was changed: ----- Method: SoundRecorder>>stopRecording (in category 'recording controls') ----- stopRecording "Stop the recording process and turn of the sound input driver." recordProcess ifNotNil: [recordProcess terminate]. + recordProcess _ nil. - recordProcess := nil. self primStopRecording. + RecorderActive _ false. - RecorderActive := false. Smalltalk unregisterExternalObject: bufferAvailableSema. ((currentBuffer ~~ nil) and: [nextIndex > 1]) ifTrue: [self emitPartialBuffer]. + codec ifNotNil: [codec reset]. self initializeRecordingState. ! From commits at source.squeak.org Wed Aug 31 18:52:46 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 18:53:19 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.228.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.228.mcz ==================== Summary ==================== Name: EToys-tfel.228 Author: tfel Time: 31 August 2016, 8:49:05.051755 pm UUID: f9d5b452-9e2a-7045-b2ab-399366c623f9 Ancestors: EToys-tfel.227 apply fix from jl to skip drawing turtles if the semaphore is locked =============== Diff against EToys-tfel.227 =============== Item was changed: ----- Method: KedamaMorph>>drawTurtlesOnForm: (in category 'drawing') ----- drawTurtlesOnForm: aForm turtlesToDisplay do: [:exampler | (self isVisible: exampler) ifTrue: [ turtlesDictSemaphore critical: [ exampler turtles drawOn: aForm. + ] ifLocked: [] - ]. ]. ]. ! From commits at source.squeak.org Wed Aug 31 18:54:49 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 18:54:51 2016 Subject: [squeak-dev] The Trunk: EToys-tfel.228.mcz Message-ID: Tim Felgentreff uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-tfel.228.mcz ==================== Summary ==================== Name: EToys-tfel.228 Author: tfel Time: 31 August 2016, 8:49:05.051755 pm UUID: f9d5b452-9e2a-7045-b2ab-399366c623f9 Ancestors: EToys-tfel.227 apply fix from jl to skip drawing turtles if the semaphore is locked =============== Diff against EToys-tfel.227 =============== Item was changed: ----- Method: KedamaMorph>>drawTurtlesOnForm: (in category 'drawing') ----- drawTurtlesOnForm: aForm turtlesToDisplay do: [:exampler | (self isVisible: exampler) ifTrue: [ turtlesDictSemaphore critical: [ exampler turtles drawOn: aForm. + ] ifLocked: [] - ]. ]. ]. ! From leves at caesar.elte.hu Wed Aug 31 20:01:40 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 31 20:01:44 2016 Subject: [squeak-dev] The Trunk: Network-tfel.184.mcz In-Reply-To: References: Message-ID: Do you happen to use pretty diffs? If so, you should turn that off. There were quite a few changes which did nothing but reverted := to _. We should revert those again. Levente On Wed, 31 Aug 2016, Tim Felgentreff wrote: > You're right, I overlooked this. > I just realized how unfortunate the diff format is in this case. None of these methods were changed by me, I merely merged from Squeakland and > tried to figure out what to keep :) > > > On Tue, 30 Aug 2016 at 23:01 Levente Uzonyi wrote: > On Tue, 30 Aug 2016, commits@source.squeak.org wrote: > > > Tim Felgentreff uploaded a new version of Network to project The Trunk: > > http://source.squeak.org/trunk/Network-tfel.184.mcz > > > > ==================== Summary ==================== > > > > Name: Network-tfel.184 > > Author: tfel > > Time: 30 August 2016, 11:53:57.083946 am > > UUID: b90acf7c-5796-a347-8939-59955c0588dd > > Ancestors: Network-tfel.183, Network-ul.183 > > > > merge a few fixes from Squeakland Etoys. > > - ServerDirectories always use forward slashes, even on windows > > - FTPClient connections should go through the NetNameResolver > > - sockets can only accept if they are connected. > > > > =============== Diff against Network-ul.183 =============== > > > > Item was changed: > >? ----- Method: FTPClient>>openPassiveDataConnection (in category 'private protocol') ----- > >? openPassiveDataConnection > >? ? ? ?| portInfo list dataPort remoteHostAddress | > >? ? ? ?self sendCommand: 'PASV'. > >? ? ? ?self lookForCode: 227 ifDifferent: [:response | (TelnetProtocolError protocolInstance: self) signal: 'Could not enter passive > mode: ' , response]. > > - > >? ? ? ?portInfo := (self lastResponse findTokens: '()') at: 2. > >? ? ? ?list := portInfo findTokens: ','. > > +? ? ?remoteHostAddress := NetNameResolver addressForName: (list at: 1) > > +? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?, '.' > > +? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?, (list at: 2) , '.' > > +? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?, (list at: 3) , '.' > > +? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?, (list at: 4) timeout: 30. > > -? ? ?remoteHostAddress := ByteArray > > -? ? ? ? ? ? ?with: (list at: 1) asNumber > > -? ? ? ? ? ? ?with: (list at: 2) asNumber > > -? ? ? ? ? ? ?with: (list at: 3) asNumber > > -? ? ? ? ? ? ?with: (list at: 4) asNumber. > >? ? ? ?dataPort := (list at: 5) asNumber * 256 + (list at: 6) asNumber. > > +? ? ?self openDataSocket: remoteHostAddress port: dataPort! > > -? ? ?self openDataSocket: remoteHostAddress port: dataPort > > - ! > > > > Item was changed: > >? ----- Method: ServerDirectory>>isRoot (in category 'testing') ----- > >? isRoot > > +? ? ?^ directory = '/'! > > -? ? ?^directory = (String with: self pathNameDelimiter)! > > > > Item was changed: > >? ----- Method: Socket>>waitForAcceptFor:ifTimedOut: (in category 'waiting') ----- > >? waitForAcceptFor: timeout ifTimedOut: timeoutBlock > >? ? ? ?"Wait and accept an incoming connection" > >? ? ? ?self waitForConnectionFor: timeout ifTimedOut: [^timeoutBlock value]. > > +? ? ?^self isConnected > > Does this change actually do anything? Won't the previous line return when > the socket is not connected? > > Levente > > > +? ? ? ? ? ? ?ifTrue:[self accept] > > + ! > > -? ? ?^self accept! > > > > > > > > > From Das.Linux at gmx.de Wed Aug 31 20:16:41 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Aug 31 20:16:45 2016 Subject: Trunk Ancestry (was Re: [squeak-dev] The Trunk: Network-tfel.184.mcz) In-Reply-To: References: Message-ID: On 31.08.2016, at 22:01, Levente Uzonyi wrote: > Do you happen to use pretty diffs? If so, you should turn that off. There were quite a few changes which did nothing but reverted := to _. We should revert those again. These are not in the current versions. The diffs are bogus. Take for example the recently updated Sound package. Part of the last diff we saw was ==================== Summary ==================== Name: Sound-tfel.58 Author: tfel Time: 21 August 2016, 4:48:44.407391 pm UUID: 50e3fdac-34a3-412c-8cd6-bc672a2424ae Ancestors: Sound-mt.57, Sound-tfel.57 merge trunk =============== Diff against Sound-mt.57 =============== Item was changed: ----- Method: AbstractSound class>>fileInSoundLibraryNamed: (in category 'sound library-file in/out') ----- fileInSoundLibraryNamed: fileName "File in the sound library with the given file name, and add its contents to the current sound library." | s newSounds | + s _ FileStream readOnlyFileNamed: fileName. + newSounds _ s fileInObjectAndCode. - s := FileStream oldFileNamed: fileName. - newSounds := s fileInObjectAndCode. s close. newSounds associationsDo: [:assoc | self storeFiledInSound: assoc value named: assoc key]. AbstractSound updateScorePlayers. Smalltalk garbageCollect. "Large objects may have been released" ! Yet, in the _latest_ Package Sound-tfel.59, the method looks like that: fileInSoundLibraryNamed: fileName "File in the sound library with the given file name, and add its contents to the current sound library." | s newSounds | s := FileStream readOnlyFileNamed: fileName. newSounds := s fileInObjectAndCode. (besides, with a comment stamp of: 'kks 9/27/2007 16:25 sound library-file in/out' ) ======================================================================= So, what tim did was to commit the most recent version of the changes he had and retroactively pulling in the ancestors. The only problem here is SqueakSource, which does not shut up about this. Those Diffs are just meaningless. Best regards -Tobias > > Levente > > On Wed, 31 Aug 2016, Tim Felgentreff wrote: > >> You're right, I overlooked this. >> I just realized how unfortunate the diff format is in this case. None of these methods were changed by me, I merely merged from Squeakland and >> tried to figure out what to keep :) >> On Tue, 30 Aug 2016 at 23:01 Levente Uzonyi wrote: >> On Tue, 30 Aug 2016, commits@source.squeak.org wrote: >> >> > Tim Felgentreff uploaded a new version of Network to project The Trunk: >> > http://source.squeak.org/trunk/Network-tfel.184.mcz >> > >> > ==================== Summary ==================== >> > >> > Name: Network-tfel.184 >> > Author: tfel >> > Time: 30 August 2016, 11:53:57.083946 am >> > UUID: b90acf7c-5796-a347-8939-59955c0588dd >> > Ancestors: Network-tfel.183, Network-ul.183 >> > >> > merge a few fixes from Squeakland Etoys. >> > - ServerDirectories always use forward slashes, even on windows >> > - FTPClient connections should go through the NetNameResolver >> > - sockets can only accept if they are connected. >> > >> > =============== Diff against Network-ul.183 =============== >> > >> > Item was changed: >> > ----- Method: FTPClient>>openPassiveDataConnection (in category 'private protocol') ----- >> > openPassiveDataConnection >> > | portInfo list dataPort remoteHostAddress | >> > self sendCommand: 'PASV'. >> > self lookForCode: 227 ifDifferent: [:response | (TelnetProtocolError protocolInstance: self) signal: 'Could not enter passive >> mode: ' , response]. >> > - >> > portInfo := (self lastResponse findTokens: '()') at: 2. >> > list := portInfo findTokens: ','. >> > + remoteHostAddress := NetNameResolver addressForName: (list at: 1) >> > + , '.' >> > + , (list at: 2) , '.' >> > + , (list at: 3) , '.' >> > + , (list at: 4) timeout: 30. >> > - remoteHostAddress := ByteArray >> > - with: (list at: 1) asNumber >> > - with: (list at: 2) asNumber >> > - with: (list at: 3) asNumber >> > - with: (list at: 4) asNumber. >> > dataPort := (list at: 5) asNumber * 256 + (list at: 6) asNumber. >> > + self openDataSocket: remoteHostAddress port: dataPort! >> > - self openDataSocket: remoteHostAddress port: dataPort >> > - ! >> > >> > Item was changed: >> > ----- Method: ServerDirectory>>isRoot (in category 'testing') ----- >> > isRoot >> > + ^ directory = '/'! >> > - ^directory = (String with: self pathNameDelimiter)! >> > >> > Item was changed: >> > ----- Method: Socket>>waitForAcceptFor:ifTimedOut: (in category 'waiting') ----- >> > waitForAcceptFor: timeout ifTimedOut: timeoutBlock >> > "Wait and accept an incoming connection" >> > self waitForConnectionFor: timeout ifTimedOut: [^timeoutBlock value]. >> > + ^self isConnected >> >> Does this change actually do anything? Won't the previous line return when >> the socket is not connected? >> >> Levente >> >> > + ifTrue:[self accept] >> > + ! >> > - ^self accept! >> > >> > >> > From leves at caesar.elte.hu Wed Aug 31 20:42:41 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 31 20:42:46 2016 Subject: [squeak-dev] Trunk update broken on 64-bit Message-ID: Hi All, The new Etoys, particularly ChessBoard >> #initializeHashKeys, relies on 31-bit SmallIntegers by the use of SmallInteger >> #maxVal. Since it's already past the last update map, I don't know how it could be fixed to avoid manual intervention. Levente From leves at caesar.elte.hu Wed Aug 31 20:46:40 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 31 20:46:43 2016 Subject: Trunk Ancestry (was Re: [squeak-dev] The Trunk: Network-tfel.184.mcz) In-Reply-To: References: Message-ID: That's correct. The only method with underscore assignment, other than those which have it commented out, is DateAndTime >> #<. Levente On Wed, 31 Aug 2016, Tobias Pape wrote: > > On 31.08.2016, at 22:01, Levente Uzonyi wrote: > >> Do you happen to use pretty diffs? If so, you should turn that off. There were quite a few changes which did nothing but reverted := to _. We should revert those again. > > These are not in the current versions. > The diffs are bogus. Take for example the recently updated Sound package. > Part of the last diff we saw was > > ==================== Summary ==================== > > Name: Sound-tfel.58 > Author: tfel > Time: 21 August 2016, 4:48:44.407391 pm > UUID: 50e3fdac-34a3-412c-8cd6-bc672a2424ae > Ancestors: Sound-mt.57, Sound-tfel.57 > > merge trunk > > =============== Diff against Sound-mt.57 =============== > > Item was changed: > ----- Method: AbstractSound class>>fileInSoundLibraryNamed: (in category 'sound library-file in/out') ----- > fileInSoundLibraryNamed: fileName > "File in the sound library with the given file name, and add its contents to the current sound library." > > | s newSounds | > + s _ FileStream readOnlyFileNamed: fileName. > + newSounds _ s fileInObjectAndCode. > - s := FileStream oldFileNamed: fileName. > - newSounds := s fileInObjectAndCode. > s close. > newSounds associationsDo: > [:assoc | self storeFiledInSound: assoc value named: assoc key]. > AbstractSound updateScorePlayers. > Smalltalk garbageCollect. "Large objects may have been released" > ! > > > Yet, in the _latest_ Package Sound-tfel.59, the method looks like that: > > fileInSoundLibraryNamed: fileName > "File in the sound library with the given file name, and add its contents to the current sound library." > > | s newSounds | > s := FileStream readOnlyFileNamed: fileName. > newSounds := s fileInObjectAndCode. > > (besides, with a comment stamp of: 'kks 9/27/2007 16:25 sound library-file in/out' ) > > > ======================================================================= > > > So, what tim did was to commit the most recent version of the changes he had and retroactively pulling in the > ancestors. The only problem here is SqueakSource, which does not shut up about this. Those Diffs are just > meaningless. > > Best regards > -Tobias > > > > > > >> >> Levente >> >> On Wed, 31 Aug 2016, Tim Felgentreff wrote: >> >>> You're right, I overlooked this. >>> I just realized how unfortunate the diff format is in this case. None of these methods were changed by me, I merely merged from Squeakland and >>> tried to figure out what to keep :) >>> On Tue, 30 Aug 2016 at 23:01 Levente Uzonyi wrote: >>> On Tue, 30 Aug 2016, commits@source.squeak.org wrote: >>> >>> > Tim Felgentreff uploaded a new version of Network to project The Trunk: >>> > http://source.squeak.org/trunk/Network-tfel.184.mcz >>> > >>> > ==================== Summary ==================== >>> > >>> > Name: Network-tfel.184 >>> > Author: tfel >>> > Time: 30 August 2016, 11:53:57.083946 am >>> > UUID: b90acf7c-5796-a347-8939-59955c0588dd >>> > Ancestors: Network-tfel.183, Network-ul.183 >>> > >>> > merge a few fixes from Squeakland Etoys. >>> > - ServerDirectories always use forward slashes, even on windows >>> > - FTPClient connections should go through the NetNameResolver >>> > - sockets can only accept if they are connected. >>> > >>> > =============== Diff against Network-ul.183 =============== >>> > >>> > Item was changed: >>> > ----- Method: FTPClient>>openPassiveDataConnection (in category 'private protocol') ----- >>> > openPassiveDataConnection >>> > | portInfo list dataPort remoteHostAddress | >>> > self sendCommand: 'PASV'. >>> > self lookForCode: 227 ifDifferent: [:response | (TelnetProtocolError protocolInstance: self) signal: 'Could not enter passive >>> mode: ' , response]. >>> > - >>> > portInfo := (self lastResponse findTokens: '()') at: 2. >>> > list := portInfo findTokens: ','. >>> > + remoteHostAddress := NetNameResolver addressForName: (list at: 1) >>> > + , '.' >>> > + , (list at: 2) , '.' >>> > + , (list at: 3) , '.' >>> > + , (list at: 4) timeout: 30. >>> > - remoteHostAddress := ByteArray >>> > - with: (list at: 1) asNumber >>> > - with: (list at: 2) asNumber >>> > - with: (list at: 3) asNumber >>> > - with: (list at: 4) asNumber. >>> > dataPort := (list at: 5) asNumber * 256 + (list at: 6) asNumber. >>> > + self openDataSocket: remoteHostAddress port: dataPort! >>> > - self openDataSocket: remoteHostAddress port: dataPort >>> > - ! >>> > >>> > Item was changed: >>> > ----- Method: ServerDirectory>>isRoot (in category 'testing') ----- >>> > isRoot >>> > + ^ directory = '/'! >>> > - ^directory = (String with: self pathNameDelimiter)! >>> > >>> > Item was changed: >>> > ----- Method: Socket>>waitForAcceptFor:ifTimedOut: (in category 'waiting') ----- >>> > waitForAcceptFor: timeout ifTimedOut: timeoutBlock >>> > "Wait and accept an incoming connection" >>> > self waitForConnectionFor: timeout ifTimedOut: [^timeoutBlock value]. >>> > + ^self isConnected >>> >>> Does this change actually do anything? Won't the previous line return when >>> the socket is not connected? >>> >>> Levente >>> >>> > + ifTrue:[self accept] >>> > + ! >>> > - ^self accept! >>> > >>> > >>> > > > > > From leves at caesar.elte.hu Wed Aug 31 20:53:48 2016 From: leves at caesar.elte.hu (Levente Uzonyi) Date: Wed Aug 31 20:53:52 2016 Subject: [squeak-dev] EToys in the Trunk Message-ID: Hi All, With the recent updates, we have the full EToys package in the Trunk, which has more than 78k LoC. That's almost 1.5x what Morphic has, and it's more than Kernel, System and Collections together. Do we want to keep it in the Trunk? Levente From asqueaker at gmail.com Wed Aug 31 20:57:57 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 31 20:58:42 2016 Subject: [squeak-dev] Re: server update In-Reply-To: <0A9A5B54-1EBC-43CE-A27E-9E9C23253100@gmx.de> References: <0A9A5B54-1EBC-43CE-A27E-9E9C23253100@gmx.de> Message-ID: Hi Marcel and Tobias, >> " I also discovered I can't apply patches live >> and save the image, because that means its saved with the RFB server >> running." >> >> That's not good. All patches should be stored in the respective repository and updating the running image, including save, must work. Otherwise some strangely patched monster will grow up and it will be very hard to setup SqueakSource freshly again. Heh, that won't happen, that was the very thing I set out to fix about our existing server. :-) The use-case I'm referring to above is for when a temporary patch to the production system (like fixing a typo) so that the system can be up and running again ASAP until the patch can be reintegrated into the base code and rebuilt. I do think the idea about sending the running image a particular kill signal to invoke a "update yourself from code repositories" is interesting, however, I think it should only be a temporary patch file, not the repositories, since that bypasses the normal code -> test -> build -> deploy cycle. It could be confusing and dangerous to have two ways to "update production" and what if you accidently pulled in more code than just the "one-line patch" but stuff that was not ready for production.. > Strange, the last time I used the RFB code, It would always ask me whether to shut down the RFB before saving > just to avoid that. Please try to think "less-intrusive" about UI design and more along the lines that we should let the user *tell the computer* what they want, and never that the computer should poke the user with unnecessary questions. Smalltalk users grok the idea that their image state resumes from where it was last saved. When I want to start the RFB server, I start it. When I want to stop it, I do that. Saving the image in-between is completely independent and has nothing to do with it. > Also, Why is it bad that the RFB remains running? Isn't that the point? For my personal servers and now source.squeak.org, I want to have the use-case ability to "press a button to generate a deployable zip file of everything this system needs." This includes the VM, image, scripts, and any resources. The image is just plain with the needed code pacakges loaded, I don't want to depend on any in-image state like running servers or configuration options. Instead, the scripts reveal the explicit code being used to start up the various servers, etc. By not depending on image state, I get to know exactly what I'm running in production, and this gives me ability to test and debug elsewhere if necessary. From Das.Linux at gmx.de Wed Aug 31 21:05:52 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Aug 31 21:05:58 2016 Subject: [squeak-dev] Re: server update In-Reply-To: References: <0A9A5B54-1EBC-43CE-A27E-9E9C23253100@gmx.de> Message-ID: <248F1A92-9AB2-4E1F-B888-6636922EACC5@gmx.de> On 31.08.2016, at 22:57, Chris Muller wrote: > Hi Marcel and Tobias, > >>> " I also discovered I can't apply patches live >>> and save the image, because that means its saved with the RFB server >>> running." >>> >>> That's not good. All patches should be stored in the respective repository and updating the running image, including save, must work. Otherwise some strangely patched monster will grow up and it will be very hard to setup SqueakSource freshly again. > > Heh, that won't happen, that was the very thing I set out to fix about > our existing server. :-) The use-case I'm referring to above is for > when a temporary patch to the production system (like fixing a typo) > so that the system can be up and running again ASAP until the patch > can be reintegrated into the base code and rebuilt. > > I do think the idea about sending the running image a particular kill > signal to invoke a "update yourself from code repositories" is > interesting, however, I think it should only be a temporary patch > file, not the repositories, since that bypasses the normal code -> > test -> build -> deploy cycle. It could be confusing and dangerous to > have two ways to "update production" and what if you accidently pulled > in more code than just the "one-line patch" but stuff that was not > ready for production.. > >> Strange, the last time I used the RFB code, It would always ask me whether to shut down the RFB before saving >> just to avoid that. > > Please try to think "less-intrusive" about UI design and more along > the lines that we should let the user *tell the computer* what they > want, and never that the computer should poke the user with > unnecessary questions. > > Smalltalk users grok the idea that their image state resumes from > where it was last saved. When I want to start the RFB server, I start > it. When I want to stop it, I do that. Saving the image in-between > is completely independent and has nothing to do with it. > You lost me. >> Also, Why is it bad that the RFB remains running? Isn't that the point? > > For my personal servers and now source.squeak.org, I want to have the > use-case ability to "press a button to generate a deployable zip file > of everything this system needs." This includes the VM, image, > scripts, and any resources. The image is just plain with the needed > code pacakges loaded, I don't want to depend on any in-image state > like running servers or configuration options. > > Instead, the scripts reveal the explicit code being used to start up > the various servers, etc. By not depending on image state, I get to > know exactly what I'm running in production, and this gives me ability > to test and debug elsewhere if necessary. ?\_(?)_/? That's not how I use squeak, and that's not how I used to manage SqueakSource instances? So you're on your own here From asqueaker at gmail.com Wed Aug 31 21:15:58 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 31 21:16:43 2016 Subject: [squeak-dev] The Trunk: System-tfel.872.mcz In-Reply-To: <57c6a528.438d370a.2f544.d41fSMTPIN_ADDED_MISSING@mx.google.com> References: <57c6a528.438d370a.2f544.d41fSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: It looks like you're converting some := assignements to underscore assignments... On Wed, Aug 31, 2016 at 4:34 AM, wrote: > Tim Felgentreff uploaded a new version of System to project The Trunk: > http://source.squeak.org/trunk/System-tfel.872.mcz > > ==================== Summary ==================== > > Name: System-tfel.872 > Author: tfel > Time: 6 August 2016, 1:52:05.699519 pm > UUID: 488c4f3a-c6f2-4f08-92ce-136da38c76ac > Ancestors: System-tfel.871 > > don't error when there are no translations available > > =============== Diff against System-mt.870 =============== > > Item was changed: > ----- Method: CodeLoader>>installProject (in category 'installing') ----- > installProject > "Assume that we're loading a single file and it's a project" > | aStream | > + aStream _ sourceFiles first contentStream. > - aStream := sourceFiles first contentStream. > aStream ifNil:[^self error:'Project was not loaded']. > + ProjectLoading openOn: aStream! > - ProjectLoading > - openName: nil "<--do we want to cache this locally? Need a name if so" > - stream: aStream > - fromDirectory: nil > - withProjectView: nil. > - ! > > Item was changed: > ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- > defaultProjectHandler > + ^ ExternalDropHandler > - ^ExternalDropHandler > type: nil > extension: 'pr' > + action: [:stream | ProjectLoading openOn: stream]! > - action: [:stream | > - ProjectLoading > - openName: nil > - stream: stream > - fromDirectory: nil > - withProjectView: nil] > - ! > > Item was changed: > ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- > assuredPreferenceDirectory > "Answer the preference directory, creating it if necessary" > > + | prefDir topDir | > - | prefDir | > prefDir := self preferenceDirectory. > prefDir > ifNil: > + [topDir := Preferences startInUntrustedDirectory > + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] > + ifFalse: [FileDirectory default]. > + prefDir := topDir directoryNamed: self preferenceDirectoryName. > - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. > prefDir assureExistence]. > ^ prefDir! > > Item was added: > + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- > + moFiles > + > + ^ moFiles! > > Item was changed: > ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- > declareAndPossiblyRename: classThatIsARoot > | existing catInstaller | > "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." > > + catInstaller _ [ > - catInstaller := [ > classThatIsARoot superclass name == #Player > ifTrue: [classThatIsARoot category: Object categoryForUniclasses] > ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') > ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] > + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. > - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. > ]. > classThatIsARoot superclass addSubclass: classThatIsARoot. > (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ > "Class entry in Smalltalk not referred to in Segment, install anyway." > catInstaller value. > ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. > + existing _ Smalltalk at: classThatIsARoot name. > - existing := Smalltalk at: classThatIsARoot name. > existing xxxClass == ImageSegmentRootStub ifTrue: [ > "We are that segment!! Must ask it carefully!!" > catInstaller value. > ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. > existing == false | (existing == nil) ifTrue: [ > "association is in outPointers, just installed" > catInstaller value. > ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. > "Conflict with existing global or copy of the class" > (existing isKindOf: Class) ifTrue: [ > classThatIsARoot isSystemDefined not ifTrue: [ > "UniClass. give it a new name" > classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. > catInstaller value. "must be after new name" > ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. > "Take the incoming one" > self inform: 'Using newly arrived version of ', classThatIsARoot name. > classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" > (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. > catInstaller value. > ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. > self error: 'Name already in use by a non-class: ', classThatIsARoot name. > ! > > Item was changed: > ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- > smartFillRoots: dummy > + | refs known ours ww blockers | > - | refs ours blockers known | > "Put all traced objects into my arrayOfRoots. Remove some > that want to be in outPointers. Return blockers, an > IdentityDictionary of objects to replace in outPointers." > > + blockers _ dummy blockers. > + known _ (refs _ dummy references) size. > - blockers := dummy blockers. > - known := (refs := dummy references) size. > refs keys do: [:obj | "copy keys to be OK with removing items" > + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. > - (obj isSymbol) ifTrue: [refs removeKey: obj. > - known := known-1]. > (obj class == PasteUpMorph) ifTrue: [ > obj isWorldMorph & (obj owner == nil) ifTrue: [ > + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ > + refs removeKey: obj. known _ known-1. > - obj == dummy project world ifFalse: [ > - refs removeKey: obj. known := known-1. > blockers at: obj put: > + (StringMorph contents: 'The worldMorph of a different world')]]]. > - (StringMorph > - contents: 'The worldMorph of a different world')]]]. > "Make a ProjectViewMorph here" > "obj class == Project ifTrue: [Transcript show: obj; cr]." > (blockers includesKey: obj) ifTrue: [ > + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. > - refs removeKey: obj ifAbsent: [known := > - known+1]. known := known-1]. > ]. > + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. > + refs keysDo: [:obj | > - ours := dummy project world. > - refs keysDo: [:obj | | ww | > obj isMorph ifTrue: [ > + ww _ obj world. > - ww := obj world. > (ww == ours) | (ww == nil) ifFalse: [ > + refs removeKey: obj. known _ known-1. > + blockers at: obj put: (StringMorph contents: > + obj printString, ' from another world')]]]. > - refs removeKey: obj. known := known-1. > - blockers at: obj put: > - (StringMorph contents: > - obj > - printString, ' from another world')]]]. > "keep original roots on the front of the list" > (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. > + self classOrganizersBeRoots: dummy. > + ^ dummy rootObject, refs fasterKeys asArray.! > - ^ dummy rootObject, refs keys asArray. > - > - ! > > Item was changed: > ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- > searchByDictionary: aString > | index | > + index := translations at: aString ifAbsentPut: [nil]. > + index ifNil: [^ nil]. > + ^self translatedString: index! > - index := translations at: aString ifAbsent: [^nil]. > - ^self translatedString: index > - > - ! > > Item was added: > + ----- Method: MOFile>>translations (in category 'private') ----- > + translations > + > + ^ translations! > > Item was changed: > ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- > serviceLoadVersion > ^ SimpleServiceEntry > provider: self > + label: 'load' translatedNoop > - label: 'load' > selector: #loadVersionFile: > + description: 'load a package version' translatedNoop! > - description: 'load a package version'! > > Item was changed: > ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- > translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName > "try to translate with small footprint: > if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. > if InternalTranslator isn't available, then actually load MO and use it" > | translator | > translator := self availableForLocaleID: localeID. > + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. > (translator isDomainLoaded: aDomainName) ifFalse: [ > (InternalTranslator availableLanguageLocaleIDs includes: localeID) > ifTrue: [translator := InternalTranslator localeID: localeID]. > ]. > ^translator translate: aString inDomain: aDomainName! > > Item was changed: > ----- Method: Preference>>helpString (in category 'menu') ----- > helpString > "Answer the help string provided for the receiver" > > + ^ helpString ifNil: ['no help available' translatedNoop]! > - ^ helpString ifNil: ['no help available']! > > Item was removed: > - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- > - alwaysShowConnectionVocabulary > - ^ self > - valueOfFlag: #alwaysShowConnectionVocabulary > - ifAbsent: [false]! > > Item was changed: > + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- > - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- > chooseEToysTitleFont > + "Present a menu with the possible fonts for etoy titles" > + > - "present a menu with the possible fonts for the eToys" > self > + chooseFontWithPrompt: 'Choose the etoy title font' translated > - chooseFontWithPrompt: 'eToys Title font...' translated > andSendTo: self > withSelector: #setEToysTitleFontTo: > + highlight: self standardEToysTitleFont! > - highlightSelector: #standardEToysTitleFont! > > Item was removed: > - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- > - haloTheme > - ^ self > - valueOfFlag: #haloTheme > - ifAbsent: [ #iconicHaloSpecifications ]! > > Item was changed: > + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- > - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- > iconicHaloSpecifications > "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" > > "Preferences resetHaloSpecifications" > > ^ #( > " selector horiz vert color info icon key > --------- ------ ----------- ------------------------------- ---------------" > (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') > (addPoohHandle: right center (white) 'Halo-Pooh') > (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') > (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') > (addRotateHandle: left bottom (blue) 'Halo-Rot') > + (addMenuHandle: leftCenter top (white) 'Halo-Menu') > - (addMenuHandle: leftCenter top (red) 'Halo-Menu') > (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') > (addViewHandle: left center (cyan) 'Halo-View') > (addGrabHandle: center top (black) 'Halo-Grab') > (addDragHandle: rightCenter top (brown) 'Halo-Drag') > (addDupHandle: right top (green) 'Halo-Dup') > (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') > (addHelpHandle: center bottom (lightBlue) 'Halo-Help') > (addGrowHandle: right bottom (yellow) 'Halo-Scale') > (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') > (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') > (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') > (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') > (addRepaintHandle: right center (lightGray) 'Halo-Paint') > (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') > (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') > (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') > (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') > (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') > ) ! > > Item was changed: > + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- > - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- > menuColorString > ^ ((self valueOfFlag: #menuColorFromWorld) > + ifTrue: ['stop menu-color-from-world' translated] > + ifFalse: ['start menu-color-from-world' translated]) ! > - ifTrue: ['stop menu-color-from-world'] > - ifFalse: ['start menu-color-from-world']) translated! > > Item was changed: > + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- > - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- > restorePersonalPreferences > "Restore all the user's saved personal preference settings" > > | savedPrefs | > + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. > - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. > > savedPrefs associationsDo: > + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: > - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: > [:pref | pref preferenceValue: assoc value preferenceValue]]! > > Item was changed: > + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- > - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- > restorePreferencesFromDisk > + | result | > + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . > + result ifNil: [^ self]. > + self restorePreferencesFromDisk: result fullName > + > - (FileDirectory default fileExists: 'my.prefs') > - ifTrue: [ Cursor wait showWhile: [ > - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] > - ] ] > - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. > ! > > Item was removed: > - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- > - showAdvancedNavigatorButtons > - ^ self > - valueOfFlag: #showAdvancedNavigatorButtons > - ifAbsent: [ true ]! > > Item was changed: > + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- > - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- > storePreferencesToDisk > + | newName | > + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. > + newName isEmpty > + ifTrue: [^ self]. > + Cursor wait > + showWhile: [[self storePreferencesIn: newName , '.prefs'] > + on: Error > + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! > - Cursor wait showWhile: [ > - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! > > Item was removed: > - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- > - useSmartLabels > - ^ self > - valueOfFlag: #useSmartLabels > - ifAbsent: [false]! > > Item was changed: > ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- > mostRecent: projName onServer: aServerDirectory > | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | > "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. > File names may or may not be HTTP escaped, %20 on the server." > > self flag: #bob. "do we want to handle unversioned projects as well?" > + "I think we do now - Yoshiki." > > + nothingFound _ {nil. -1}. > - nothingFound := {nil. -1}. > aServerDirectory ifNil: [^nothingFound]. > "23 sept 2000 - some old projects have periods in name so be more careful" > + unEscName _ projName unescapePercents. > + triple _ Project parseProjectFileName: unEscName. > + stem _ triple first. > + rawList _ aServerDirectory fileNames. > - unEscName := projName unescapePercents. > - triple := Project parseProjectFileName: unEscName. > - stem := triple first. > - rawList := aServerDirectory fileNames. > > + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. > + list _ rawList collect: [:nnn | nnn unescapePercents]. > + max _ -1. goodName _ nil. > - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. > - list := rawList collect: [:nnn | nnn unescapePercents]. > - max := -1. goodName := nil. > list withIndexDo: [:aName :ind | > + ((aName beginsWith: stem)) ifTrue: [ > + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ > + num _ (Project parseProjectFileName: aName) second. > + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. > - (aName beginsWith: stem) ifTrue: [ > - num := (Project parseProjectFileName: aName) second. > - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. > > max = -1 ifFalse: [^ Array with: goodName with: max]. > > "try with underbar for spaces on server" > (stem includes: $ ) ifTrue: [ > + stem1 _ stem copyReplaceAll: ' ' with: '_'. > - stem1 := stem copyReplaceAll: ' ' with: '_'. > list withIndexDo: [:aName :ind | > (aName beginsWith: stem1) ifTrue: [ > + num _ (Project parseProjectFileName: aName) second. > + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. > - num := (Project parseProjectFileName: aName) second. > - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. > max = -1 ifFalse: [^ Array with: goodName with: max]. > > "try without the marker | " > + stem1 _ stem allButLast, '.pr'. > + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" > - stem1 := stem allButLast, '.pr'. > - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" > list withIndexDo: [:aName :ind | > (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ > + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ > + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" > - (triple := aName findTokens: '.') size >= 2 ifTrue: [ > - max := 0. goodName := (rawList at: ind)]]]. "no other versions" > max = -1 ifFalse: [^ Array with: goodName with: max]. > > ^nothingFound "no matches" > ! > > Item was changed: > ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- > squeakletDirectory > > | squeakletDirectoryName | > + squeakletDirectoryName := SugarLauncher current > + parameterAt: 'SQUEAKLETS' > + ifAbsent: ['Squeaklets']. > - squeakletDirectoryName := 'Squeaklets'. > (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ > FileDirectory default createDirectory: squeakletDirectoryName > ]. > ^FileDirectory default directoryNamed: squeakletDirectoryName! > > Item was changed: > ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- > sweep: aServerDirectory > | repository list parts ind entry projectName versions | > "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" > "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone > directory: '/vol0/people/dani/Squeaklets/2.7')" > > "Ensure the 'older' directory" > (aServerDirectory includesKey: 'older') > ifFalse: [aServerDirectory createDirectory: 'older']. > + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. > - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. > > "Collect each name, and decide on versions" > + list _ aServerDirectory fileNames. > + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. > + list _ list asSortedCollection asOrderedCollection. > + parts _ list collect: [:en | Project parseProjectFileName: en]. > + parts _ parts select: [:en | en third = 'pr']. > + ind _ 1. > + [entry _ list at: ind. > + projectName _ entry first asLowercase. > + versions _ OrderedCollection new. versions add: entry. > + [(ind _ ind + 1) > list size > - list := aServerDirectory fileNames. > - list isString ifTrue: [^ self inform: 'server is unavailable']. > - list := list asSortedCollection asOrderedCollection. > - parts := list collect: [:en | Project parseProjectFileName: en]. > - parts := parts select: [:en | en third = 'pr']. > - ind := 1. > - [entry := list at: ind. > - projectName := entry first asLowercase. > - versions := OrderedCollection new. versions add: entry. > - [(ind := ind + 1) > list size > ifFalse: [(parts at: ind) first asLowercase = projectName > ifTrue: [versions add: (parts at: ind). true] > ifFalse: [false]] > ifTrue: [false]] whileTrue. > aServerDirectory moveYoungest: 3 in: versions to: repository. > ind > list size] whileFalse. > ! > > Item was changed: > ----- Method: Project>>depth (in category 'active process') ----- > depth > "Return the depth of this project from the top. > topProject = 0, next = 1, etc." > "Project current depth." > > + | depth project | > + depth _ 0. > + project _ self. > - | depth topProject project | > - depth := 0. > - topProject := Project topProject. > - project := self. > > + [project class == DiskProxy ifTrue: [^ depth]. > + project isTopProject] > + whileFalse: > + [project _ project parent. > + depth _ depth + 1]. > - [project ~= topProject and:[project notNil]] > - whileTrue: > - [project := project parent. > - depth := depth + 1]. > ^ depth! > > Item was changed: > ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- > doWeWantToRename > > | want | > > self hasBadNameForStoring ifTrue: [^true]. > + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. > + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. > - (self name beginsWith: 'Unnamed') ifTrue: [^true]. > - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. > world removeProperty: #SuperSwikiRename. > ^want > > ! > > Item was changed: > ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- > htmlPagePrototype > "Return the HTML page prototype" > ^' > > Squeak Project > > > > > type="application/x-squeak-source" > ALIGN="CENTER" > WIDTH="$$WIDTH$$" > HEIGHT="$$HEIGHT$$" > src="$$PROJECT$$" > + pluginspage="http://www.squeakland.org/download/"> > - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> > > > > > > '! > > Item was changed: > ----- Method: Project>>revert (in category 'file in/out') ----- > revert > | | > "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." > > + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. > - projectParameters ifNil: [^ self inform: 'nothing to revert to']. > parentProject enter: false revert: true saveForRevert: false. > "does not return!!" > ! > > Item was changed: > ----- Method: Project>>storeOnServer (in category 'file in/out') ----- > storeOnServer > > "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." > > world setProperty: #optimumExtentFromAuthor toValue: world extent. > + self validateProjectNameIfOK: [:details | > + self acceptProjectDetails: details. > - self validateProjectNameIfOK: [ > self isCurrentProject ifTrue: ["exit, then do the command" > ^ self > armsLengthCommand: #storeOnServerAssumingNameValid > withDescription: 'Publishing' translated > ]. > self storeOnServerWithProgressInfo. > ].! > > Item was changed: > ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- > storeOnServerAssumingNameValid > > "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." > - > world setProperty: #optimumExtentFromAuthor toValue: world extent. > self isCurrentProject ifTrue: ["exit, then do the command" > + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. > ^ self > armsLengthCommand: #storeOnServerAssumingNameValid > withDescription: 'Publishing' translated > ]. > self storeOnServerWithProgressInfo. > ! > > Item was changed: > ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- > storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget > > "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." > > world setProperty: #optimumExtentFromAuthor toValue: world extent. > + self validateProjectNameIfOK: [:details | > + self acceptProjectDetails: details. > - self validateProjectNameIfOK: [ > self isCurrentProject ifTrue: ["exit, then do the command" > forget > ifTrue: [self forgetExistingURL] > ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. > ^self > armsLengthCommand: #storeOnServerAssumingNameValid > withDescription: 'Publishing' translated > ]. > self storeOnServerWithProgressInfoOn: aMorphOrNil. > ]. > ! > > Item was changed: > ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- > validateProjectNameIfOK: aBlock > > | details | > > details := world valueOfProperty: #ProjectDetails. > details ifNotNil: ["ensure project info matches real project name" > details at: 'projectname' put: self name. > ]. > + self doWeWantToRename ifFalse: [^ aBlock value: details]. > - self doWeWantToRename ifFalse: [^aBlock value]. > (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | > etpdm > getFullInfoFor: self > + ifValid: [:d | > - ifValid: [ > World displayWorldSafely. > + aBlock value: d > - aBlock value. > ] > expandedFormat: false] > ! > > Item was changed: > ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- > loginAs: userName > "Assuming that we have a valid user url; read its contents and see if the user is really there." > | actualName userList | > eToyAuthentificationServer ifNil:[ > self proceedWithLogin. > ^true]. > + userList _ eToyAuthentificationServer eToyUserList. > - userList := eToyAuthentificationServer eToyUserList. > userList ifNil:[ > self inform: > 'Sorry, I cannot find the user list. > (this may be due to a network problem) > + Please hit Cancel if you wish to use Squeak.' translated. > - Please hit Cancel if you wish to use Squeak.'. > ^false]. > "case insensitive search" > + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. > - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. > actualName isNil ifTrue:[ > + self inform: 'Unknown user: ' translated ,userName. > - self inform: 'Unknown user: ',userName. > ^false]. > Utilities authorName: actualName. > eToyAuthentificationServer eToyUserName: actualName. > self proceedWithLogin. > ^true! > > Item was changed: > ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- > serviceFileInSAR > "Answer a service for opening a changelist browser on a file" > > ^ SimpleServiceEntry > provider: self > + label: 'install SAR' translatedNoop > - label: 'install SAR' > selector: #installSAR: > + description: 'install this Squeak ARchive into the image.' translatedNoop > + buttonLabel: 'install' translatedNoop! > - description: 'install this Squeak ARchive into the image.' > - buttonLabel: 'install'! > > Item was changed: > ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- > majorMinorVersion > "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." > - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " > - "SystemVersion current majorMinorVersion" > > | char stream | > + ^ (version includes: $.) > + ifTrue: > + [stream := ReadStream on: version, 'x'. > + stream upTo: $.. > + char := stream next. > + [char isDigit] > + whileTrue: [char := stream next]. > + version copyFrom: 1 to: stream position - 1] > + ifFalse: > + [version] > + > + " > + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion > + (SystemVersion new version: 'Testing') majorMinorVersion > + SystemVersion current majorMinorVersion > + " > + > - stream := ReadStream on: version, 'x'. > - stream upTo: $.. > - char := stream next. > - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." > - [char isDigit] > - whileTrue: [char := stream next]. > - ^ version copyFrom: 1 to: stream position - 1 > ! > > Item was changed: > ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- > addNewFontSize: pointSize > "Add a font in specified size to the array of fonts." > | f d newArray t isSet | > fontArray first emphasis ~= 0 ifTrue: [ > t := TextConstants at: self fontArray first familyName asSymbol. > t fonts first emphasis = 0 ifTrue: [ > ^ t addNewFontSize: pointSize. > ]. > ]. > > pointSize <= 0 ifTrue: [^ nil]. > fontArray do: [:s | > s pointSize = pointSize ifTrue: [^ s]. > ]. > > (isSet := fontArray first isKindOf: TTCFontSet) > ifTrue:[ > | fonts | > fonts := fontArray first fontArray collect: [ :font | > | newFont | > (font isNil) > ifTrue: [newFont := nil] > ifFalse: [ > newFont := (font ttcDescription size > 256) > ifTrue: [MultiTTCFont new initialize] > ifFalse: [TTCFont new initialize]. > newFont ttcDescription: font ttcDescription. > newFont pixelSize: pointSize * 96 // 72. > font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | > proto ifNotNil: [ > d := proto class new initialize. > d ttcDescription: proto ttcDescription. > d pixelSize: newFont pixelSize. > newFont derivativeFont: d]]]. > ]. > newFont]. > f := TTCFontSet newFontArray: fonts] > ifFalse: [ > f := fontArray first class new initialize: fontArray first. > f pointSize: pointSize. > fontArray first derivativeFonts do: [:proto | > proto ifNotNil: [ > + d := TTCFont new initialize: proto. > - d := proto class new initialize: proto. > d pointSize: f pointSize. > + f derivativeFont: d. > - f derivativeFont: d mainFont: proto. > ]. > ]. > ]. > newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. > self newFontArray: newArray. > isSet ifTrue: [ > TTCFontSet register: newArray at: newArray first familyName asSymbol. > ]. > ^ self fontOfPointSize: pointSize > ! > > Item was changed: > ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- > floatPrecisionForDecimalPlaces: places > "Answer the floatPrecision that corresponds to the given number of decimal places" > > ^ places caseOf: > {[0]->[1] . > + [1]-> [0.1] . > + [2]-> [0.01] . > + [3]-> [0.001] . > + [4]-> [0.0001] . > + [5]-> [0.00001] . > + [6]-> [0.000001] . > + [7]-> [0.0000001] . > + [8]-> [0.00000001] . > + [9]-> [0.000000001]. > + [10]->[0.0000000001]} > - [1]->[0.1] . > - [2]->[0.01] . > - [3]->[0.001] . > - [4]->[0.0001] . > - [5]->[0.00001] . > - [6]->[0.000001] . > - [7]->[0.0000001] . > - [8]->[0.00000001] . > - [9]->[0.000000001]} > otherwise: > [(10.0 raisedTo: places negated) asFloat] > > " > (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] > (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] > "! > > Item was changed: > ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- > registerInFlapsRegistry > "Register the receiver in the system's flaps registry" > self environment > at: #Flaps > + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} > - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') > forFlapNamed: 'Tools'.]! > > From Das.Linux at gmx.de Wed Aug 31 21:23:59 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Aug 31 21:24:04 2016 Subject: [squeak-dev] The Trunk: System-tfel.872.mcz In-Reply-To: References: <57c6a528.438d370a.2f544.d41fSMTPIN_ADDED_MISSING@mx.google.com> Message-ID: On 31.08.2016, at 23:15, Chris Muller wrote: > It looks like you're converting some := assignements to underscore > assignments... It looks like but it ain't. See other messages of Tim. It's just the ancestry being pulled in and Squeaksource being oblivious about that. Best regards -Tobias > > On Wed, Aug 31, 2016 at 4:34 AM, wrote: >> Tim Felgentreff uploaded a new version of System to project The Trunk: >> http://source.squeak.org/trunk/System-tfel.872.mcz >> >> ==================== Summary ==================== >> >> Name: System-tfel.872 >> Author: tfel >> Time: 6 August 2016, 1:52:05.699519 pm >> UUID: 488c4f3a-c6f2-4f08-92ce-136da38c76ac >> Ancestors: System-tfel.871 >> >> don't error when there are no translations available >> >> =============== Diff against System-mt.870 =============== >> >> Item was changed: >> ----- Method: CodeLoader>>installProject (in category 'installing') ----- >> installProject >> "Assume that we're loading a single file and it's a project" >> | aStream | >> + aStream _ sourceFiles first contentStream. >> - aStream := sourceFiles first contentStream. >> aStream ifNil:[^self error:'Project was not loaded']. >> + ProjectLoading openOn: aStream! >> - ProjectLoading >> - openName: nil "<--do we want to cache this locally? Need a name if so" >> - stream: aStream >> - fromDirectory: nil >> - withProjectView: nil. >> - ! >> >> Item was changed: >> ----- Method: ExternalDropHandler class>>defaultProjectHandler (in category 'private') ----- >> defaultProjectHandler >> + ^ ExternalDropHandler >> - ^ExternalDropHandler >> type: nil >> extension: 'pr' >> + action: [:stream | ProjectLoading openOn: stream]! >> - action: [:stream | >> - ProjectLoading >> - openName: nil >> - stream: stream >> - fromDirectory: nil >> - withProjectView: nil] >> - ! >> >> Item was changed: >> ----- Method: ExternalSettings class>>assuredPreferenceDirectory (in category 'accessing') ----- >> assuredPreferenceDirectory >> "Answer the preference directory, creating it if necessary" >> >> + | prefDir topDir | >> - | prefDir | >> prefDir := self preferenceDirectory. >> prefDir >> ifNil: >> + [topDir := Preferences startInUntrustedDirectory >> + ifTrue: [FileDirectory on: SecurityManager default secureUserDirectory] >> + ifFalse: [FileDirectory default]. >> + prefDir := topDir directoryNamed: self preferenceDirectoryName. >> - [prefDir := FileDirectory default directoryNamed: self preferenceDirectoryName. >> prefDir assureExistence]. >> ^ prefDir! >> >> Item was added: >> + ----- Method: GetTextTranslator>>moFiles (in category 'private') ----- >> + moFiles >> + >> + ^ moFiles! >> >> Item was changed: >> ----- Method: ImageSegment>>declareAndPossiblyRename: (in category 'fileIn/Out') ----- >> declareAndPossiblyRename: classThatIsARoot >> | existing catInstaller | >> "The class just arrived in this segment. How fit it into the Smalltalk dictionary? If it had an association, that was installed with associationDeclareAt:." >> >> + catInstaller _ [ >> - catInstaller := [ >> classThatIsARoot superclass name == #Player >> ifTrue: [classThatIsARoot category: Object categoryForUniclasses] >> ifFalse: [(classThatIsARoot superclass name beginsWith: 'WonderLandActor') >> ifTrue: [classThatIsARoot category: 'Balloon3D-UserObjects'] >> + ifFalse: [classThatIsARoot category: Object categoryForUniclasses]]. >> - ifFalse: [classThatIsARoot category: 'Morphic-Imported']]. >> ]. >> classThatIsARoot superclass addSubclass: classThatIsARoot. >> (Smalltalk includesKey: classThatIsARoot name) ifFalse: [ >> "Class entry in Smalltalk not referred to in Segment, install anyway." >> catInstaller value. >> ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. >> + existing _ Smalltalk at: classThatIsARoot name. >> - existing := Smalltalk at: classThatIsARoot name. >> existing xxxClass == ImageSegmentRootStub ifTrue: [ >> "We are that segment!! Must ask it carefully!!" >> catInstaller value. >> ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. >> existing == false | (existing == nil) ifTrue: [ >> "association is in outPointers, just installed" >> catInstaller value. >> ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. >> "Conflict with existing global or copy of the class" >> (existing isKindOf: Class) ifTrue: [ >> classThatIsARoot isSystemDefined not ifTrue: [ >> "UniClass. give it a new name" >> classThatIsARoot setName: classThatIsARoot baseUniclass chooseUniqueClassName. >> catInstaller value. "must be after new name" >> ^ Smalltalk at: classThatIsARoot name put: classThatIsARoot]. >> "Take the incoming one" >> self inform: 'Using newly arrived version of ', classThatIsARoot name. >> classThatIsARoot superclass removeSubclass: classThatIsARoot. "just in case" >> (Smalltalk at: classThatIsARoot name) becomeForward: classThatIsARoot. >> catInstaller value. >> ^ classThatIsARoot superclass addSubclass: classThatIsARoot]. >> self error: 'Name already in use by a non-class: ', classThatIsARoot name. >> ! >> >> Item was changed: >> ----- Method: ImageSegment>>smartFillRoots: (in category 'read/write segment') ----- >> smartFillRoots: dummy >> + | refs known ours ww blockers | >> - | refs ours blockers known | >> "Put all traced objects into my arrayOfRoots. Remove some >> that want to be in outPointers. Return blockers, an >> IdentityDictionary of objects to replace in outPointers." >> >> + blockers _ dummy blockers. >> + known _ (refs _ dummy references) size. >> - blockers := dummy blockers. >> - known := (refs := dummy references) size. >> refs keys do: [:obj | "copy keys to be OK with removing items" >> + (obj isSymbol) ifTrue: [refs removeKey: obj. known _ known-1]. >> - (obj isSymbol) ifTrue: [refs removeKey: obj. >> - known := known-1]. >> (obj class == PasteUpMorph) ifTrue: [ >> obj isWorldMorph & (obj owner == nil) ifTrue: [ >> + (dummy project ~~ nil and: [obj == dummy project world]) ifFalse: [ >> + refs removeKey: obj. known _ known-1. >> - obj == dummy project world ifFalse: [ >> - refs removeKey: obj. known := known-1. >> blockers at: obj put: >> + (StringMorph contents: 'The worldMorph of a different world')]]]. >> - (StringMorph >> - contents: 'The worldMorph of a different world')]]]. >> "Make a ProjectViewMorph here" >> "obj class == Project ifTrue: [Transcript show: obj; cr]." >> (blockers includesKey: obj) ifTrue: [ >> + refs removeKey: obj ifAbsent: [known _ known+1]. known _ known-1]. >> - refs removeKey: obj ifAbsent: [known := >> - known+1]. known := known-1]. >> ]. >> + ours _ dummy project ifNotNil: [dummy project world] ifNil: [ActiveWorld]. >> + refs keysDo: [:obj | >> - ours := dummy project world. >> - refs keysDo: [:obj | | ww | >> obj isMorph ifTrue: [ >> + ww _ obj world. >> - ww := obj world. >> (ww == ours) | (ww == nil) ifFalse: [ >> + refs removeKey: obj. known _ known-1. >> + blockers at: obj put: (StringMorph contents: >> + obj printString, ' from another world')]]]. >> - refs removeKey: obj. known := known-1. >> - blockers at: obj put: >> - (StringMorph contents: >> - obj >> - printString, ' from another world')]]]. >> "keep original roots on the front of the list" >> (dummy rootObject) do: [:rr | refs removeKey: rr ifAbsent: []]. >> + self classOrganizersBeRoots: dummy. >> + ^ dummy rootObject, refs fasterKeys asArray.! >> - ^ dummy rootObject, refs keys asArray. >> - >> - ! >> >> Item was changed: >> ----- Method: MOFile>>searchByDictionary: (in category 'public') ----- >> searchByDictionary: aString >> | index | >> + index := translations at: aString ifAbsentPut: [nil]. >> + index ifNil: [^ nil]. >> + ^self translatedString: index! >> - index := translations at: aString ifAbsent: [^nil]. >> - ^self translatedString: index >> - >> - ! >> >> Item was added: >> + ----- Method: MOFile>>translations (in category 'private') ----- >> + translations >> + >> + ^ translations! >> >> Item was changed: >> ----- Method: MczInstaller class>>serviceLoadVersion (in category 'services') ----- >> serviceLoadVersion >> ^ SimpleServiceEntry >> provider: self >> + label: 'load' translatedNoop >> - label: 'load' >> selector: #loadVersionFile: >> + description: 'load a package version' translatedNoop! >> - description: 'load a package version'! >> >> Item was changed: >> ----- Method: NaturalLanguageTranslator class>>translateWithoutLoading:toLocaleID:inDomain: (in category 'translation') ----- >> translateWithoutLoading: aString toLocaleID: localeID inDomain: aDomainName >> "try to translate with small footprint: >> if GetTextTranslator hasn't loaded MO, try to use InternalTranslator. >> if InternalTranslator isn't available, then actually load MO and use it" >> | translator | >> translator := self availableForLocaleID: localeID. >> + translator class = NaturalLanguageTranslator ifTrue: [^ aString]. >> (translator isDomainLoaded: aDomainName) ifFalse: [ >> (InternalTranslator availableLanguageLocaleIDs includes: localeID) >> ifTrue: [translator := InternalTranslator localeID: localeID]. >> ]. >> ^translator translate: aString inDomain: aDomainName! >> >> Item was changed: >> ----- Method: Preference>>helpString (in category 'menu') ----- >> helpString >> "Answer the help string provided for the receiver" >> >> + ^ helpString ifNil: ['no help available' translatedNoop]! >> - ^ helpString ifNil: ['no help available']! >> >> Item was removed: >> - ----- Method: Preferences class>>alwaysShowConnectionVocabulary (in category 'standard queries') ----- >> - alwaysShowConnectionVocabulary >> - ^ self >> - valueOfFlag: #alwaysShowConnectionVocabulary >> - ifAbsent: [false]! >> >> Item was changed: >> + ----- Method: Preferences class>>chooseEToysTitleFont (in category 'fonts') ----- >> - ----- Method: Preferences class>>chooseEToysTitleFont (in category 'prefs - fonts') ----- >> chooseEToysTitleFont >> + "Present a menu with the possible fonts for etoy titles" >> + >> - "present a menu with the possible fonts for the eToys" >> self >> + chooseFontWithPrompt: 'Choose the etoy title font' translated >> - chooseFontWithPrompt: 'eToys Title font...' translated >> andSendTo: self >> withSelector: #setEToysTitleFontTo: >> + highlight: self standardEToysTitleFont! >> - highlightSelector: #standardEToysTitleFont! >> >> Item was removed: >> - ----- Method: Preferences class>>haloTheme (in category 'prefs - halos') ----- >> - haloTheme >> - ^ self >> - valueOfFlag: #haloTheme >> - ifAbsent: [ #iconicHaloSpecifications ]! >> >> Item was changed: >> + ----- Method: Preferences class>>iconicHaloSpecifications (in category 'halos') ----- >> - ----- Method: Preferences class>>iconicHaloSpecifications (in category 'prefs - halos') ----- >> iconicHaloSpecifications >> "Answer an array that characterizes the locations, colors, icons, and selectors of the halo handles that may be used in the iconic halo scheme" >> >> "Preferences resetHaloSpecifications" >> >> ^ #( >> " selector horiz vert color info icon key >> --------- ------ ----------- ------------------------------- ---------------" >> (addCollapseHandle: left topCenter (tan) 'Halo-Collapse') >> (addPoohHandle: right center (white) 'Halo-Pooh') >> (addDebugHandle: right topCenter (blue veryMuchLighter) 'Halo-Debug') >> (addDismissHandle: left top (red muchLighter) 'Halo-Dismiss') >> (addRotateHandle: left bottom (blue) 'Halo-Rot') >> + (addMenuHandle: leftCenter top (white) 'Halo-Menu') >> - (addMenuHandle: leftCenter top (red) 'Halo-Menu') >> (addTileHandle: left bottomCenter (lightBrown) 'Halo-Tile') >> (addViewHandle: left center (cyan) 'Halo-View') >> (addGrabHandle: center top (black) 'Halo-Grab') >> (addDragHandle: rightCenter top (brown) 'Halo-Drag') >> (addDupHandle: right top (green) 'Halo-Dup') >> (addMakeSiblingHandle: right top (green muchDarker) 'Halo-Dup') >> (addHelpHandle: center bottom (lightBlue) 'Halo-Help') >> (addGrowHandle: right bottom (yellow) 'Halo-Scale') >> (addScaleHandle: right bottom (lightOrange) 'Halo-Scale') >> (addScriptHandle: rightCenter bottom (green muchLighter) 'Halo-Script') >> (addPaintBgdHandle: right center (lightGray) 'Halo-Paint') >> (addViewingHandle: leftCenter bottom (lightGreen lighter) 'Halo-View') >> (addRepaintHandle: right center (lightGray) 'Halo-Paint') >> (addFontSizeHandle: leftCenter bottom (lightGreen) 'Halo-FontSize') >> (addFontStyleHandle: center bottom (lightRed) 'Halo-FontStyle') >> (addFontEmphHandle: rightCenter bottom (lightBrown darker) 'Halo-FontEmph') >> (addRecolorHandle: right bottomCenter (magenta darker) 'Halo-Recolor') >> (addChooseGraphicHandle: right bottomCenter (green muchLighter) 'Halo-ChooseGraphic') >> ) ! >> >> Item was changed: >> + ----- Method: Preferences class>>menuColorString (in category 'misc') ----- >> - ----- Method: Preferences class>>menuColorString (in category 'support - misc') ----- >> menuColorString >> ^ ((self valueOfFlag: #menuColorFromWorld) >> + ifTrue: ['stop menu-color-from-world' translated] >> + ifFalse: ['start menu-color-from-world' translated]) ! >> - ifTrue: ['stop menu-color-from-world'] >> - ifFalse: ['start menu-color-from-world']) translated! >> >> Item was changed: >> + ----- Method: Preferences class>>restorePersonalPreferences (in category 'personalization') ----- >> - ----- Method: Preferences class>>restorePersonalPreferences (in category 'initialization - save/load') ----- >> restorePersonalPreferences >> "Restore all the user's saved personal preference settings" >> >> | savedPrefs | >> + savedPrefs _ self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet' translated]. >> - savedPrefs := self parameterAt: #PersonalDictionaryOfPreferences ifAbsent: [^ self inform: 'There are no personal preferences saved in this image yet']. >> >> savedPrefs associationsDo: >> + [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNilDo: >> - [:assoc | (self preferenceAt: assoc key ifAbsent: [nil]) ifNotNil: >> [:pref | pref preferenceValue: assoc value preferenceValue]]! >> >> Item was changed: >> + ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'personalization') ----- >> - ----- Method: Preferences class>>restorePreferencesFromDisk (in category 'initialization - save/load') ----- >> restorePreferencesFromDisk >> + | result | >> + result := (FileList2 modalFileSelectorForSuffixes: #('prefs')) . >> + result ifNil: [^ self]. >> + self restorePreferencesFromDisk: result fullName >> + >> - (FileDirectory default fileExists: 'my.prefs') >> - ifTrue: [ Cursor wait showWhile: [ >> - [ self loadPreferencesFrom: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error restoring the preferences' ] >> - ] ] >> - ifFalse: [ self inform: 'you haven''t saved your preferences yet!!' ]. >> ! >> >> Item was removed: >> - ----- Method: Preferences class>>showAdvancedNavigatorButtons (in category 'standard queries') ----- >> - showAdvancedNavigatorButtons >> - ^ self >> - valueOfFlag: #showAdvancedNavigatorButtons >> - ifAbsent: [ true ]! >> >> Item was changed: >> + ----- Method: Preferences class>>storePreferencesToDisk (in category 'personalization') ----- >> - ----- Method: Preferences class>>storePreferencesToDisk (in category 'initialization - save/load') ----- >> storePreferencesToDisk >> + | newName | >> + newName := UIManager default request: 'Please confirm name for save...' initialAnswer: 'myPreferences'. >> + newName isEmpty >> + ifTrue: [^ self]. >> + Cursor wait >> + showWhile: [[self storePreferencesIn: newName , '.prefs'] >> + on: Error >> + do: [:ex | self inform: 'there was an error storing your preferences to disk. you probably already have stored your preferences' translated]]! >> - Cursor wait showWhile: [ >> - [ self storePreferencesIn: 'my.prefs' ] on: Error do: [ :ex | self inform: 'there was an error storing your preferences to disk' ]]! >> >> Item was removed: >> - ----- Method: Preferences class>>useSmartLabels (in category 'standard queries') ----- >> - useSmartLabels >> - ^ self >> - valueOfFlag: #useSmartLabels >> - ifAbsent: [false]! >> >> Item was changed: >> ----- Method: Project class>>mostRecent:onServer: (in category 'squeaklet on server') ----- >> mostRecent: projName onServer: aServerDirectory >> | stem list max goodName triple num stem1 stem2 rawList nothingFound unEscName | >> "Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number. >> File names may or may not be HTTP escaped, %20 on the server." >> >> self flag: #bob. "do we want to handle unversioned projects as well?" >> + "I think we do now - Yoshiki." >> >> + nothingFound _ {nil. -1}. >> - nothingFound := {nil. -1}. >> aServerDirectory ifNil: [^nothingFound]. >> "23 sept 2000 - some old projects have periods in name so be more careful" >> + unEscName _ projName unescapePercents. >> + triple _ Project parseProjectFileName: unEscName. >> + stem _ triple first. >> + rawList _ aServerDirectory fileNames. >> - unEscName := projName unescapePercents. >> - triple := Project parseProjectFileName: unEscName. >> - stem := triple first. >> - rawList := aServerDirectory fileNames. >> >> + rawList isString ifTrue: [self inform: 'server is unavailable' translated. ^nothingFound]. >> + list _ rawList collect: [:nnn | nnn unescapePercents]. >> + max _ -1. goodName _ nil. >> - rawList isString ifTrue: [self inform: 'server is unavailable'. ^nothingFound]. >> - list := rawList collect: [:nnn | nnn unescapePercents]. >> - max := -1. goodName := nil. >> list withIndexDo: [:aName :ind | >> + ((aName beginsWith: stem)) ifTrue: [ >> + ((aName endsWith: triple last) or: [triple last = '' and: [aName endsWith: '.pr']]) ifTrue: [ >> + num _ (Project parseProjectFileName: aName) second. >> + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. >> - (aName beginsWith: stem) ifTrue: [ >> - num := (Project parseProjectFileName: aName) second. >> - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]. >> >> max = -1 ifFalse: [^ Array with: goodName with: max]. >> >> "try with underbar for spaces on server" >> (stem includes: $ ) ifTrue: [ >> + stem1 _ stem copyReplaceAll: ' ' with: '_'. >> - stem1 := stem copyReplaceAll: ' ' with: '_'. >> list withIndexDo: [:aName :ind | >> (aName beginsWith: stem1) ifTrue: [ >> + num _ (Project parseProjectFileName: aName) second. >> + num > max ifTrue: [max _ num. goodName _ (rawList at: ind)]]]]. >> - num := (Project parseProjectFileName: aName) second. >> - num > max ifTrue: [max := num. goodName := (rawList at: ind)]]]]. >> max = -1 ifFalse: [^ Array with: goodName with: max]. >> >> "try without the marker | " >> + stem1 _ stem allButLast, '.pr'. >> + stem2 _ stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" >> - stem1 := stem allButLast, '.pr'. >> - stem2 := stem1 copyReplaceAll: ' ' with: '_'. "and with spaces replaced" >> list withIndexDo: [:aName :ind | >> (aName beginsWith: stem1) | (aName beginsWith: stem2) ifTrue: [ >> + (triple _ aName findTokens: '.') size >= 2 ifTrue: [ >> + max _ 0. goodName _ (rawList at: ind)]]]. "no other versions" >> - (triple := aName findTokens: '.') size >= 2 ifTrue: [ >> - max := 0. goodName := (rawList at: ind)]]]. "no other versions" >> max = -1 ifFalse: [^ Array with: goodName with: max]. >> >> ^nothingFound "no matches" >> ! >> >> Item was changed: >> ----- Method: Project class>>squeakletDirectory (in category 'squeaklet on server') ----- >> squeakletDirectory >> >> | squeakletDirectoryName | >> + squeakletDirectoryName := SugarLauncher current >> + parameterAt: 'SQUEAKLETS' >> + ifAbsent: ['Squeaklets']. >> - squeakletDirectoryName := 'Squeaklets'. >> (FileDirectory default directoryExists: squeakletDirectoryName) ifFalse: [ >> FileDirectory default createDirectory: squeakletDirectoryName >> ]. >> ^FileDirectory default directoryNamed: squeakletDirectoryName! >> >> Item was changed: >> ----- Method: Project class>>sweep: (in category 'squeaklet on server') ----- >> sweep: aServerDirectory >> | repository list parts ind entry projectName versions | >> "On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'" >> "Project sweep: ((ServerDirectory serverNamed: 'DaniOnJumbo') clone >> directory: '/vol0/people/dani/Squeaklets/2.7')" >> >> "Ensure the 'older' directory" >> (aServerDirectory includesKey: 'older') >> ifFalse: [aServerDirectory createDirectory: 'older']. >> + repository _ aServerDirectory clone directory: aServerDirectory directory, '/older'. >> - repository := aServerDirectory clone directory: aServerDirectory directory, '/older'. >> >> "Collect each name, and decide on versions" >> + list _ aServerDirectory fileNames. >> + list isString ifTrue: [^ self inform: 'server is unavailable' translated]. >> + list _ list asSortedCollection asOrderedCollection. >> + parts _ list collect: [:en | Project parseProjectFileName: en]. >> + parts _ parts select: [:en | en third = 'pr']. >> + ind _ 1. >> + [entry _ list at: ind. >> + projectName _ entry first asLowercase. >> + versions _ OrderedCollection new. versions add: entry. >> + [(ind _ ind + 1) > list size >> - list := aServerDirectory fileNames. >> - list isString ifTrue: [^ self inform: 'server is unavailable']. >> - list := list asSortedCollection asOrderedCollection. >> - parts := list collect: [:en | Project parseProjectFileName: en]. >> - parts := parts select: [:en | en third = 'pr']. >> - ind := 1. >> - [entry := list at: ind. >> - projectName := entry first asLowercase. >> - versions := OrderedCollection new. versions add: entry. >> - [(ind := ind + 1) > list size >> ifFalse: [(parts at: ind) first asLowercase = projectName >> ifTrue: [versions add: (parts at: ind). true] >> ifFalse: [false]] >> ifTrue: [false]] whileTrue. >> aServerDirectory moveYoungest: 3 in: versions to: repository. >> ind > list size] whileFalse. >> ! >> >> Item was changed: >> ----- Method: Project>>depth (in category 'active process') ----- >> depth >> "Return the depth of this project from the top. >> topProject = 0, next = 1, etc." >> "Project current depth." >> >> + | depth project | >> + depth _ 0. >> + project _ self. >> - | depth topProject project | >> - depth := 0. >> - topProject := Project topProject. >> - project := self. >> >> + [project class == DiskProxy ifTrue: [^ depth]. >> + project isTopProject] >> + whileFalse: >> + [project _ project parent. >> + depth _ depth + 1]. >> - [project ~= topProject and:[project notNil]] >> - whileTrue: >> - [project := project parent. >> - depth := depth + 1]. >> ^ depth! >> >> Item was changed: >> ----- Method: Project>>doWeWantToRename (in category 'menu messages') ----- >> doWeWantToRename >> >> | want | >> >> self hasBadNameForStoring ifTrue: [^true]. >> + (self name beginsWith: 'Unnamed' translated) ifTrue: [^true]. >> + want _ world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. >> - (self name beginsWith: 'Unnamed') ifTrue: [^true]. >> - want := world valueOfProperty: #SuperSwikiRename ifAbsent: [false]. >> world removeProperty: #SuperSwikiRename. >> ^want >> >> ! >> >> Item was changed: >> ----- Method: Project>>htmlPagePrototype (in category 'file in/out') ----- >> htmlPagePrototype >> "Return the HTML page prototype" >> ^' >> >> Squeak Project >> >> >> >> >> > type="application/x-squeak-source" >> ALIGN="CENTER" >> WIDTH="$$WIDTH$$" >> HEIGHT="$$HEIGHT$$" >> src="$$PROJECT$$" >> + pluginspage="http://www.squeakland.org/download/"> >> - pluginspage="http://www.squeakland.org/plugin/detect/detectinstaller.html"> >> >> >> >> >> >> '! >> >> Item was changed: >> ----- Method: Project>>revert (in category 'file in/out') ----- >> revert >> | | >> "Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts." >> >> + projectParameters ifNil: [^ self inform: 'nothing to revert to' translated]. >> - projectParameters ifNil: [^ self inform: 'nothing to revert to']. >> parentProject enter: false revert: true saveForRevert: false. >> "does not return!!" >> ! >> >> Item was changed: >> ----- Method: Project>>storeOnServer (in category 'file in/out') ----- >> storeOnServer >> >> "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." >> >> world setProperty: #optimumExtentFromAuthor toValue: world extent. >> + self validateProjectNameIfOK: [:details | >> + self acceptProjectDetails: details. >> - self validateProjectNameIfOK: [ >> self isCurrentProject ifTrue: ["exit, then do the command" >> ^ self >> armsLengthCommand: #storeOnServerAssumingNameValid >> withDescription: 'Publishing' translated >> ]. >> self storeOnServerWithProgressInfo. >> ].! >> >> Item was changed: >> ----- Method: Project>>storeOnServerAssumingNameValid (in category 'file in/out') ----- >> storeOnServerAssumingNameValid >> >> "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." >> - >> world setProperty: #optimumExtentFromAuthor toValue: world extent. >> self isCurrentProject ifTrue: ["exit, then do the command" >> + Flaps globalFlapTabsIfAny do: [:each | Flaps removeFlapTab: each keepInList: true]. >> ^ self >> armsLengthCommand: #storeOnServerAssumingNameValid >> withDescription: 'Publishing' translated >> ]. >> self storeOnServerWithProgressInfo. >> ! >> >> Item was changed: >> ----- Method: Project>>storeOnServerShowProgressOn:forgetURL: (in category 'file in/out') ----- >> storeOnServerShowProgressOn: aMorphOrNil forgetURL: forget >> >> "Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded." >> >> world setProperty: #optimumExtentFromAuthor toValue: world extent. >> + self validateProjectNameIfOK: [:details | >> + self acceptProjectDetails: details. >> - self validateProjectNameIfOK: [ >> self isCurrentProject ifTrue: ["exit, then do the command" >> forget >> ifTrue: [self forgetExistingURL] >> ifFalse: [urlList isEmptyOrNil ifTrue: [urlList := parentProject urlList copy]]. >> ^self >> armsLengthCommand: #storeOnServerAssumingNameValid >> withDescription: 'Publishing' translated >> ]. >> self storeOnServerWithProgressInfoOn: aMorphOrNil. >> ]. >> ! >> >> Item was changed: >> ----- Method: Project>>validateProjectNameIfOK: (in category 'menu messages') ----- >> validateProjectNameIfOK: aBlock >> >> | details | >> >> details := world valueOfProperty: #ProjectDetails. >> details ifNotNil: ["ensure project info matches real project name" >> details at: 'projectname' put: self name. >> ]. >> + self doWeWantToRename ifFalse: [^ aBlock value: details]. >> - self doWeWantToRename ifFalse: [^aBlock value]. >> (Smalltalk at: #EToyProjectDetailsMorph) ifNotNil: [:etpdm | >> etpdm >> getFullInfoFor: self >> + ifValid: [:d | >> - ifValid: [ >> World displayWorldSafely. >> + aBlock value: d >> - aBlock value. >> ] >> expandedFormat: false] >> ! >> >> Item was changed: >> ----- Method: ProjectLauncher>>loginAs: (in category 'eToy login') ----- >> loginAs: userName >> "Assuming that we have a valid user url; read its contents and see if the user is really there." >> | actualName userList | >> eToyAuthentificationServer ifNil:[ >> self proceedWithLogin. >> ^true]. >> + userList _ eToyAuthentificationServer eToyUserList. >> - userList := eToyAuthentificationServer eToyUserList. >> userList ifNil:[ >> self inform: >> 'Sorry, I cannot find the user list. >> (this may be due to a network problem) >> + Please hit Cancel if you wish to use Squeak.' translated. >> - Please hit Cancel if you wish to use Squeak.'. >> ^false]. >> "case insensitive search" >> + actualName _ userList detect:[:any| any sameAs: userName] ifNone:[nil]. >> - actualName := userList detect:[:any| any sameAs: userName] ifNone:[nil]. >> actualName isNil ifTrue:[ >> + self inform: 'Unknown user: ' translated ,userName. >> - self inform: 'Unknown user: ',userName. >> ^false]. >> Utilities authorName: actualName. >> eToyAuthentificationServer eToyUserName: actualName. >> self proceedWithLogin. >> ^true! >> >> Item was changed: >> ----- Method: SARInstaller class>>serviceFileInSAR (in category 'class initialization') ----- >> serviceFileInSAR >> "Answer a service for opening a changelist browser on a file" >> >> ^ SimpleServiceEntry >> provider: self >> + label: 'install SAR' translatedNoop >> - label: 'install SAR' >> selector: #installSAR: >> + description: 'install this Squeak ARchive into the image.' translatedNoop >> + buttonLabel: 'install' translatedNoop! >> - description: 'install this Squeak ARchive into the image.' >> - buttonLabel: 'install'! >> >> Item was changed: >> ----- Method: SystemVersion>>majorMinorVersion (in category 'accessing') ----- >> majorMinorVersion >> "Return the major/minor version number of the form X.Y, without any 'alpha' or 'beta' or other suffix." >> - "(SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion" " --> 'Squeak3.7' " >> - "SystemVersion current majorMinorVersion" >> >> | char stream | >> + ^ (version includes: $.) >> + ifTrue: >> + [stream := ReadStream on: version, 'x'. >> + stream upTo: $.. >> + char := stream next. >> + [char isDigit] >> + whileTrue: [char := stream next]. >> + version copyFrom: 1 to: stream position - 1] >> + ifFalse: >> + [version] >> + >> + " >> + (SystemVersion new version: 'Squeak3.7alpha') majorMinorVersion >> + (SystemVersion new version: 'Testing') majorMinorVersion >> + SystemVersion current majorMinorVersion >> + " >> + >> - stream := ReadStream on: version, 'x'. >> - stream upTo: $.. >> - char := stream next. >> - char ifNil: [^ version]. "eg: 'Jasmine-rc1' has no $. in it." >> - [char isDigit] >> - whileTrue: [char := stream next]. >> - ^ version copyFrom: 1 to: stream position - 1 >> ! >> >> Item was changed: >> ----- Method: TextStyle>>addNewFontSize: (in category '*System-Fonts') ----- >> addNewFontSize: pointSize >> "Add a font in specified size to the array of fonts." >> | f d newArray t isSet | >> fontArray first emphasis ~= 0 ifTrue: [ >> t := TextConstants at: self fontArray first familyName asSymbol. >> t fonts first emphasis = 0 ifTrue: [ >> ^ t addNewFontSize: pointSize. >> ]. >> ]. >> >> pointSize <= 0 ifTrue: [^ nil]. >> fontArray do: [:s | >> s pointSize = pointSize ifTrue: [^ s]. >> ]. >> >> (isSet := fontArray first isKindOf: TTCFontSet) >> ifTrue:[ >> | fonts | >> fonts := fontArray first fontArray collect: [ :font | >> | newFont | >> (font isNil) >> ifTrue: [newFont := nil] >> ifFalse: [ >> newFont := (font ttcDescription size > 256) >> ifTrue: [MultiTTCFont new initialize] >> ifFalse: [TTCFont new initialize]. >> newFont ttcDescription: font ttcDescription. >> newFont pixelSize: pointSize * 96 // 72. >> font derivativeFonts notEmpty ifTrue: [font derivativeFonts do: [ :proto | >> proto ifNotNil: [ >> d := proto class new initialize. >> d ttcDescription: proto ttcDescription. >> d pixelSize: newFont pixelSize. >> newFont derivativeFont: d]]]. >> ]. >> newFont]. >> f := TTCFontSet newFontArray: fonts] >> ifFalse: [ >> f := fontArray first class new initialize: fontArray first. >> f pointSize: pointSize. >> fontArray first derivativeFonts do: [:proto | >> proto ifNotNil: [ >> + d := TTCFont new initialize: proto. >> - d := proto class new initialize: proto. >> d pointSize: f pointSize. >> + f derivativeFont: d. >> - f derivativeFont: d mainFont: proto. >> ]. >> ]. >> ]. >> newArray := (fontArray copyWith: f) asArray sort: [:a :b | a pointSize <= b pointSize]. >> self newFontArray: newArray. >> isSet ifTrue: [ >> TTCFontSet register: newArray at: newArray first familyName asSymbol. >> ]. >> ^ self fontOfPointSize: pointSize >> ! >> >> Item was changed: >> ----- Method: Utilities class>>floatPrecisionForDecimalPlaces: (in category 'miscellaneous') ----- >> floatPrecisionForDecimalPlaces: places >> "Answer the floatPrecision that corresponds to the given number of decimal places" >> >> ^ places caseOf: >> {[0]->[1] . >> + [1]-> [0.1] . >> + [2]-> [0.01] . >> + [3]-> [0.001] . >> + [4]-> [0.0001] . >> + [5]-> [0.00001] . >> + [6]-> [0.000001] . >> + [7]-> [0.0000001] . >> + [8]-> [0.00000001] . >> + [9]-> [0.000000001]. >> + [10]->[0.0000000001]} >> - [1]->[0.1] . >> - [2]->[0.01] . >> - [3]->[0.001] . >> - [4]->[0.0001] . >> - [5]->[0.00001] . >> - [6]->[0.000001] . >> - [7]->[0.0000001] . >> - [8]->[0.00000001] . >> - [9]->[0.000000001]} >> otherwise: >> [(10.0 raisedTo: places negated) asFloat] >> >> " >> (0 to: 6) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] >> (-10 to: 20) collect: [:i | Utilities floatPrecisionForDecimalPlaces: i] >> "! >> >> Item was changed: >> ----- Method: Utilities class>>registerInFlapsRegistry (in category 'class initialization') ----- >> registerInFlapsRegistry >> "Register the receiver in the system's flaps registry" >> self environment >> at: #Flaps >> + ifPresent: [:cl | cl registerQuad: {#Utilities. #recentSubmissionsWindow. 'Recent' translatedNoop. 'A message browser that tracks the most recently-submitted methods' translatedNoop} >> - ifPresent: [:cl | cl registerQuad: #(Utilities recentSubmissionsWindow 'Recent' 'A message browser that tracks the most recently-submitted methods') >> forFlapNamed: 'Tools'.]! From hannes.hirzel at gmail.com Wed Aug 31 21:28:06 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 21:28:09 2016 Subject: [squeak-dev] EToys in the Trunk In-Reply-To: References: Message-ID: Hello Levente I suggest yes, for the time being. Later on it should be made unload-able. --Hannes On 8/31/16, Levente Uzonyi wrote: > Hi All, > > With the recent updates, we have the full EToys package in the Trunk, > which has more than 78k LoC. That's almost 1.5x what Morphic has, and > it's more than Kernel, System and Collections together. > > Do we want to keep it in the Trunk? > > Levente > > From asqueaker at gmail.com Wed Aug 31 21:30:33 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 31 21:31:18 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: <00A78F34-3E9C-447D-B1BE-B3653B7C19D2@gmail.com> References: <00A78F34-3E9C-447D-B1BE-B3653B7C19D2@gmail.com> Message-ID: I would, of course, love for Ma Serializer to be considered. Its mature and proven, and has a lot of hooks and I just know the scrutiny and brilliance of this community would benefit it tremendously, and since Magma uses it, would make Magma fundamentally better, too. The Fuel hysteria appears to have already garnered everyone's vote before I saw this thread to get myself on the ballot.. I once took at look at trying to use Fuel for Magma, but its much too limited (and not nearly as much faster than Ma Serializer as reported in the Fuel paper). Its is good for UC1) Save an object and UC2) Load an object, but not much else. :( On Wed, Aug 31, 2016 at 6:40 AM, Eliot Miranda wrote: > > > On Aug 31, 2016, at 11:14 AM, Bert Freudenberg wrote: > > On Wednesday, 31 August 2016, H. Hirzel wrote: >> >> >> We might consider JSON or Fuel might as well options for a format to >> save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for >> example). > > > If someone wants to take a serious look I'd suggest Fuel. Being a > replacement for ImageSegments was one of its design goals, if I remember > correctly. > > > +1. It also has a very performant architecture. It is very similar to VW's > parcel format which priced to be significantly faster than other formats at > PPD. > > > - Bert - > > > > > From asqueaker at gmail.com Wed Aug 31 21:52:51 2016 From: asqueaker at gmail.com (Chris Muller) Date: Wed Aug 31 21:53:36 2016 Subject: [squeak-dev] EToys in the Trunk In-Reply-To: References: Message-ID: I think Levente's question deserves more discussion. What is the direction? What is the plan? From commits at source.squeak.org Wed Aug 31 21:55:12 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 21:55:15 2016 Subject: [squeak-dev] Daily Commit Log Message-ID: <20160831215512.21481.qmail@box4.squeak.org> Changes to Trunk (http://source.squeak.org/trunk.html) in the last 24 hours: http://lists.squeakfoundation.org/pipermail/packages/2016-August/068789.html Name: EToys-tfel.218 Ancestors: EToys-tfel.217 stop the players sound from playing if we have it. (adapted from the WS-Sound package) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068790.html Name: Morphic-tfel.1304 Ancestors: Morphic-tfel.1303 Do not call stopSound on the Players, instead leave the decision to stop sounds when they stop running up to the players. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068791.html Name: EToys-tfel.170 Ancestors: EToys-tfel.169 fix Etoys error reporting and script precedence transformation ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068792.html Name: EToys-tfel.168 Ancestors: EToys-tfel.167 - fix initialization of BlockNodes. For closure analysis, they *must* have temporaries set - fix height of ScriptMorphs in compound tiles so they get the events for showing drop targets - fix a potential ZeroDivisionError in tracking of drop zones in script editor morphs - adapt script encoder lookup to return the value of the assocBlock, so it is consistent with the superclass implementation ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068793.html Name: EToys-tfel.166 Ancestors: EToys-tfel.165 adapt a few more overrides from Pango and the scratch sound editor ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068794.html Name: EToys-tfel.163 Ancestors: EToys-tfel.162 a few updates to make Squeakland Etoys cleanly load and unload ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068795.html Name: EToys-tfel.167 Ancestors: EToys-tfel.166 fix DNU ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068796.html Name: EToys-tfel.162 Ancestors: EToys-tfel.161 - fix FileList2 opening (no more login buttons for now) - fix ScriptEncoder to generate correct method headers ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068801.html Name: Collections-kfr.9 Ancestors: Collections-kfr.8 Fix long standing bug with printing small numbers ie 1.2245678e-16 Copied method from Squeak 4.4 ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068802.html Name: EToys-tfel.208 Ancestors: EToys-tfel.207 HACK: workaround a short-circuit in type tile lists presenting their menu ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068803.html Name: EToys-tfel.207 Ancestors: EToys-tfel.206 - avoid getting our classes removed by the squeak release build process - whitespace cleanup - preferences cleanup - make the sugar nav bar be big down to sizes of 1024x768 ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068804.html Name: EToys-tfel.206 Ancestors: EToys-tfel.205 enable drawing on top of the kedama morph, including removing turtles ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068805.html Name: EToys-tfel.205 Ancestors: EToys-tfel.204 - prepare KedamaMorphs for painting directly - language translation finding moved to trunk - fix syntax errors in setHueShift and setSaturationShift - fix opening Etoys projects in Gallery - call super in UserText ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068806.html Name: EToys-tfel.213 Ancestors: EToys-tfel.212 convert underscore assignments to := ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068807.html Name: EToys-tfel.209 Ancestors: EToys-tfel.208 - allow dropping function tiles in the test area - just for Jens, add a 'random color' tile to the golden box ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068808.html Name: EToys-tfel.204 Ancestors: EToys-tfel.203 remove many classes that I think aren't needed anymore ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068809.html Name: EToys-tfel.203 Ancestors: EToys-tfel.202 delete unused InputSensor ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068810.html Name: EToys-tfel.202 Ancestors: EToys-tfel.201 refactor and consolidate loading and opening sexp projects ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068811.html Name: EToys-tfel.199 Ancestors: EToys-tfel.198 - add a fix to parse sexp Characters that are printed as strings - re-add openFromImagePath:, but this time using loadFromImagePath: ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068812.html Name: EToys-tfel.201 Ancestors: EToys-tfel.200 fix a release issue ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068813.html Name: EToys-tfel.200 Ancestors: EToys-tfel.199 quit without save in etoy friendly mode ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068814.html Name: EToys-tfel.198 Ancestors: EToys-tfel.197 another fix ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068815.html Name: EToys-tfel.197 Ancestors: EToys-tfel.196 revert to full project saving and loading, but do allow the sexp loading, too ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068816.html Name: EToys-tfel.196 Ancestors: EToys-tfel.195 - move most of the project loading and saving refactorings into the System package - change SISS storing of projects to store the sexp string directly, rather than as binary ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068817.html Name: EToys-tfel.195 Ancestors: EToys-tfel.194 do not depend on Rome/Pango ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068818.html Name: EToys-tfel.194 Ancestors: EToys-tfel.193 move all siss stuff into siss package ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068819.html Name: EToys-tfel.193 Ancestors: EToys-tfel.192 - get rid of dead code paths (in part with undeclared identifiers) - fix setting the requestor in custom parsing code paths - avoid shadowing instance variables in extension methods on FillInTheBlankMorph - move ParseNodeBuilder from Meta-Examples, because it is specific to Etoys' use of SISS - fix primReplaceBytesFrom:... in PredicatedArray when KedamaPlugin2 is not available - do not depend on VideoForSqueak ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068820.html Name: EToys-tfel.192 Ancestors: EToys-tfel.191 move some code into Morphic-Extras ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068821.html Name: EToys-tfel.191 Ancestors: EToys-tfel.190 fix ambigious parsing @- vs @ - ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068822.html Name: EToys-tfel.189 Ancestors: EToys-tfel.188 remove useless overrides ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068823.html Name: EToys-tfel.190 Ancestors: EToys-tfel.189 move Meta method to Meta package ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068824.html Name: EToys-tfel.176 Ancestors: EToys-tfel.175 update order of setting the images, to work with latest trunk changes ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068825.html Name: EToys-tfel.175 Ancestors: EToys-pre.141, EToys-tfel.174 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068826.html Name: EToys-tfel.174 Ancestors: EToys-tfel.173 fixes to make the help book loading work ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068827.html Name: EToys-tfel.172 Ancestors: EToys-tfel.171 - update layouting and coloring for viewer flaps - define a missing instance variable in compound tlle morphs ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068828.html Name: EToys-tfel.171 Ancestors: EToys-tfel.170 updates for local variables in etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068829.html Name: EToys-tfel.173 Ancestors: EToys-tfel.172 fix graphicfilters initialization ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068830.html Name: EToys-tfel.184 Ancestors: EToys-tfel.183 - allow putting KedamaFloatArrays and WordArrays into random tiles - fix adding instance variables of different types in Kedama - save all script sources in the compiled method trailer, to avoid having to decompile again ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068831.html Name: EToys-tfel.181 Ancestors: EToys-tfel.180 remove obsolete methods from Presenter, move the relevant changes into EtoysPresenter ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068832.html Name: EToys-tfel.180 Ancestors: EToys-tfel.179 small cleanups and bug fixes ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068833.html Name: EToys-tfel.179 Ancestors: EToys-tfel.178 reorganize the sugarnavbar and add convenience buttons to save and load SISS etoys when we're on Sugar (where image segments do not work) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068834.html Name: EToys-tfel.178 Ancestors: EToys-tfel.177 - fix siss loading issue with Characters - move etoys-specific presenter methods into EtoysPresenter - move the supplies flap off screen in sugar, so it doesn't accidentally get stuck on the mouse ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068835.html Name: EToys-tfel.177 Ancestors: EToys-tfel.176 update to work with changed ThreeStateButton in trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068836.html Name: EToys-tfel.161 Ancestors: EToys-tfel.160 merge kedama into etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068837.html Name: EToys-tfel.160 Ancestors: EToys-tfel.159 re-add a method that was moved from connectors ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068838.html Name: EToys-tfel.210 Ancestors: EToys-tfel.209, EToys-mt.142 merge Squeakland Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068839.html Name: Kernel-kfr.6 Ancestors: Kernel-bf.5 A slightly modified version of Ricardo Moran's CalendarMorph circulated in late 2011. Provides a scriptable calendar object, with a variety of useful items available in the 'calendar' category of its viewer. http://tracker.squeakland.org/browse/SQ-1008 ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068840.html Name: EToys-tfel.188 Ancestors: EToys-tfel.187 - remove many methods that had undeclared identifiers that were in dead code paths - move instance variables on external classes that are only used in etoys into extension properties ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068841.html Name: Kernel-bf.7 Ancestors: Kernel-kfr.6 Change Set: monthAndDayOfWeek-sw Date: 22 June 2012 Makes the month names January...December and weekday names Monday..Sunday appear for translation in the translation tools. (modified by bf: do not add a method but mark the original definitions for translation) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068842.html Name: EToys-tfel.187 Ancestors: EToys-tfel.186 remove and refactor many methods with undeclared references ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068843.html Name: EToys-tfel.186 Ancestors: EToys-tfel.185 fix Player>>random: to use the ordinary numeric random rather than some Kedama thing ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068844.html Name: EToys-tfel.185 Ancestors: EToys-tfel.184 make KedamaWorld larger by default ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068845.html Name: EToys-tfel.183 Ancestors: EToys-tfel.182 - fix attribute definitions for etoys players, it was updated in Squeakland but got lost during the merge. This fixes Kedama turtle variables - Kedama re-writing is based on the limited set of parse nodes in Squeak 3.8. Rather than redo it all, define some aliases of newer nodes. For now, this affects SpecialSelectorNodes, which map back to SelectorNodes for the Kedama rewriter - remove the stop button again in the sugar navigator. When running outside of the Sugar environment on the XO, it only mapped to #quitSqueak anyway - change Sugar's quitSqueak to ask for save confirmation just like the world menu would ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068846.html Name: EToys-tfel.182 Ancestors: EToys-tfel.181 remove obsolete Cursor primitive methods ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068847.html Name: EToys-tfel.159 Ancestors: EToys-tfel.158 pull broom morphs into etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068848.html Name: GetText-tfel.39 Ancestors: GetText-ul.38, GetText-bf.16 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068849.html Name: Kernel-kfr.8 Ancestors: Kernel-bf.7 Fix long standing bug with printing small numbers ie 1.2245678e-16 Copied methods from Squeak 4.4 ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068850.html Name: EToys-tfel.158 Ancestors: EToys-mt.140, Etoys-kfr.157 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068851.html Name: MorphicExtras-tfel.191 Ancestors: MorphicExtras-mt.183, MorphicExtras-tfel.190 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068852.html Name: MorphicExtras-tfel.190 Ancestors: MorphicExtras-tfel.189 remove direct references to Etoys and import code from Squeakland ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068853.html Name: MorphicExtras-tfel.189 Ancestors: MorphicExtras-tfel.188 remove references to undefined variables that came in from Squeakland etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068854.html Name: MorphicExtras-tfel.188 Ancestors: MorphicExtras-tfel.187 remove references to Etoys-only fields and methods ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068855.html Name: MorphicExtras-tfel.187 Ancestors: MorphicExtras-tfel.186 add a flag to suspend the replaying hand ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068856.html Name: MorphicExtras-tfel.186 Ancestors: MorphicExtras-tfel.185 Do not show a blank cursor when cancelling a sketch, because hitting the confirmation buttons becomes pretty difficult in that case. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068857.html Name: MorphicExtras-tfel.185 Ancestors: MorphicExtras-pre.180, MorphicExtras-tfel.184 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068858.html Name: MorphicExtras-tfel.184 Ancestors: MorphicExtras-tfel.183 translation ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068859.html Name: MorphicExtras-tfel.183 Ancestors: MorphicExtras-tfel.182 - if etoys is loaded and the sugar bar is enabled, defer to its sepcial methods to build flaps. - use a table layout in the flaps ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068860.html Name: MorphicExtras-tfel.182 Ancestors: MorphicExtras-tfel.181 use new sugar navigator preference if etoys is loaded ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068861.html Name: MorphicExtras-tfel.180 Ancestors: MorphicExtras-tfel.179 don't try to add empty morphs ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068862.html Name: MorphicExtras-tfel.181 Ancestors: MorphicExtras-tfel.180 additional merges from Squeakland Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068863.html Name: MorphicExtras-tfel.179 Ancestors: MorphicExtras-tfel.178, MorphicExtras-kfr.80 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068864.html Name: System-tfel.902 Ancestors: System-mt.901, System-tfel.882 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068865.html Name: System-tfel.880 Ancestors: System-tfel.879 Import Etoys and SISS independent bits for storing and loading images also from sexps from the Squeakland release. Mostly this just refactors the Project loading code into multiple different methods, but it also puts the junctions in there to save and load SISS SExpressions rather than image segments, if SISS and Etoys are loaded ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068866.html Name: System-tfel.882 Ancestors: System-tfel.880, System-mt.881 - merge with trunk - update DiskProxy>>enter:revert:saveForRevert: with Squeakland code ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068867.html Name: System-tfel.879 Ancestors: System-tfel.878 remove direct reference to Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068868.html Name: System-tfel.878 Ancestors: System-tfel.877 add Object>>translatedNoop as catch-all for localization ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068869.html Name: System-tfel.877 Ancestors: System-cmm.876, System-tfel.873 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068870.html Name: System-tfel.873 Ancestors: System-tfel.872 Fix an infinite loop when the locale is changed during startup ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068871.html Name: System-tfel.872 Ancestors: System-tfel.871 don't error when there are no translations available ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068872.html Name: System-tfel.871 Ancestors: System-mt.870, System-tfel.858 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068873.html Name: EToys-tfel.221 Ancestors: EToys-tfel.220 fix parsing of parameters ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068874.html Name: EToys-tfel.219 Ancestors: EToys-tfel.218 pasteUpMorph is usually nil at this point, ask the world ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068875.html Name: EToys-tfel.220 Ancestors: EToys-tfel.219 - make it easy to set the Kedama dimensions from etoys - register kedama particles in supplies ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068876.html Name: Morphic-tfel.1305 Ancestors: Morphic-tfel.1304 remove ugly owner hacks when we draw a new sketch and add its flex shell ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068877.html Name: MorphicExtras-tfel.195 Ancestors: MorphicExtras-tfel.194 Show the FrameRateMorph in the supplies tab ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068878.html Name: Nebraska-tfel.47 Ancestors: Nebraska-tfel.46 workaround. at least the PartsBin should work ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068879.html Name: Morphic-tfel.1305 Ancestors: Morphic-tfel.1304 remove ugly owner hacks when we draw a new sketch and add its flex shell ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068880.html Name: EToys-jl.222 Ancestors: EToys-tfel.221 tfel fixed reduceOnStack ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068881.html Name: EToys-tfel.224 Ancestors: EToys-jl.223 evaluate conditions in Kedama parallel for every turtle (so that e.g. randomness is parallel) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068882.html Name: System-tfel.858 Ancestors: System-tfel.857 - accessors for GetText translations so we can later get at the untranslated phrases - fix store project interaction - fix adding new font sizes for TTCFonts when the first derivative is a TTCFontSet ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068883.html Name: System-tfel.857 Ancestors: System-tfel.856 fasterKeys is deprecated ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068884.html Name: System-tfel.856 Ancestors: System-mt.855, System-kfr.65 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068885.html Name: Files-tfel.162 Ancestors: Files-cmm.161, Files-Richo.2 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068886.html Name: Network-tfel.183 Ancestors: Network-ul.182, Network-tfel.181 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068887.html Name: Network-tfel.181 Ancestors: Network-ul.180, Network-bf.3 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068888.html Name: TrueType-tfel.45 Ancestors: TrueType-mt.44, TrueType-tfel.44 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068889.html Name: TrueType-tfel.44 Ancestors: TrueType-mt.43, TrueType-bf.7 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068890.html Name: Graphics-tfel.361 Ancestors: Graphics-mt.360, Graphics-tfel.358 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068891.html Name: Graphics-tfel.358 Ancestors: Graphics-tfel.357, Graphics-mt.357 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068892.html Name: EToys-tfel.225 Ancestors: EToys-tfel.224 if any subnode of a message node sends a sequential selector, we need to make the node itself sequential, too ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068893.html Name: EToys-tfel.226 Ancestors: EToys-tfel.225 make the highlight morph work for single stepping through etoys scripts ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068894.html Name: EToys-tfel.227 Ancestors: EToys-tfel.226, EToys-jl.224 merge ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068895.html Name: Sound-tfel.58 Ancestors: Sound-mt.57, Sound-tfel.57 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068896.html Name: Sound-tfel.57 Ancestors: Sound-mt.56, Sound-kfr.27 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068897.html Name: Morphic-tfel.1288 Ancestors: Morphic-mt.1287, Morphic-tfel.1250 merge trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068898.html Name: Morphic-tfel.1250 Ancestors: Morphic-tfel.1249 be more reserved in novice mode about which things to show in the yellow button menu. ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068899.html Name: Morphic-tfel.1249 Ancestors: Morphic-tfel.1248 merge project export code from squeakland, guard it so we don't depend on etoys or siss ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068900.html Name: Morphic-tfel.1248 Ancestors: Morphic-tfel.1247 remove direct reference to Etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068901.html Name: EToys-tfel.228 Ancestors: EToys-tfel.227 apply fix from jl to skip drawing turtles if the semaphore is locked ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068902.html Name: EToys-tfel.228 Ancestors: EToys-tfel.227 apply fix from jl to skip drawing turtles if the semaphore is locked ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068903.html Name: Morphic-tfel.1247 Ancestors: Morphic-mt.1246, Morphic-tfel.1244 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068904.html Name: Morphic-tfel.1244 Ancestors: Morphic-tfel.1243 fix references to undefined symbols by removing dead code paths ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068905.html Name: Morphic-tfel.1243 Ancestors: Morphic-tfel.1242 add a flag to allow spawning the color picker morph without a color chart (used in etoys) ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068906.html Name: Morphic-tfel.1242 Ancestors: Morphic-tfel.1241 fix hotspot for color picker cursor ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068907.html Name: Morphic-tfel.1241 Ancestors: Morphic-mt.1240, Morphic-tfel.1222 merge with trunk ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068908.html Name: Morphic-tfel.1222 Ancestors: Morphic-tfel.1221 remove references to usePango instvar ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068909.html Name: Morphic-tfel.1221 Ancestors: Morphic-tfel.1220 check new sugar preference if etoys is loaded ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068910.html Name: Morphic-tfel.1220 Ancestors: Morphic-tfel.1219 update referencePool and TextMorph>>fillStyle to work with Squeakland etoys ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068911.html Name: Morphic-tfel.1219 Ancestors: Morphic-tfel.1218 fix SketchMorph>>extent: to really avoid extens where x OR y are zero ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068912.html Name: Morphic-tfel.1218 Ancestors: Morphic-mt.1217, Morphic-bf.107 merge from Squeakland Etoys image ============================================= http://lists.squeakfoundation.org/pipermail/packages/2016-August/068913.html Name: Morphic-jl.1290 Ancestors: Morphic-mt.1289, Morphic-tfel.1288 Fix removing of flex shell for morphs that do not have a world. ============================================= From hannes.hirzel at gmail.com Wed Aug 31 22:13:47 2016 From: hannes.hirzel at gmail.com (H. Hirzel) Date: Wed Aug 31 22:13:50 2016 Subject: [squeak-dev] Other serialisation formats -- SIXX serialisation format, JSON, Fuel? In-Reply-To: References: <00A78F34-3E9C-447D-B1BE-B3653B7C19D2@gmail.com> Message-ID: To widen the discussion. I think there was no discussion yet if the serialisation format should a) be a binary format b) a text format c) or that we need both. The prominent use case is saving and loading of projects, see thread 'Vaidotas, Squeak 5.1 saving of Morphic projects is broken' and the SISS thread. Speed of course is an issue. But then as well portability between different versions of images. If the question is put as Which serialisation format should succeed image segments then then the choice is probably limited to - Fuel - Ma Serializer On 8/31/16, Chris Muller wrote: > I would, of course, love for Ma Serializer to be considered. Its > mature and proven, and has a lot of hooks and I just know the scrutiny > and brilliance of this community would benefit it tremendously, and > since Magma uses it, would make Magma fundamentally better, too. > > The Fuel hysteria appears to have already garnered everyone's vote > before I saw this thread to get myself on the ballot.. I once took > at look at trying to use Fuel for Magma, but its much too limited (and > not nearly as much faster than Ma Serializer as reported in the Fuel > paper). Its is good for UC1) Save an object and UC2) Load an object, > but not much else. :( > > On Wed, Aug 31, 2016 at 6:40 AM, Eliot Miranda > wrote: >> >> >> On Aug 31, 2016, at 11:14 AM, Bert Freudenberg >> wrote: >> >> On Wednesday, 31 August 2016, H. Hirzel wrote: >>> >>> >>> We might consider JSON or Fuel might as well options for a format to >>> save projects (with ImageMorphs, Browsers, Workspaces, BookMorphs for >>> example). >> >> >> If someone wants to take a serious look I'd suggest Fuel. Being a >> replacement for ImageSegments was one of its design goals, if I remember >> correctly. >> >> >> +1. It also has a very performant architecture. It is very similar to >> VW's >> parcel format which priced to be significantly faster than other formats >> at >> PPD. >> >> >> - Bert - >> >> >> >> >> > > From timfelgentreff at gmail.com Wed Aug 31 22:33:44 2016 From: timfelgentreff at gmail.com (Tim Felgentreff) Date: Wed Aug 31 22:33:58 2016 Subject: [squeak-dev] EToys in the Trunk In-Reply-To: References: Message-ID: The plan was to get this in early to have the instability now rather than later in the release cycle. My main interest was in getting the Squeakland Etoys version running, including all the new graphics, Kedama2, and the Sugar stuff. But I also merged (for now) most of the support code for Dbus, Pango, Siss, Connectors, BroomMorphs, Skeleton, ScratchConnect, Flash, Gstreamer, DrGeo, ... everything from the last Squeakland release I could get in. Since a lot of that stuff won't be needed anymore, my plan now is to fix bugs in the things I definitely would want to keep, and strip out those things that are obsolete. I expect the Etoys package size will be reduced again. Please allow us some time for this. We will do our best to make sure the rest of the system doesn't break while we're working on Etoys. Most of the time the only negative effect should be the large download and image sizes. Cheers, Tim Chris Muller schrieb am Mi., 31. Aug. 2016, 23:53: > I think Levente's question deserves more discussion. > > What is the direction? What is the plan? > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160831/1f61a48d/attachment.htm From commits at source.squeak.org Wed Aug 31 22:38:48 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 22:38:50 2016 Subject: [squeak-dev] The Trunk: EToys-nice.214.mcz Message-ID: Nicolas Cellier uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-nice.214.mcz ==================== Summary ==================== Name: EToys-nice.214 Author: nice Time: 1 September 2016, 12:35:17.034795 am UUID: 2cee41a0-cb85-4b73-b2cd-828c3dbe0e32 Ancestors: EToys-tfel.213 Avoid using SmallInteger maxVal for 64bits compatibility. Indeed, the maxVal would not fit in a WordArray in 64bits VM =============== Diff against EToys-tfel.213 =============== Item was changed: ----- Method: ChessBoard class>>initializeHashKeys (in category 'class initialization') ----- initializeHashKeys "ChessGame initialize" | random | HashKeys := Array new: 12. 1 to: HashKeys size do:[:i| HashKeys at: i put: (WordArray new: 64)]. HashLocks := Array new: 12. 1 to: HashLocks size do:[:i| HashLocks at: i put: (WordArray new: 64)]. random := Random seed: 23648646. 1 to: 12 do:[:i| 1 to: 64 do:[:j| + (HashKeys at: i) at: j put: (random nextInt: 16r3FFFFFFF "SmallInteger maxVal on 32bits VM")- 1. + (HashLocks at: i) at: j put: (random nextInt: 16r3FFFFFFF "SmallInteger maxVal on 32bits VM") - 1. - (HashKeys at: i) at: j put: (random nextInt: SmallInteger maxVal) - 1. - (HashLocks at: i) at: j put: (random nextInt: SmallInteger maxVal) - 1. ]. ]. ! From nicolas.cellier.aka.nice at gmail.com Wed Aug 31 22:46:14 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Wed Aug 31 22:46:20 2016 Subject: [squeak-dev] Trunk update broken on 64-bit In-Reply-To: References: Message-ID: Hi, I'm hacking the update-tfel.393.mcm - Hope it's enough back in history... I've experimented other problems recently with updates: - if some SmallLand-ColorTheme ancestry was not in my package-cache the update failed - for some reason, the classPool variable C1 to C8 were classified as ClassBinding instead of simple Association and then ChessConstants initialize failed 2016-08-31 22:42 GMT+02:00 Levente Uzonyi : > Hi All, > > The new Etoys, particularly ChessBoard >> #initializeHashKeys, relies on > 31-bit SmallIntegers by the use of SmallInteger >> #maxVal. Since it's > already past the last update map, I don't know how it could be fixed to > avoid manual intervention. > > Levente > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160901/fbcccd43/attachment.htm From commits at source.squeak.org Wed Aug 31 22:53:15 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 22:53:20 2016 Subject: [squeak-dev] The Trunk: EToys-nice.229.mcz Message-ID: Nicolas Cellier uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-nice.229.mcz ==================== Summary ==================== Name: EToys-nice.229 Author: nice Time: 1 September 2016, 12:51:44.645852 am UUID: 2155201b-4578-424f-a873-b970480de230 Ancestors: EToys-tfel.228, EToys-nice.214 Merge EToys-nice.214 for 64bits image compatibility =============== Diff against EToys-tfel.228 =============== Item was changed: ----- Method: ChessBoard class>>initializeHashKeys (in category 'class initialization') ----- initializeHashKeys "ChessGame initialize" | random | HashKeys := Array new: 12. 1 to: HashKeys size do:[:i| HashKeys at: i put: (WordArray new: 64)]. HashLocks := Array new: 12. 1 to: HashLocks size do:[:i| HashLocks at: i put: (WordArray new: 64)]. random := Random seed: 23648646. 1 to: 12 do:[:i| 1 to: 64 do:[:j| + (HashKeys at: i) at: j put: (random nextInt: 16r3FFFFFFF "SmallInteger maxVal on 32bits VM")- 1. + (HashLocks at: i) at: j put: (random nextInt: 16r3FFFFFFF "SmallInteger maxVal on 32bits VM") - 1. - (HashKeys at: i) at: j put: (random nextInt: SmallInteger maxVal) - 1. - (HashLocks at: i) at: j put: (random nextInt: SmallInteger maxVal) - 1. ]. ]. ! From tim at rowledge.org Wed Aug 31 23:01:07 2016 From: tim at rowledge.org (tim Rowledge) Date: Wed Aug 31 23:01:12 2016 Subject: [squeak-dev] EToys in the Trunk In-Reply-To: References: Message-ID: <2F5AF09F-ABD5-47BC-927E-6C529D202105@rowledge.org> I suspect that like a lot of us I?m conflicted about having something large like EToys included. In one sense it?s an important project that needs to be constantly kept up to date and that is best done by having it always there so that anyone refactoring code can?t help but find the EToys code that needs to be updated. Of course, that?s the same argument one might make for Scratch, Magma, all the games, VMMaker and so on. On the other hand, it ?s obviously ridiculous to have all this stuff in a basic development image and anyone would mad to include so much waste of space nonsense. So obviously what we really need is a better system for dealing with this. I don?t know what that might be. The 'least unlikely to screw us? approach would seem to be having a lot of this in the general development image and make sure it is kept properly unload-able (autocorrect tried to make that ?unlovable? which seems oddly appropriate) for any deployment usage (like for example Scratch and indeed EToys). A more complicated idea (and we all love complex cool tools, right?) might be an extension of Chris? history database that includes all the code of all the packages (hey, slurp in all of squeaksource and so on! Stress Magma!) and when changing code in your image it checks also in the Great Database Of All Things. Must be a PhD or two in that , surely? tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Maybe Computer Science should be in the College of Theology From nicolas.cellier.aka.nice at gmail.com Wed Aug 31 23:12:00 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Wed Aug 31 23:12:04 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: <1472015217513-4912403.post@n4.nabble.com> References: <20160823020351.GA13829@shell.msen.com> <1471944106453-4912305.post@n4.nabble.com> <1472014917638-4912402.post@n4.nabble.com> <1472015217513-4912403.post@n4.nabble.com> Message-ID: Or would this even more simple hack work? Put in the preamble something like: Smalltalk at: SystemProgressMorph put: SystemProgressMorph copy. This way, the old instances should not be mutated... 2016-08-24 7:06 GMT+02:00 marcel.taeumel : > marcel.taeumel wrote > > > > Bert Freudenberg wrote > >> On Tue, Aug 23, 2016 at 11:21 AM, marcel.taeumel < > > >> Marcel.Taeumel@ > > >> > > >> wrote: > >> > >>> > >>> Hi, there. > >>> > >>> It is, unfortunately, not possible to turn back time and rewrite > >>> history. > >>> ;-) > >>> > >> > >> ... unless we're dealing with software. Oh wait, we are ;) > >> > >> There is several important code that makes excessive use of instVar > >>> accesses such as in SystemProgressMorph or HandMorph. Making any change > >>> in > >>> their class layout while using some of their methods will provoke a > >>> strange > >>> error. This could only be changed by a VM that keeps old class > >>> layouts/schemata around for some longer time until there is no old > >>> compiled > >>> method on any stack anymore. > >> > >> > >> Class layout changes and instance migration is handled fully in the > image > >> by class ClassBuilder. The VM is not at fault here. > >> > >> > >>> Usually, restarting the update process helps here. There is no way to > >>> fix > >>> that in order to interactively update from 5.0 to 5.1 without any > >>> errors. > >>> > >> > >> We can retroactively change the config map that introduced the problem. > >> I'm > >> certain it would be possible to fix, but I am not entirely sure it's > >> worth > >> the trouble. > >> > >> - Bert - > > Hi Bert, > > > > the config map will not help, we would have to change numerous MCZs since > > point X in time to rewrite history. :) "Oh, would we have always been > > using accessors here instead of instVar accessess..." > > > > Best, > > Marcel > > ...even then, how do you update the code in image Y, which is going to be > updated before it is updated? This is not even possible for every user's > images out there... :-/ > > The Java Hotspot VM has a mapping table for changed instVar accesses. Maybe > we could use this trick, too? Still, would only applies to future versions. > We cannot rewrite history because it is not only one piece of software in a > single version control system with a single version checked out. :) > > Best, > Marcel > > > > > -- > View this message in context: http://forum.world.st/Re-Does- > anyone-recognize-this-glitch-in-our-trunk-update-processing-was-Vm-dev- > buildspurtrunkvmmaker-tp4912130p4912403.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160901/d006fc8d/attachment.htm From nicolas.cellier.aka.nice at gmail.com Wed Aug 31 23:17:22 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Wed Aug 31 23:17:26 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <20160823020351.GA13829@shell.msen.com> <1471944106453-4912305.post@n4.nabble.com> <1472014917638-4912402.post@n4.nabble.com> <1472015217513-4912403.post@n4.nabble.com> Message-ID: Due to read only ClassBinding it would be just a little bit more hackish: (Smalltalk globals associationAt: #SystemProgressMorph) instVarAt: 2 put: SystemProgressMorph copy. 2016-09-01 1:12 GMT+02:00 Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com>: > Or would this even more simple hack work? Put in the preamble something > like: > > Smalltalk at: SystemProgressMorph put: SystemProgressMorph copy. > > This way, the old instances should not be mutated... > > 2016-08-24 7:06 GMT+02:00 marcel.taeumel : > >> marcel.taeumel wrote >> > >> > Bert Freudenberg wrote >> >> On Tue, Aug 23, 2016 at 11:21 AM, marcel.taeumel < >> >> >> Marcel.Taeumel@ >> >> >> > >> >> wrote: >> >> >> >>> >> >>> Hi, there. >> >>> >> >>> It is, unfortunately, not possible to turn back time and rewrite >> >>> history. >> >>> ;-) >> >>> >> >> >> >> ... unless we're dealing with software. Oh wait, we are ;) >> >> >> >> There is several important code that makes excessive use of instVar >> >>> accesses such as in SystemProgressMorph or HandMorph. Making any >> change >> >>> in >> >>> their class layout while using some of their methods will provoke a >> >>> strange >> >>> error. This could only be changed by a VM that keeps old class >> >>> layouts/schemata around for some longer time until there is no old >> >>> compiled >> >>> method on any stack anymore. >> >> >> >> >> >> Class layout changes and instance migration is handled fully in the >> image >> >> by class ClassBuilder. The VM is not at fault here. >> >> >> >> >> >>> Usually, restarting the update process helps here. There is no way to >> >>> fix >> >>> that in order to interactively update from 5.0 to 5.1 without any >> >>> errors. >> >>> >> >> >> >> We can retroactively change the config map that introduced the problem. >> >> I'm >> >> certain it would be possible to fix, but I am not entirely sure it's >> >> worth >> >> the trouble. >> >> >> >> - Bert - >> > Hi Bert, >> > >> > the config map will not help, we would have to change numerous MCZs >> since >> > point X in time to rewrite history. :) "Oh, would we have always been >> > using accessors here instead of instVar accessess..." >> > >> > Best, >> > Marcel >> >> ...even then, how do you update the code in image Y, which is going to be >> updated before it is updated? This is not even possible for every user's >> images out there... :-/ >> >> The Java Hotspot VM has a mapping table for changed instVar accesses. >> Maybe >> we could use this trick, too? Still, would only applies to future >> versions. >> We cannot rewrite history because it is not only one piece of software in >> a >> single version control system with a single version checked out. :) >> >> Best, >> Marcel >> >> >> >> >> -- >> View this message in context: http://forum.world.st/Re-Does- >> anyone-recognize-this-glitch-in-our-trunk-update-processing- >> was-Vm-dev-buildspurtrunkvmmaker-tp4912130p4912403.html >> Sent from the Squeak - Dev mailing list archive at Nabble.com. >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160901/292616ae/attachment.htm From nicolas.cellier.aka.nice at gmail.com Wed Aug 31 23:33:47 2016 From: nicolas.cellier.aka.nice at gmail.com (Nicolas Cellier) Date: Wed Aug 31 23:33:55 2016 Subject: [squeak-dev] Re: Does anyone recognize this glitch in our trunk update processing? (was: [Vm-dev] buildspurtrunkvmmakerimage.sh fails on Mac) In-Reply-To: References: <20160823020351.GA13829@shell.msen.com> <1471944106453-4912305.post@n4.nabble.com> <1472014917638-4912402.post@n4.nabble.com> <1472015217513-4912403.post@n4.nabble.com> Message-ID: The copy is not completely clean because this assertion then fails: (SystemProgressMorph superclass subclasses detect: [:e | e name = #SystemProgressMorph]) == SystemProgressMorph IOW, the superclass is still pointing to the old class, so any change to superclass layout won't propagate to the new subclass... Bad. But there's also this possibility: | oldClass | oldClass := SystemProgressMorph copy become: SystemProgressMorph. SystemProgressMorph allInstancesDo: [:e | oldClass adoptInstance: e]. We mutate all the instances to a class detached from Smalltalk and immune to some changes... Beware: don't you modify the layout of one superclass... 2016-09-01 1:17 GMT+02:00 Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com>: > Due to read only ClassBinding it would be just a little bit more hackish: > > (Smalltalk globals associationAt: #SystemProgressMorph) instVarAt: 2 put: > SystemProgressMorph copy. > > 2016-09-01 1:12 GMT+02:00 Nicolas Cellier gmail.com>: > >> Or would this even more simple hack work? Put in the preamble something >> like: >> >> Smalltalk at: SystemProgressMorph put: SystemProgressMorph copy. >> >> This way, the old instances should not be mutated... >> >> 2016-08-24 7:06 GMT+02:00 marcel.taeumel : >> >>> marcel.taeumel wrote >>> > >>> > Bert Freudenberg wrote >>> >> On Tue, Aug 23, 2016 at 11:21 AM, marcel.taeumel < >>> >>> >> Marcel.Taeumel@ >>> >>> >> > >>> >> wrote: >>> >> >>> >>> >>> >>> Hi, there. >>> >>> >>> >>> It is, unfortunately, not possible to turn back time and rewrite >>> >>> history. >>> >>> ;-) >>> >>> >>> >> >>> >> ... unless we're dealing with software. Oh wait, we are ;) >>> >> >>> >> There is several important code that makes excessive use of instVar >>> >>> accesses such as in SystemProgressMorph or HandMorph. Making any >>> change >>> >>> in >>> >>> their class layout while using some of their methods will provoke a >>> >>> strange >>> >>> error. This could only be changed by a VM that keeps old class >>> >>> layouts/schemata around for some longer time until there is no old >>> >>> compiled >>> >>> method on any stack anymore. >>> >> >>> >> >>> >> Class layout changes and instance migration is handled fully in the >>> image >>> >> by class ClassBuilder. The VM is not at fault here. >>> >> >>> >> >>> >>> Usually, restarting the update process helps here. There is no way to >>> >>> fix >>> >>> that in order to interactively update from 5.0 to 5.1 without any >>> >>> errors. >>> >>> >>> >> >>> >> We can retroactively change the config map that introduced the >>> problem. >>> >> I'm >>> >> certain it would be possible to fix, but I am not entirely sure it's >>> >> worth >>> >> the trouble. >>> >> >>> >> - Bert - >>> > Hi Bert, >>> > >>> > the config map will not help, we would have to change numerous MCZs >>> since >>> > point X in time to rewrite history. :) "Oh, would we have always been >>> > using accessors here instead of instVar accessess..." >>> > >>> > Best, >>> > Marcel >>> >>> ...even then, how do you update the code in image Y, which is going to be >>> updated before it is updated? This is not even possible for every user's >>> images out there... :-/ >>> >>> The Java Hotspot VM has a mapping table for changed instVar accesses. >>> Maybe >>> we could use this trick, too? Still, would only applies to future >>> versions. >>> We cannot rewrite history because it is not only one piece of software >>> in a >>> single version control system with a single version checked out. :) >>> >>> Best, >>> Marcel >>> >>> >>> >>> >>> -- >>> View this message in context: http://forum.world.st/Re-Does- >>> anyone-recognize-this-glitch-in-our-trunk-update-processing- >>> was-Vm-dev-buildspurtrunkvmmaker-tp4912130p4912403.html >>> Sent from the Squeak - Dev mailing list archive at Nabble.com. >>> >>> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20160901/eff792b8/attachment-0001.htm From commits at source.squeak.org Wed Aug 31 23:33:50 2016 From: commits at source.squeak.org (commits@source.squeak.org) Date: Wed Aug 31 23:34:03 2016 Subject: [squeak-dev] The Trunk: System-cmm.913.mcz Message-ID: Chris Muller uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-cmm.913.mcz ==================== Summary ==================== Name: System-cmm.913 Author: cmm Time: 31 August 2016, 6:32:49.269005 pm UUID: 5a79d2c3-b230-4998-a790-612dc6a3471c Ancestors: System-tfel.912 - Don't use colored parentheses and brackets in the Community dark theme, and intensify #dbRed a bit, it was too washed out. - A new hook in Smalltalk run: to allow temporarily patched production systems running to be re-patched in the event of a restart. =============== Diff against System-tfel.912 =============== Item was changed: ----- Method: CommunityTheme class>>addDarkSyntaxHighlighting: (in category 'instance creation') ----- addDarkSyntaxHighlighting: aUserInterfaceTheme "self createDark apply." | normal bold italic underlined darkMap | normal := TextEmphasis normal. bold:=TextEmphasis bold. italic:=TextEmphasis italic. underlined := TextEmphasis underlined. darkMap := StrikeFont familyName: 'Darkmap DejaVu Sans' pointSize: 9. aUserInterfaceTheme set: #color for: #TextAction to: self dbBlue; set: #default for: #SHTextStylerST80 to: {self dbForeground}; set: #invalid for: #SHTextStylerST80 to: {self dbInvalid}; set: #excessCode for: #SHTextStylerST80 to: {self dbInvalid twiceDarker}; "Descriptive text for humans, italicized." set: #comment for: #SHTextStylerST80 to: {self dbComment. italic}; set: #unfinishedComment for: #SHTextStylerST80 to: {self dbComment darker. italic}; set: #'$' for: #SHTextStylerST80 to: {self dbConstant}; set: #character for: #SHTextStylerST80 to: {self dbConstant}; set: #integer for: #SHTextStylerST80 to: {self dbConstant}; set: #number for: #SHTextStylerST80 to: {self dbConstant}; set: #- for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #= for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #symbol for: #SHTextStylerST80 to: {self dbBedrock}; set: #stringSymbol for: #SHTextStylerST80 to: {self dbBedrock}; set: #literalArray for: #SHTextStylerST80 to: {self dbForeground}; set: #string for: #SHTextStylerST80 to: {self dbConstant}; set: #unfinishedString for: #SHTextStylerST80 to: {self dbConstant darker}; set: #assignment for: #SHTextStylerST80 to: {nil. bold}; set: #ansiAssignment for: #SHTextStylerST80 to: {nil. bold}; set: #literal for: #SHTextStylerST80 to: {nil. bold}; set: #keyword for: #SHTextStylerST80 to: {self dbMessage}; set: #binary for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #unary for: #SHTextStylerST80 to: {self dbMessage}; set: #incompleteKeyword for: #SHTextStylerST80 to: {self dbMessage darker. {underlined. bold}}; set: #incompleteBinary for: #SHTextStylerST80 to: {self dbMessage darker. underlined}; set: #incompleteUnary for: #SHTextStylerST80 to: {self dbMessage darker. underlined}; set: #undefinedKeyword for: #SHTextStylerST80 to: {self dbInvalid}; set: #undefinedBinary for: #SHTextStylerST80 to: {self dbInvalid}; set: #undefinedUnary for: #SHTextStylerST80 to: {self dbInvalid}; "Delineate the selector (good for new users), and make the method look like a mini-document with a title." set: #patternKeyword for: #SHTextStylerST80 to: {self dbMessage lighter. {bold. underlined}}; set: #patternBinary for: #SHTextStylerST80 to: {nil. bold}; set: #patternUnary for: #SHTextStylerST80 to: {self dbMessage lighter. {bold. underlined}}; set: #self for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #super for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #true for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #false for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #nil for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #thisContext for: #SHTextStylerST80 to: {self dbBedrock. bold}; set: #return for: #SHTextStylerST80 to: {self dbForeground. bold}; set: #patternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. "darkMap"}; set: #methodArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter. TextEmphasis normal. "darkMap"}; set: #blockPatternArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #blockArg for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #argument for: #SHTextStylerST80 to: {self dbSelection twiceLighter}; set: #blockArgColon for: #SHTextStylerST80 to: {self dbBedrock}; + set: #leftParenthesis for: #SHTextStylerST80 to: {self dbBedrock muchLighter}; + set: #rightParenthesis for: #SHTextStylerST80 to: {self dbBedrock muchLighter}; + set: #leftParenthesis1 for: #SHTextStylerST80 to: {self dbBedrock twiceLighter}; + set: #rightParenthesis1 for: #SHTextStylerST80 to: {self dbBedrock twiceLighter}; + set: #leftParenthesis2 for: #SHTextStylerST80 to: {self dbBedrock}; + set: #rightParenthesis2 for: #SHTextStylerST80 to: {self dbBedrock}; + set: #leftParenthesis3 for: #SHTextStylerST80 to: {self dbPurple muchLighter}; + set: #rightParenthesis3 for: #SHTextStylerST80 to: {self dbPurple muchLighter}; + set: #leftParenthesis4 for: #SHTextStylerST80 to: {self dbPurple muchLighter}; + set: #rightParenthesis4 for: #SHTextStylerST80 to: {self dbPurple muchLighter}; + set: #leftParenthesis5 for: #SHTextStylerST80 to: {self dbOrange muchLighter}; + set: #rightParenthesis5 for: #SHTextStylerST80 to: {self dbOrange muchLighter}; + set: #leftParenthesis6 for: #SHTextStylerST80 to: {self dbOrange muchLighter}; + set: #rightParenthesis6 for: #SHTextStylerST80 to: {self dbOrange muchLighter}; + set: #leftParenthesis7 for: #SHTextStylerST80 to: {Color yellow}; + set: #rightParenthesis7 for: #SHTextStylerST80 to: {Color yellow}; + set: #blockStart for: #SHTextStylerST80 to: {self dbBedrock muchLighter}; + set: #blockEnd for: #SHTextStylerST80 to: {self dbBedrock muchLighter}; + set: #blockStart1 for: #SHTextStylerST80 to: {self dbBedrock twiceLighter}; + set: #blockEnd1 for: #SHTextStylerST80 to: {self dbBedrock twiceLighter}; + set: #blockStart2 for: #SHTextStylerST80 to: {self dbBedrock}; + set: #blockEnd2 for: #SHTextStylerST80 to: {self dbBedrock}; + set: #blockStart3 for: #SHTextStylerST80 to: {self dbPurple muchLighter}; + set: #blockEnd3 for: #SHTextStylerST80 to: {self dbPurple muchLighter}; + set: #blockStart4 for: #SHTextStylerST80 to: {self dbPurple muchLighter}; + set: #blockEnd4 for: #SHTextStylerST80 to: {self dbPurple muchLighter}; + set: #blockStart5 for: #SHTextStylerST80 to: {self dbOrange muchLighter}; + set: #blockEnd5 for: #SHTextStylerST80 to: {self dbOrange muchLighter}; + set: #blockStart6 for: #SHTextStylerST80 to: {self dbOrange muchLighter}; + set: #blockEnd6 for: #SHTextStylerST80 to: {self dbOrange muchLighter}; + set: #blockStart7 for: #SHTextStylerST80 to: {Color yellow}; + set: #blockEnd7 for: #SHTextStylerST80 to: {Color yellow}; - set: #leftParenthesis for: #SHTextStylerST80 to: {self dbBedrock}; - set: #rightParenthesis for: #SHTextStylerST80 to: {self dbBedrock}; - set: #leftParenthesis1 for: #SHTextStylerST80 to: {self dbGreen}; - set: #rightParenthesis1 for: #SHTextStylerST80 to: {self dbGreen}; - set: #leftParenthesis2 for: #SHTextStylerST80 to: {self dbPurple}; - set: #rightParenthesis2 for: #SHTextStylerST80 to: {self dbPurple}; - set: #leftParenthesis3 for: #SHTextStylerST80 to: {self dbRed}; - set: #rightParenthesis3 for: #SHTextStylerST80 to: {self dbRed}; - set: #leftParenthesis4 for: #SHTextStylerST80 to: {self dbGreen}; - set: #rightParenthesis4 for: #SHTextStylerST80 to: {self dbGreen}; - set: #leftParenthesis5 for: #SHTextStylerST80 to: {self dbOrange}; - set: #rightParenthesis5 for: #SHTextStylerST80 to: {self dbOrange}; - set: #leftParenthesis6 for: #SHTextStylerST80 to: {self dbPurple}; - set: #rightParenthesis6 for: #SHTextStylerST80 to: {self dbPurple}; - set: #leftParenthesis7 for: #SHTextStylerST80 to: {self dbBlue}; - set: #rightParenthesis7 for: #SHTextStylerST80 to: {self dbBlue}; - set: #blockStart for: #SHTextStylerST80 to: {self dbBedrock}; - set: #blockEnd for: #SHTextStylerST80 to: {self dbBedrock}; - set: #blockStart1 for: #SHTextStylerST80 to: {self dbGreen}; - set: #blockEnd1 for: #SHTextStylerST80 to: {self dbGreen}; - set: #blockStart2 for: #SHTextStylerST80 to: {self dbPurple}; - set: #blockEnd2 for: #SHTextStylerST80 to: {self dbPurple}; - set: #blockStart3 for: #SHTextStylerST80 to: {self dbRed}; - set: #blockEnd3 for: #SHTextStylerST80 to: {self dbRed}; - set: #blockStart4 for: #SHTextStylerST80 to: {self dbGreen}; - set: #blockEnd4 for: #SHTextStylerST80 to: {self dbGreen}; - set: #blockStart5 for: #SHTextStylerST80 to: {self dbOrange}; - set: #blockEnd5 for: #SHTextStylerST80 to: {self dbOrange}; - set: #blockStart6 for: #SHTextStylerST80 to: {self dbPurple}; - set: #blockEnd6 for: #SHTextStylerST80 to: {self dbPurple}; - set: #blockStart7 for: #SHTextStylerST80 to: {self dbBlue}; - set: #blockEnd7 for: #SHTextStylerST80 to: {self dbBlue}; set: #arrayStart for: #SHTextStylerST80 to: {self dbBedrock}; set: #arrayEnd for: #SHTextStylerST80 to: {self dbBedrock}; set: #arrayStart1 for: #SHTextStylerST80 to: {self dbForeground}; set: #arrayEnd1 for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayStart for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayStart1 for: #SHTextStylerST80 to: {self dbForeground}; set: #byteArrayEnd1 for: #SHTextStylerST80 to: {self dbForeground}; set: #leftBrace for: #SHTextStylerST80 to: {self dbForeground}; set: #rightBrace for: #SHTextStylerST80 to: {self dbForeground}; set: #cascadeSeparator for: #SHTextStylerST80 to: {self dbForeground}; set: #statementSeparator for: #SHTextStylerST80 to: {self dbForeground}; set: #externalCallType for: #SHTextStylerST80 to: {self dbForeground}; set: #externalCallTypePointerIndicator for: #SHTextStylerST80 to: {self dbForeground}; set: #primitiveOrExternalCallStart for: #SHTextStylerST80 to: {self dbForeground}; set: #primitiveOrExternalCallEnd for: #SHTextStylerST80 to: {self dbForeground}; set: #methodTempBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockTempBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #blockArgsBar for: #SHTextStylerST80 to: {self dbBedrock}; set: #primitive for: #SHTextStylerST80 to: {self dbGreen lighter. bold}; set: #pragmaKeyword for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #pragmaUnary for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #pragmaBinary for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #externalFunctionCallingConvention for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #module for: #SHTextStylerST80 to: {self dbGreen. bold}; set: #blockTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #blockPatternTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #instVar for: #SHTextStylerST80 to: {self dbYellow. normal }; set: #workspaceVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #undefinedIdentifier for: #SHTextStylerST80 to: {self dbInvalid}; set: #incompleteIdentifier for: #SHTextStylerST80 to: {self dbGray. underlined}; set: #tempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #patternTempVar for: #SHTextStylerST80 to: {self dbLocal. italic}; set: #poolConstant for: #SHTextStylerST80 to: {self dbConstant }; set: #classVar for: #SHTextStylerST80 to: {self dbReference}; set: #globalVar for: #SHTextStylerST80 to: {self dbClass. normal}. "And the text differ" aUserInterfaceTheme set: #insertTextAttributes for: #TextDiffBuilder to: { TextColor color: self dbRed }; set: #removeTextAttributes for: #TextDiffBuilder to: { TextEmphasis struckOut. TextColor color: self dbBlue }; set: #normalTextAttributes for: #TextDiffBuilder to: { TextEmphasis normal }.! Item was changed: ----- Method: CommunityTheme class>>dbRed (in category 'colors') ----- dbRed + ^Color r: 0.75 g: 0.25 b: 0.25! - ^Color r: 0.6 g: 0.3 b: 0.3! Item was added: + ----- Method: SmalltalkImage>>patchSystem (in category 'command line') ----- + patchSystem + (FileDirectory default fileExists: 'patch.st') ifTrue: + [Notification signal: 'Patching system...'. + FileStream + fileNamed: 'patch.st' + do: [ : stream | stream fileIn ] ]! Item was changed: ----- Method: SmalltalkImage>>run: (in category 'command line') ----- run: aBlock + [ [ self patchSystem. + (aBlock numArgs = 1 and: [ self arguments size > 1 ]) - [ [ (aBlock numArgs = 1 and: [ self arguments size > 1 ]) ifTrue: [ "Allow a large, variable number of arguments to be passed as an Array to aBlock." aBlock value: self arguments ] ifFalse: [ aBlock valueWithEnoughArguments: self arguments ] ] on: ProgressInitiationException do: + [ : pie | "Don't want to log this notification." - [ : pie | "Don't want to log these notifications." pie defaultAction ] ] on: Notification , Warning do: [ : noti | FileStream stdout nextPutAll: DateAndTime now asString ; space ; nextPutAll: noti description ; cr. noti resume ] on: SyntaxErrorNotification do: [ : err | FileStream stdout nextPutAll: err errorCode ; cr; flush. self isHeadless ifTrue: [ self snapshot: false andQuit: true ] ifFalse: [ err pass ] ] + on: Error - on: Error, MessageNotUnderstood, Halt do: [ : err | err printVerboseOn: FileStream stderr. FileStream stderr flush. self isHeadless ifTrue: [ self snapshot: false andQuit: true ] ifFalse: [ err pass ] ]! From Das.Linux at gmx.de Wed Aug 31 23:38:42 2016 From: Das.Linux at gmx.de (Tobias Pape) Date: Wed Aug 31 23:38:47 2016 Subject: [squeak-dev] The Trunk: System-cmm.913.mcz Message-ID: Hi Where's the problem with calling the image with 'patch.st' in the first place? It looks a little bit out of place for me here. Also, Why Kill MNU and Halt from the list? I'm a bit confused about this part of the pathc? Best regards -tobias On 31.08.2016, at 23:33, commits@source.squeak.org wrote: > Item was added: > + ----- Method: SmalltalkImage>>patchSystem (in category 'command line') ----- > + patchSystem > + (FileDirectory default fileExists: 'patch.st') ifTrue: > + [Notification signal: 'Patching system...'. > + FileStream > + fileNamed: 'patch.st' > + do: [ : stream | stream fileIn ] ]! > > Item was changed: > ----- Method: SmalltalkImage>>run: (in category 'command line') ----- > run: aBlock > + [ [ self patchSystem. > + (aBlock numArgs = 1 and: [ self arguments size > 1 ]) > - [ [ (aBlock numArgs = 1 and: [ self arguments size > 1 ]) > ifTrue: [ "Allow a large, variable number of arguments to be passed as an Array to aBlock." > aBlock value: self arguments ] > ifFalse: [ aBlock valueWithEnoughArguments: self arguments ] ] > on: ProgressInitiationException > do: > + [ : pie | "Don't want to log this notification." > - [ : pie | "Don't want to log these notifications." > pie defaultAction ] ] > on: Notification , Warning > do: > [ : noti | FileStream stdout > nextPutAll: DateAndTime now asString ; > space ; > nextPutAll: noti description ; > cr. > noti resume ] > on: SyntaxErrorNotification > do: > [ : err | FileStream stdout > nextPutAll: err errorCode ; > cr; flush. > self isHeadless > ifTrue: [ self snapshot: false andQuit: true ] > ifFalse: [ err pass ] ] > + on: Error > - on: Error, MessageNotUnderstood, Halt > do: > [ : err | err printVerboseOn: FileStream stderr. > FileStream stderr flush. > self isHeadless > ifTrue: [ self snapshot: false andQuit: true ] > ifFalse: [ err pass ] ]!