Taskbar again

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
16 messages Options
Reply | Threaded
Open this post in threaded view
|

Taskbar again

Jerome Chan
Can anyone point out how to detect clicks on an icon setup in the
taskbar? I know there was a package (Taskbar.zip I think) mentioned
earlier but the site is no longer responding.


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Ian Bartholomew-19
Jerome,

> Can anyone point out how to detect clicks on an icon setup in the
> taskbar? I know there was a package (Taskbar.zip I think) mentioned
> earlier but the site is no longer responding.

Udo Schneider implemented and posted a package for this which was reposted
by Don Rylander a few months ago.  In that spirit I've reposted a D5.1.4
version below.

Whether or not this is the latest version (Udo?) is not known.

Cut between the lines and save to "US Notify Shell.pac"

==~===~===~===
| package |

package := Package name: 'us notify shell'.

package paxVersion: 0;

basicComment: 'US NotifyShell

Udo Schneider <[hidden email]> 2002

This package contains additions to the standard Dolphin Smalltalk Shell

class which allows you to use the traybar.

Execute the following code to see an example implementation of the

NotifyShell which responds to various events.

NotifyShellExample show'.

package basicPackageVersion: '0.005'.



package classNames

add: #NotifyShell;

add: #NotifyShellExample;

add: #ShellNotifyView;

yourself.

package binaryGlobalNames: (Set new

yourself).

package globalAliases: (Set new

yourself).

package allResourceNames: (Set new

add: #NotifyShell -> 'Default view';

yourself).

package setPrerequisites: (IdentitySet new

add: 'Object Arts\Dolphin\IDE\Base\Development System';

add: 'Object Arts\Dolphin\Base\Dolphin';

add: 'Object Arts\Dolphin\MVP\Base\Dolphin MVP Base';

yourself).

package!

"Class Definitions"!

Shell subclass: #NotifyShell

instanceVariableNames: ''

classVariableNames: ''

poolDictionaries: ''

classInstanceVariableNames: ''!

NotifyShell subclass: #NotifyShellExample

instanceVariableNames: ''

classVariableNames: ''

poolDictionaries: ''

classInstanceVariableNames: ''!

ShellView subclass: #ShellNotifyView

instanceVariableNames: 'notifyStruct notifyMessage notifyIcon
notifyTipMessage'

classVariableNames: 'NotifyMessageMap'

poolDictionaries: ''

classInstanceVariableNames: ''!

"Global Aliases"!



"Loose Methods"!

"End of package definition"!

"Source Globals"!

"Classes"!

NotifyShell guid: (GUID fromString:
'{76A412BA-947A-40AA-83BA-9BD384979C29}')!

NotifyShell comment: ''!

!NotifyShell categoriesForClass!Unclassified! !

NotifyShellExample guid: (GUID fromString:
'{8E0528A6-54F0-4368-8D83-83CC78AF605D}')!

NotifyShellExample comment: ''!

!NotifyShellExample categoriesForClass!Unclassified! !

!NotifyShellExample methodsFor!

createSchematicWiring

"Create the trigger wiring for the receiver"

super createSchematicWiring.

self when: #onTraybarLeftButtonPressed send: #traybarEvent: to: self with:

'Left Button Pressed'.

self when: #onTraybarRightButtonPressed send: #traybarEvent: to: self with:

'Right Button Pressed'.

self when: #onTraybarLeftButtonDoubleClicked send: #traybarEvent: to: self

with: 'Left Button Double Clicked'.

self when: #onTraybarRightButtonDoucleClicked send: #traybarEvent: to: self

with: 'Right Button Double Clicked'.!

traybarEvent: aString

MessageBox notify: aString! !

!NotifyShellExample categoriesFor: #createSchematicWiring!public! !

!NotifyShellExample categoriesFor: #traybarEvent:!public! !

ShellNotifyView guid: (GUID fromString:
'{6C3394D3-CC74-471F-86D8-6F5A7D25E621}')!

ShellNotifyView comment: ''!

!ShellNotifyView categoriesForClass!Unclassified! !

!ShellNotifyView methodsFor!

addNotifyIcon

self initializeNotifyStruct.

notifyStruct hWnd: self asParameter.

^ShellLibrary default shell_NotifyIcon: NIM_ADD pnid: notifyStruct

!

basicInitializeNotifyStruct

notifyStruct

uID: 1;

icon: notifyIcon;

message: notifyMessage;

tipText: notifyTipMessage displayString.

!

deleteNotifyIcon

^ShellLibrary default shell_NotifyIcon: NIM_DELETE pnid: notifyStruct.!

dispatchRegistered: registeredId wParam: wParam lParam: lParam

^registeredId = notifyMessage

ifTrue: [

(NotifyMessageMap includesKey: lParam) ifTrue: [

self perform: (NotifyMessageMap at: lParam)

]

]!

initializeNotifyStruct

notifyStruct := NOTIFYICONDATA new.

notifyMessage := self class registerMessage: 'Dolphin Shell Notification'.

self basicInitializeNotifyStruct.!

modifyNotifyIcon

self basicInitializeNotifyStruct.

^ShellLibrary default shell_NotifyIcon: NIM_MODIFY pnid: notifyStruct.!

notifyIcon

"Private - Answer the value of the receiver's ''notifyIcon'' instance

variable."

notifyIcon isNil ifTrue: [notifyIcon := self icon].

^notifyIcon!

notifyIcon: anObject

"Private - Set the value of the receiver's ''notifyIcon'' instance variable

to the argument, anObject."

notifyIcon := anObject!

notifyMessage

"Private - Answer the value of the receiver's ''notifyMessage'' instance

variable."

^notifyMessage!

notifyMessage: anObject

"Private - Set the value of the receiver's ''notifyMessage'' instance

variable to the argument, anObject."

notifyMessage := anObject!

notifyStruct

"Private - Answer the value of the receiver's ''notifyStruct'' instance

variable."

^notifyStruct!

notifyStruct: anObject

"Private - Set the value of the receiver's ''notifyStruct'' instance

variable to the argument, anObject."

notifyStruct := anObject!

notifyTipMessage

"Private - Answer the value of the receiver's ''notifyTipMessage'' instance

variable."

notifyTipMessage isNil ifTrue: [notifyTipMessage := 'Notify Message'].

^notifyTipMessage!

notifyTipMessage: anObject

"Private - Set the value of the receiver's ''notifyTipMessage'' instance

variable to the argument, anObject."

notifyTipMessage := anObject!

onCreated: anEvent

self addNotifyIcon.

^super onCreated: anEvent

!

onDestroyed

self deleteNotifyIcon.

^super onDestroyed

!

onTraybarLeftButtonDoubleClicked

self presenter trigger: #onTraybarLeftButtonDoubleClicked!

onTraybarLeftButtonPressed

self presenter trigger: #onTraybarLeftButtonPressed!

onTraybarRightButtonDoubleClicked

self presenter trigger: #onTraybarRightButtonDoubleClicked!

onTraybarRightButtonPressed

self presenter trigger: #onTraybarRightButtonPressed!

onViewMinimized: aSizeEvent

"Private - ShellNotifyView handler for window minimize. Hide the window,

then

hand off to super."

self hide.

^super onViewMinimized: aSizeEvent! !

!ShellNotifyView categoriesFor: #addNotifyIcon!private! !

!ShellNotifyView categoriesFor:
#basicInitializeNotifyStruct!initializing!private! !

!ShellNotifyView categoriesFor: #deleteNotifyIcon!private! !

!ShellNotifyView categoriesFor: #dispatchRegistered:wParam:lParam:!private!
!

!ShellNotifyView categoriesFor:
#initializeNotifyStruct!initializing!private! !

!ShellNotifyView categoriesFor: #modifyNotifyIcon!private! !

!ShellNotifyView categoriesFor: #notifyIcon!accessing!private! !

!ShellNotifyView categoriesFor: #notifyIcon:!accessing!private! !

!ShellNotifyView categoriesFor: #notifyMessage!accessing!private! !

!ShellNotifyView categoriesFor: #notifyMessage:!accessing!private! !

!ShellNotifyView categoriesFor: #notifyStruct!accessing!private! !

!ShellNotifyView categoriesFor: #notifyStruct:!accessing!private! !

!ShellNotifyView categoriesFor: #notifyTipMessage!accessing!private! !

!ShellNotifyView categoriesFor: #notifyTipMessage:!accessing!private! !

!ShellNotifyView categoriesFor: #onCreated:!event handling!private! !

!ShellNotifyView categoriesFor: #onDestroyed!event handling!private! !

!ShellNotifyView categoriesFor: #onTraybarLeftButtonDoubleClicked!event

handling!private! !

!ShellNotifyView categoriesFor: #onTraybarLeftButtonPressed!event

handling!private! !

!ShellNotifyView categoriesFor: #onTraybarRightButtonDoubleClicked!event

handling!private! !

!ShellNotifyView categoriesFor: #onTraybarRightButtonPressed!event

handling!private! !

!ShellNotifyView categoriesFor: #onViewMinimized:!event handling!private! !

!ShellNotifyView class methodsFor!

initialize

NotifyMessageMap := Dictionary new.

NotifyMessageMap at: WM_LBUTTONDOWN put: #onTraybarLeftButtonPressed;

at: WM_RBUTTONDOWN put: #onTraybarRightButtonPressed;

at: WM_LBUTTONDBLCLK put: #onTraybarLeftButtonDoubleClicked;

at: WM_RBUTTONDBLCLK put: #onTraybarRightButtonDoubleClicked.!

publishedAspectsOfInstances

^super publishedAspectsOfInstances

add: (Aspect icon: #notifyIcon);

add: (Aspect string: #notifyTipMessage);

yourself

!

publishedEventsOfInstances

"Answer a Set of Symbols that describe the published events triggered

by instances of the receiver."

^super publishedEventsOfInstances

add: #onTraybarLeftButtonPressed;

add: #onTraybarRightButtonPressed;

add: #onTraybarLeftButtonDoubleClicked;

add: #onTraybarRightButtonDoubleClicked;

yourself.! !

!ShellNotifyView class categoriesFor: #initialize!public! !

!ShellNotifyView class categoriesFor: #publishedAspectsOfInstances!public! !

!ShellNotifyView class categoriesFor: #publishedEventsOfInstances!public! !

"Binary Globals"!

"Resources"!

(ResourceIdentifier class: NotifyShell name: 'Default view') assign: (Object
fromBinaryStoreBytes:

(ByteArray fromBase64String:
'IVNUQiAxIEYCDAABAAAAVmlld1Jlc291cmNlAAAAAA4BJABTVEJSZXNvdXJjZVNUQkJ5dGVBcnJ
h

eUFjY2Vzc29yUHJveHkAAAAAcgAAACMEAAAhU1RCIDAgTggMAAoAAABTVEJWaWV3UHJveHkAAAAA

TgINAAEAAABTVEJDbGFzc1Byb3h5AAAAADYABgBTdHJpbmcSAAAAVVMgU2hlbGxOb3RpZnlWaWV3

kgAAAA8AAABTaGVsbE5vdGlmeVZpZXcmAAUAQXJyYXkfAAAAAAAAAAAAAADCAAAAAgAAAAEAngEB

AAIAYAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4CGgBTVEJJZGVudGl0

eURpY3Rpb25hcnlQcm94eQAAAAB6AAAAAAAAAJIAAAAHAAAARG9scGhpbpIAAAASAAAASWRlbnRp

dHlEaWN0aW9uYXJ5wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAQAAAAAAAAAAAAAABgEOAE5PVElGWUlDT05EQVRBAAAAADYACQBCeXRlQXJyYXlYAAAAWAAA

AMQEEwABAAAABwAAAHnBAADNAxUATm90aWZ5IE1lc3NhZ2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPOCAQBGBQQAAwAAAEljb24AAAAAAAAAABAAAAAO

AhEAU1RCU2luZ2xldG9uUHJveHkAAAAAegAAAAAAAAAgAQAAkgAAABgAAABJbWFnZVJlbGF0aXZl

RmlsZUxvY2F0b3IOAQ4AU1RCU3ltYm9sUHJveHkAAAAAkgAAAAcAAABjdXJyZW50kgAAAA0AAABT

aGVsbFZpZXcuaWNvDgIfAFNUQkV4dGVybmFsUmVzb3VyY2VMaWJyYXJ5UHJveHkAAAAAkgAAABAA

AABkb2xwaGluZHIwMDQuZGxsAAAAAJIAAAAOAAAATm90aWZ5IE1lc3NhZ2UGAQ8ATWVzc2FnZVNl

cXVlbmNlAAAAAA4CEgBTVEJDb2xsZWN0aW9uUHJveHkAAAAAegAAAAAAAAAgAQAAkgAAABEAAABP

cmRlcmVkQ29sbGVjdGlvbsIAAAACAAAABgMLAE1lc3NhZ2VTZW5kAAAAAPoBAAAAAAAAkgAAABAA

AABjcmVhdGVBdDpleHRlbnQ6wgAAAAIAAAAGAgUAUG9pbnQAAAAAAQAAAAEAAAAyAwAAAAAAAFUF

AAABBAAAYAAAAOICAAAAAAAA+gEAAAAAAACSAAAACAAAAG1lbnVCYXI6wgAAAAEAAAAAAAAAYAAA

AAYBDwBXSU5ET1dQTEFDRU1FTlQAAAAAcgEAACwAAAAsAAAAAAAAAAAAAAD/////////////////

////AAAAAAAAAACqAgAAAAIAAJoCAAAAAAAAsAIAAEABAAAyAwAAAAAAAMEAAADBAAAAAAAAABUA

AABGBQQAAwAAAEljb24AAAAAAAAAABAAAAAOAhEAU1RCU2luZ2xldG9uUHJveHkAAAAAmgAAAAAA

AABSAAAABwAAAERvbHBoaW5SAAAAGAAAAEltYWdlUmVsYXRpdmVGaWxlTG9jYXRvcroAAAAAAAAA

UgAAAAcAAABjdXJyZW50UgAAAAkAAABTaGVsbC5pY28OAh8AU1RCRXh0ZXJuYWxSZXNvdXJjZUxp

YnJhcnlQcm94eQAAAABSAAAAEAAAAGRvbHBoaW5kcjAwNS5kbGwAAAAA'))!

==~===~===~===

--
Ian

Use the Reply-To address to contact me.
Mail sent to the From address is ignored.


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Jerome Chan
In reply to this post by Jerome Chan
Follow up to my original question. I made a mistake. I had assumed
that setting the value of a NOTIFYICONDATA object would automatically
set the corresponding uFlag. I was using the win32 access methods and
not the correct accessor.

NOTIFYICONDATA uCallbackMessage: MY_CUSTOM_MESSAGE

should have used

NOTIFYICONDATA message: MY_CUSTOM_MESSAGE


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Udo Schneider
In reply to this post by Ian Bartholomew-19
Ian Bartholomew wrote:

 > Udo Schneider implemented and posted a package for this which was
 > reposted by Don Rylander a few months ago.  In that spirit I've
 > reposted a D5.1.4 version below.

Ian, thanks for posting this. I nearls forgot this package because I am
not using it anymore......

> Whether or not this is the latest version (Udo?) is not known.

The latest version I am aware off is the one written by Don Rylander. I
included his changes into my package. So your package should be the most
actual one.

However there is a different approach to this which was pointed out by
Marc Nijdam.

The whole background is in the following thread.

http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&threadm=a8fddo%24rvdi3%241%40ID-57705.news.dfncis.de&rnum=1&prev=/groups%3Fhl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26q%3DUS%2BNotifyShell%2B%2Bgroup%253Acomp.lang.smalltalk.dolphin%26btnG%3DSearch%26meta%3Dgroup%253Dcomp.lang.smalltalk.dolphin

CU,

Udo


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

kuo-2
In reply to this post by Ian Bartholomew-19
Hi,
    When installing the "US Notify Shell.pac", I found that
Base64Codec class is missing in  my image, which is referenced in
ByteArray class>>fromBase64String: method.
   Where could I find it?

Thanks.
Francis Kuo

On Wed, 7 Apr 2004 12:51:33 +0100, "Ian Bartholomew"
<[hidden email]> wrote:

>Udo Schneider implemented and posted a package for this which was reposted
>by Don Rylander a few months ago.  In that spirit I've reposted a D5.1.4
>version below.
>
>Whether or not this is the latest version (Udo?) is not known.
>
>Cut between the lines and save to "US Notify Shell.pac"
>
>==~===~===~===
>| package |
>
>package := Package name: 'us notify shell'.
>
>package paxVersion: 0;
>
>basicComment: 'US NotifyShell
>
>Udo Schneider <[hidden email]> 2002
>
>This package contains additions to the standard Dolphin Smalltalk Shell
>
>class which allows you to use the traybar.
>
>Execute the following code to see an example implementation of the
>
>NotifyShell which responds to various events.
>
>NotifyShellExample show'.
>
>package basicPackageVersion: '0.005'.
>
>
>
>package classNames
>
>add: #NotifyShell;
>
>add: #NotifyShellExample;
>
>add: #ShellNotifyView;
>
>yourself.
>
>package binaryGlobalNames: (Set new
>
>yourself).
>
>package globalAliases: (Set new
>
>yourself).
>
>package allResourceNames: (Set new
>
>add: #NotifyShell -> 'Default view';
>
>yourself).
>
>package setPrerequisites: (IdentitySet new
>
>add: 'Object Arts\Dolphin\IDE\Base\Development System';
>
>add: 'Object Arts\Dolphin\Base\Dolphin';
>
>add: 'Object Arts\Dolphin\MVP\Base\Dolphin MVP Base';
>
>yourself).
>
>package!
>
>"Class Definitions"!
>
>Shell subclass: #NotifyShell
>
>instanceVariableNames: ''
>
>classVariableNames: ''
>
>poolDictionaries: ''
>
>classInstanceVariableNames: ''!
>
>NotifyShell subclass: #NotifyShellExample
>
>instanceVariableNames: ''
>
>classVariableNames: ''
>
>poolDictionaries: ''
>
>classInstanceVariableNames: ''!
>
>ShellView subclass: #ShellNotifyView
>
>instanceVariableNames: 'notifyStruct notifyMessage notifyIcon
>notifyTipMessage'
>
>classVariableNames: 'NotifyMessageMap'
>
>poolDictionaries: ''
>
>classInstanceVariableNames: ''!
>
>"Global Aliases"!
>
>
>
>"Loose Methods"!
>
>"End of package definition"!
>
>"Source Globals"!
>
>"Classes"!
>
>NotifyShell guid: (GUID fromString:
>'{76A412BA-947A-40AA-83BA-9BD384979C29}')!
>
>NotifyShell comment: ''!
>
>!NotifyShell categoriesForClass!Unclassified! !
>
>NotifyShellExample guid: (GUID fromString:
>'{8E0528A6-54F0-4368-8D83-83CC78AF605D}')!
>
>NotifyShellExample comment: ''!
>
>!NotifyShellExample categoriesForClass!Unclassified! !
>
>!NotifyShellExample methodsFor!
>
>createSchematicWiring
>
>"Create the trigger wiring for the receiver"
>
>super createSchematicWiring.
>
>self when: #onTraybarLeftButtonPressed send: #traybarEvent: to: self with:
>
>'Left Button Pressed'.
>
>self when: #onTraybarRightButtonPressed send: #traybarEvent: to: self with:
>
>'Right Button Pressed'.
>
>self when: #onTraybarLeftButtonDoubleClicked send: #traybarEvent: to: self
>
>with: 'Left Button Double Clicked'.
>
>self when: #onTraybarRightButtonDoucleClicked send: #traybarEvent: to: self
>
>with: 'Right Button Double Clicked'.!
>
>traybarEvent: aString
>
>MessageBox notify: aString! !
>
>!NotifyShellExample categoriesFor: #createSchematicWiring!public! !
>
>!NotifyShellExample categoriesFor: #traybarEvent:!public! !
>
>ShellNotifyView guid: (GUID fromString:
>'{6C3394D3-CC74-471F-86D8-6F5A7D25E621}')!
>
>ShellNotifyView comment: ''!
>
>!ShellNotifyView categoriesForClass!Unclassified! !
>
>!ShellNotifyView methodsFor!
>
>addNotifyIcon
>
>self initializeNotifyStruct.
>
>notifyStruct hWnd: self asParameter.
>
>^ShellLibrary default shell_NotifyIcon: NIM_ADD pnid: notifyStruct
>
>!
>
>basicInitializeNotifyStruct
>
>notifyStruct
>
>uID: 1;
>
>icon: notifyIcon;
>
>message: notifyMessage;
>
>tipText: notifyTipMessage displayString.
>
>!
>
>deleteNotifyIcon
>
>^ShellLibrary default shell_NotifyIcon: NIM_DELETE pnid: notifyStruct.!
>
>dispatchRegistered: registeredId wParam: wParam lParam: lParam
>
>^registeredId = notifyMessage
>
>ifTrue: [
>
>(NotifyMessageMap includesKey: lParam) ifTrue: [
>
>self perform: (NotifyMessageMap at: lParam)
>
>]
>
>]!
>
>initializeNotifyStruct
>
>notifyStruct := NOTIFYICONDATA new.
>
>notifyMessage := self class registerMessage: 'Dolphin Shell Notification'.
>
>self basicInitializeNotifyStruct.!
>
>modifyNotifyIcon
>
>self basicInitializeNotifyStruct.
>
>^ShellLibrary default shell_NotifyIcon: NIM_MODIFY pnid: notifyStruct.!
>
>notifyIcon
>
>"Private - Answer the value of the receiver's ''notifyIcon'' instance
>
>variable."
>
>notifyIcon isNil ifTrue: [notifyIcon := self icon].
>
>^notifyIcon!
>
>notifyIcon: anObject
>
>"Private - Set the value of the receiver's ''notifyIcon'' instance variable
>
>to the argument, anObject."
>
>notifyIcon := anObject!
>
>notifyMessage
>
>"Private - Answer the value of the receiver's ''notifyMessage'' instance
>
>variable."
>
>^notifyMessage!
>
>notifyMessage: anObject
>
>"Private - Set the value of the receiver's ''notifyMessage'' instance
>
>variable to the argument, anObject."
>
>notifyMessage := anObject!
>
>notifyStruct
>
>"Private - Answer the value of the receiver's ''notifyStruct'' instance
>
>variable."
>
>^notifyStruct!
>
>notifyStruct: anObject
>
>"Private - Set the value of the receiver's ''notifyStruct'' instance
>
>variable to the argument, anObject."
>
>notifyStruct := anObject!
>
>notifyTipMessage
>
>"Private - Answer the value of the receiver's ''notifyTipMessage'' instance
>
>variable."
>
>notifyTipMessage isNil ifTrue: [notifyTipMessage := 'Notify Message'].
>
>^notifyTipMessage!
>
>notifyTipMessage: anObject
>
>"Private - Set the value of the receiver's ''notifyTipMessage'' instance
>
>variable to the argument, anObject."
>
>notifyTipMessage := anObject!
>
>onCreated: anEvent
>
>self addNotifyIcon.
>
>^super onCreated: anEvent
>
>!
>
>onDestroyed
>
>self deleteNotifyIcon.
>
>^super onDestroyed
>
>!
>
>onTraybarLeftButtonDoubleClicked
>
>self presenter trigger: #onTraybarLeftButtonDoubleClicked!
>
>onTraybarLeftButtonPressed
>
>self presenter trigger: #onTraybarLeftButtonPressed!
>
>onTraybarRightButtonDoubleClicked
>
>self presenter trigger: #onTraybarRightButtonDoubleClicked!
>
>onTraybarRightButtonPressed
>
>self presenter trigger: #onTraybarRightButtonPressed!
>
>onViewMinimized: aSizeEvent
>
>"Private - ShellNotifyView handler for window minimize. Hide the window,
>
>then
>
>hand off to super."
>
>self hide.
>
>^super onViewMinimized: aSizeEvent! !
>
>!ShellNotifyView categoriesFor: #addNotifyIcon!private! !
>
>!ShellNotifyView categoriesFor:
>#basicInitializeNotifyStruct!initializing!private! !
>
>!ShellNotifyView categoriesFor: #deleteNotifyIcon!private! !
>
>!ShellNotifyView categoriesFor: #dispatchRegistered:wParam:lParam:!private!
>!
>
>!ShellNotifyView categoriesFor:
>#initializeNotifyStruct!initializing!private! !
>
>!ShellNotifyView categoriesFor: #modifyNotifyIcon!private! !
>
>!ShellNotifyView categoriesFor: #notifyIcon!accessing!private! !
>
>!ShellNotifyView categoriesFor: #notifyIcon:!accessing!private! !
>
>!ShellNotifyView categoriesFor: #notifyMessage!accessing!private! !
>
>!ShellNotifyView categoriesFor: #notifyMessage:!accessing!private! !
>
>!ShellNotifyView categoriesFor: #notifyStruct!accessing!private! !
>
>!ShellNotifyView categoriesFor: #notifyStruct:!accessing!private! !
>
>!ShellNotifyView categoriesFor: #notifyTipMessage!accessing!private! !
>
>!ShellNotifyView categoriesFor: #notifyTipMessage:!accessing!private! !
>
>!ShellNotifyView categoriesFor: #onCreated:!event handling!private! !
>
>!ShellNotifyView categoriesFor: #onDestroyed!event handling!private! !
>
>!ShellNotifyView categoriesFor: #onTraybarLeftButtonDoubleClicked!event
>
>handling!private! !
>
>!ShellNotifyView categoriesFor: #onTraybarLeftButtonPressed!event
>
>handling!private! !
>
>!ShellNotifyView categoriesFor: #onTraybarRightButtonDoubleClicked!event
>
>handling!private! !
>
>!ShellNotifyView categoriesFor: #onTraybarRightButtonPressed!event
>
>handling!private! !
>
>!ShellNotifyView categoriesFor: #onViewMinimized:!event handling!private! !
>
>!ShellNotifyView class methodsFor!
>
>initialize
>
>NotifyMessageMap := Dictionary new.
>
>NotifyMessageMap at: WM_LBUTTONDOWN put: #onTraybarLeftButtonPressed;
>
>at: WM_RBUTTONDOWN put: #onTraybarRightButtonPressed;
>
>at: WM_LBUTTONDBLCLK put: #onTraybarLeftButtonDoubleClicked;
>
>at: WM_RBUTTONDBLCLK put: #onTraybarRightButtonDoubleClicked.!
>
>publishedAspectsOfInstances
>
>^super publishedAspectsOfInstances
>
>add: (Aspect icon: #notifyIcon);
>
>add: (Aspect string: #notifyTipMessage);
>
>yourself
>
>!
>
>publishedEventsOfInstances
>
>"Answer a Set of Symbols that describe the published events triggered
>
>by instances of the receiver."
>
>^super publishedEventsOfInstances
>
>add: #onTraybarLeftButtonPressed;
>
>add: #onTraybarRightButtonPressed;
>
>add: #onTraybarLeftButtonDoubleClicked;
>
>add: #onTraybarRightButtonDoubleClicked;
>
>yourself.! !
>
>!ShellNotifyView class categoriesFor: #initialize!public! !
>
>!ShellNotifyView class categoriesFor: #publishedAspectsOfInstances!public! !
>
>!ShellNotifyView class categoriesFor: #publishedEventsOfInstances!public! !
>
>"Binary Globals"!
>
>"Resources"!
>
>(ResourceIdentifier class: NotifyShell name: 'Default view') assign: (Object
>fromBinaryStoreBytes:
>
>(ByteArray fromBase64String:
>'IVNUQiAxIEYCDAABAAAAVmlld1Jlc291cmNlAAAAAA4BJABTVEJSZXNvdXJjZVNUQkJ5dGVBcnJ
>h
>
>eUFjY2Vzc29yUHJveHkAAAAAcgAAACMEAAAhU1RCIDAgTggMAAoAAABTVEJWaWV3UHJveHkAAAAA
>
>TgINAAEAAABTVEJDbGFzc1Byb3h5AAAAADYABgBTdHJpbmcSAAAAVVMgU2hlbGxOb3RpZnlWaWV3
>
>kgAAAA8AAABTaGVsbE5vdGlmeVZpZXcmAAUAQXJyYXkfAAAAAAAAAAAAAADCAAAAAgAAAAEAngEB
>
>AAIAYAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4CGgBTVEJJZGVudGl0
>
>eURpY3Rpb25hcnlQcm94eQAAAAB6AAAAAAAAAJIAAAAHAAAARG9scGhpbpIAAAASAAAASWRlbnRp
>
>dHlEaWN0aW9uYXJ5wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>
>AAAAAQAAAAAAAAAAAAAABgEOAE5PVElGWUlDT05EQVRBAAAAADYACQBCeXRlQXJyYXlYAAAAWAAA
>
>AMQEEwABAAAABwAAAHnBAADNAxUATm90aWZ5IE1lc3NhZ2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>
>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPOCAQBGBQQAAwAAAEljb24AAAAAAAAAABAAAAAO
>
>AhEAU1RCU2luZ2xldG9uUHJveHkAAAAAegAAAAAAAAAgAQAAkgAAABgAAABJbWFnZVJlbGF0aXZl
>
>RmlsZUxvY2F0b3IOAQ4AU1RCU3ltYm9sUHJveHkAAAAAkgAAAAcAAABjdXJyZW50kgAAAA0AAABT
>
>aGVsbFZpZXcuaWNvDgIfAFNUQkV4dGVybmFsUmVzb3VyY2VMaWJyYXJ5UHJveHkAAAAAkgAAABAA
>
>AABkb2xwaGluZHIwMDQuZGxsAAAAAJIAAAAOAAAATm90aWZ5IE1lc3NhZ2UGAQ8ATWVzc2FnZVNl
>
>cXVlbmNlAAAAAA4CEgBTVEJDb2xsZWN0aW9uUHJveHkAAAAAegAAAAAAAAAgAQAAkgAAABEAAABP
>
>cmRlcmVkQ29sbGVjdGlvbsIAAAACAAAABgMLAE1lc3NhZ2VTZW5kAAAAAPoBAAAAAAAAkgAAABAA
>
>AABjcmVhdGVBdDpleHRlbnQ6wgAAAAIAAAAGAgUAUG9pbnQAAAAAAQAAAAEAAAAyAwAAAAAAAFUF
>
>AAABBAAAYAAAAOICAAAAAAAA+gEAAAAAAACSAAAACAAAAG1lbnVCYXI6wgAAAAEAAAAAAAAAYAAA
>
>AAYBDwBXSU5ET1dQTEFDRU1FTlQAAAAAcgEAACwAAAAsAAAAAAAAAAAAAAD/////////////////
>
>////AAAAAAAAAACqAgAAAAIAAJoCAAAAAAAAsAIAAEABAAAyAwAAAAAAAMEAAADBAAAAAAAAABUA
>
>AABGBQQAAwAAAEljb24AAAAAAAAAABAAAAAOAhEAU1RCU2luZ2xldG9uUHJveHkAAAAAmgAAAAAA
>
>AABSAAAABwAAAERvbHBoaW5SAAAAGAAAAEltYWdlUmVsYXRpdmVGaWxlTG9jYXRvcroAAAAAAAAA
>
>UgAAAAcAAABjdXJyZW50UgAAAAkAAABTaGVsbC5pY28OAh8AU1RCRXh0ZXJuYWxSZXNvdXJjZUxp
>
>YnJhcnlQcm94eQAAAABSAAAAEAAAAGRvbHBoaW5kcjAwNS5kbGwAAAAA'))!
>
>==~===~===~===


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Ian Bartholomew-19
kuo wrote:

>     When installing the "US Notify Shell.pac", I found that
> Base64Codec class is missing in  my image, which is referenced in
> ByteArray class>>fromBase64String: method.
>    Where could I find it?

It's part of the recent update to version 5.1.4 - use the Live Update to
install it into your image.

If you're not using Dolphin 5 then let me know and I'll mail you a copy of
the older version that doesn't need Base64Codec.

--
Ian

Use the Reply-To address to contact me.
Mail sent to the From address is ignored.


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

kuo-2
On Wed, 7 Apr 2004 17:41:49 +0100, "Ian Bartholomew"
<[hidden email]> wrote:
>It's part of the recent update to version 5.1.4 - use the Live Update to
>install it into your image.
>
>If you're not using Dolphin 5 then let me know and I'll mail you a copy of
>the older version that doesn't need Base64Codec.
Thanks to clarify the issue.
   So far, my image still remained at PL3 due to STBView conversion
problems that I've posted recently.
  <Aside>
     I've noticed that once an individual st file of PL4 is available
from OA web site but could not remember where?
    Currently, I had no ideas of the format of bytecodes of View,
Resources, or STBFiles ( if anyone skilled in these fields ever
metioned it before that I missed?), I think that some little learning
materials would help those interested like me enjoy more fun in the
exploration of Smalltalk world.
  </Aside>
 
Best Regards
Tgkuo


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Ian Bartholomew-19
Tgkuo,

>    So far, my image still remained at PL3 due to STBView conversion
> problems that I've posted recently.

Andy posted a possible fix for that a few days ago.  See the thread "Fix for
STBViewProxy LiveUpdate Problem" posted at 10:40 (GMT+1) on the 5th.

>   <Aside>
>      I've noticed that once an individual st file of PL4 is available
> from OA web site but could not remember where?

Run "Live Update", select the patch you want and then select "Open" from the
context menu.  This loads the complete patch into a workspace that can be
saved as normal.  You can then just file it in to install the patch.

>     Currently, I had no ideas of the format of bytecodes of View,
> Resources, or STBFiles ( if anyone skilled in these fields ever
> metioned it before that I missed?), I think that some little learning
> materials would help those interested like me enjoy more fun in the
> exploration of Smalltalk world.

This change of encoding (from a Hex format to a Base64 one) was just because
of the difficulties that the older format could have when displaying as a
text file (it's one line with no line delimiters) and the problems that can
then occur if line delimiters are introduced.  This is just a method of
"encoding" a ByteArray into a text format though.  The "contents" of the
resources does change between Dolphin versions but, unless you really want
to get dirty, is not something for anyone other than OA to get involved
with.

FWIW, there is a class, STBDebugger, that can be used to investigate the
actual contents of STBFiles.

--
Ian

Use the Reply-To address to contact me.
Mail sent to the From address is ignored.


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Chris Uppal-3
In reply to this post by kuo-2
kuo wrote:

>    So far, my image still remained at PL3 due to STBView conversion
> problems that I've posted recently.

I'm still at v 5.1.2, so drop me a line if you'd like me to send a copy in the
earlier format.

(BTW, for anyone who's interested, the reason I'm not tracking the patches
closely is that I still haven't found a way to do it that works well with
STS -- how do other people manage this ?)

    -- chris


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Jerome Chan
In reply to this post by Ian Bartholomew-19
"Ian Bartholomew" <[hidden email]> wrote in message news:<w%Rcc.30730$Y%[hidden email]>...

> Udo Schneider implemented and posted a package for this which was reposted
> by Don Rylander a few months ago.  In that spirit I've reposted a D5.1.4
> version below.
>
> Whether or not this is the latest version (Udo?) is not known.
>
> Cut between the lines and save to "US Notify Shell.pac"
>
>

I've tried deploying a view and Lagoon says the method
publishedAspectsOfInstances depends on Aspect which is part of the
development system and won't deploy.


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Udo Schneider
Jerome Chan wrote:

Jerome,


> I've tried deploying a view and Lagoon says the method
> publishedAspectsOfInstances depends on Aspect which is part of the
> development system and won't deploy.


If you add the method to the 'must strip' category everything should be
fine.

CU,

Udo


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Dmitry Zamotkin-5
In reply to this post by Jerome Chan
There is another implementation, with no shell at all.
------
| package |
package := Package name: 'TaskbarIcon'.
package paxVersion: 0;
 basicComment: ''.

package basicScriptAt: #postinstall put: '"define new fields on
NOTIFYICONDATA"
NOTIFYICONDATA defineFields.'.
package basicScriptAt: #preinstall put: '"Add new constants to win32 pool
for ShellLibrary version >= 5"
Win32Constants
 "messages"
 add: ''NIM_SETVERSION''->4;
 add: ''NIM_SETFOCUS''->3;
 "balloon tooltip"
 add: ''NIF_INFO''->16;
 add: ''NIIF_ERROR''->3;
 add: ''NIIF_INFO''->1;
 add: ''NIIF_NONE''->0;
 add: ''NIIF_WARNING''->2;
 add: ''NIIF_ICON_MASK''->15;
 add: ''NIIF_NOSOUND''->16;
 "uVersion"
 add: ''NOTIFYICON_VERSION''->3;
 "dwState and dwStateMask"
 add: ''NIF_STATE''->8;
 add: ''NIS_HIDDEN''->1;
 add: ''NIS_SHAREDICON''->2;
 "Notification Interaction. These are offset by WM_USER"
 add: ''NIN_BALLOONSHOW'' ->2;
 add: ''NIN_BALLOONHIDE'' -> 3;
 add: ''NIN_BALLOONTIMEOUT'' -> 4;
 add: ''NIN_BALLOONUSERCLICK'' -> 5;'.

package classNames
 add: #TaskbarIcon;
 add: #TaskbarMenu;
 add: #TaskbarPresenterAbstract;
 yourself.

package methodNames
 add: #NOTIFYICONDATA -> #notify:title:for:withFlags:;
 add: #NOTIFYICONDATA -> #tipText:;
 add: 'NOTIFYICONDATA class' -> #defineFields;
 yourself.

package binaryGlobalNames: (Set new
 yourself).

package globalAliases: (Set new
 yourself).

package allResourceNames: (Set new
 yourself).

package!

"Class Definitions"!

Menu subclass: #TaskbarMenu
 instanceVariableNames: ''
 classVariableNames: ''
 poolDictionaries: ''
 classInstanceVariableNames: ''!
Presenter subclass: #TaskbarPresenterAbstract
 instanceVariableNames: ''
 classVariableNames: ''
 poolDictionaries: ''
 classInstanceVariableNames: ''!
View subclass: #TaskbarIcon
 instanceVariableNames: 'pnid icon'
 classVariableNames: 'TaskbarMessage TaskbarMessageMap'
 poolDictionaries: ''
 classInstanceVariableNames: ''!

"Global Aliases"!


"Loose Methods"!

!NOTIFYICONDATA methodsFor!

notify: aText title: aTitleText for: aIntMillisecs withFlags: aNIIFFlags
 self szInfo: aText; szInfoTitle: aTitleText; uTimeout: aIntMillisecs;
dwInfoFlags: aNIIFFlags.
 self uFlags: (self uFlags bitOr: NIF_INFO).!

tipText: aString
 "Set the receiver's szTip (tip text) field."

 |tmpString|
 "ShellLibrary earlier than version 5 accepts tipText up to 64 characters in
length"
 tmpString := ((ShellLibrary default versionInfo productMajor highWord < 5)
and: [aString size > 64])
  ifTrue: [aString copyFrom: 1 to: 64]
  ifFalse: [aString].
 self szTip: tmpString.
 self uFlags: (self uFlags bitOr: NIF_TIP)! !
!NOTIFYICONDATA categoriesFor:
#notify:title:for:withFlags:!accessing!public! !
!NOTIFYICONDATA categoriesFor: #tipText:!accessing!public! !

!NOTIFYICONDATA class methodsFor!

defineFields
 "Define the fields of the NOTIFYICONDATA 'structure'.
  self compileDefinition

  struct {
   DWORD cbSize;
   HWND hWnd;
   UINT uID;
   UINT uFlags;
   UINT uCallbackMessage;
   HICON hIcon;
   // NOTE that in ShellLibrary version < 5.0  this is limited to 64
   char szTip[128];
   // Available in ShellLibrary version >= 5.0
          DWORD dwState;
          DWORD dwStateMask;
           CHAR   szInfo[256];
           union {
               UINT  uTimeout;
               UINT  uVersion;
           } DUMMYUNIONNAME;
           CHAR   szInfoTitle[64];
           DWORD dwInfoFlags;
   // NOTE Available in ShellLibrary version >= 6
          GUID guidItem;
  } NOTIFYICONDATA;
 "

 self
  defineField: #cbSize   type: DWORDField writeOnly;
  defineField: #hWnd   type: HANDLEField writeOnly;
  defineField: #uID   type: DWORDField writeOnly;
  defineField: #uFlags   type: DWORDField new;
  defineField: #uCallbackMessage type: DWORDField writeOnly;
  defineField: #hIcon   type: HANDLEField writeOnly;
  defineField: #szTip   type: (StringField length: 128) beWriteOnly;
  defineField: #dwState   type: DWORDField new;
  defineField: #dwStateMask type: DWORDField writeOnly;
  defineField: #szInfo   type: (StringField length: 256) beWriteOnly;
  defineField: #uTimeout  type: DWORDField writeOnly;
  defineField: #szInfoTitle  type: (StringField length: 64) beWriteOnly;
  defineField: #dwInfoFlags  type: DWORDField writeOnly;
  defineField: #guidItem  type: (StructureField type: GUID) beFiller.

! !
!NOTIFYICONDATA class categoriesFor: #defineFields!initializing!public! !

"End of package definition"!

"Source Globals"!

"Classes"!

TaskbarMenu guid: (GUID fromString:
'{68EC8264-076A-42AA-87E1-D73BD179B215}')!
TaskbarMenu comment: ''!
!TaskbarMenu categoriesForClass!Graphics-Tools! !
!TaskbarMenu methodsFor!

showIn: aView position: aPos

"http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winu
i/windowsuserinterface/resources/menus/menureference/menufunctions/trackpopu
pmenu.asp

To display a context menu for a notification icon, the current window must
be the foreground window before the application calls TrackPopupMenu.
Otherwise, the menu will not disappear when the user clicks outside of the
menu or the window that created the menu (if it is visible). However, when
the current window is the foreground window, the second time this menu is
displayed, it displays and then immediately disappears. To correct this, you
must force a task switch to the application that called TrackPopupMenu at
some time in the near future. This is done by posting a benign message to
the window or thread, as shown in the following code sample:

   SetForegroundWindow(hDlg);
   TrackPopupMenu(   hSubMenu, TPM_RIGHTBUTTON,pt.x,pt.y, 0, hDlg, NULL);
   PostMessage(hDlg, WM_NULL, 0, 0);
"
 aView beForeground. "SetForegroundWindow"
 super showIn: aView position: aPos. "TrackPopupMenu"
 aView
  postMessage: WM_NULL
  wParam: 0
  lParam: 0. "PostMessage"
! !
!TaskbarMenu categoriesFor: #showIn:position:!public! !

TaskbarPresenterAbstract guid: (GUID fromString:
'{78E376D9-AC26-4316-BF81-6703B85524E5}')!
TaskbarPresenterAbstract comment: ''!
!TaskbarPresenterAbstract categoriesForClass!MVP-Presenters! !
!TaskbarPresenterAbstract methodsFor!

contextMenu
 ^(TaskbarMenu fromStrings: self menuStrings)
  setDefault: 1;
  yourself!

createView: aResourceNameString

 self view: ((TaskbarIcon icon: self class icon tipText: self taskbarName)
contextMenu: self contextMenu).

 ^self view!

exit
 self view close.
!

menuStrings
 "
  Something like this:

  ^ #('TaskbarApplication'
   'Command1//command1'
   'Command2//command2'
   '-'
   'Exit//exit'
  )

  Look at Menu class>>fromStrings: for further details.
  All commands should be 'must not strip'!!
 "

 ^ self subclassResponsibility!

showShell
 self view show!

taskbarName
 "Default tip text etc."
  ^ self subclassResponsibility! !
!TaskbarPresenterAbstract categoriesFor: #contextMenu!accessing!private! !
!TaskbarPresenterAbstract categoriesFor: #createView:!private! !
!TaskbarPresenterAbstract categoriesFor: #exit!commands!must not
strip!public! !
!TaskbarPresenterAbstract categoriesFor:
#menuStrings!accessing!constants!private! !
!TaskbarPresenterAbstract categoriesFor: #showShell!operations!public! !
!TaskbarPresenterAbstract categoriesFor:
#taskbarName!accessing!constants!private! !

TaskbarIcon guid: (GUID fromString:
'{84570C96-32F6-417B-8F68-9ED4C0415EA2}')!
TaskbarIcon comment: ''!
!TaskbarIcon categoriesForClass!Unclassified! !
!TaskbarIcon methodsFor!

destroy
 self hide.
 super destroy.!

dispatchRegistered: registeredId wParam: wParam lParam: lParam
 "Private - Dispatch the window message. lParam actually can contain a wide
set of WM messages. We re-dispatch baed on lParam if a system message and
handle the taskbar specific ones"
 | pt |
 pt := Cursor position.
 ^lParam < WM_USER
  ifTrue: [super dispatchMessage: lParam wParam: self asParameter lParam: pt
asDword]
  ifFalse: [
   | selector |
   selector := TaskbarMessageMap at: lParam - WM_USER ifAbsent: [ ^ true ].
   self perform: selector
  ].!

hide
 self sendTaskbar: NIM_DELETE!

icon: aIcon
 "Check if icon has changed and icon is shown, then NIM_MODIFY. Need to
store icon to avoid GC"
 icon := aIcon.
 self pnid icon: aIcon.
 self sendTaskbar: NIM_MODIFY.

!

initialize
 super initialize.
 self parentView: self class desktop.
!

notify: aText title: aTitle
 self notify: aText title: aTitle withFlags: NIIF_NONE.!

notify: aText title: aTitle withFlags: aNIIFFlags
 self pnid notify: aText title: aTitle for: self notifyTimeout withFlags:
aNIIFFlags.
 self sendTaskbar: NIM_MODIFY
!

notifyError: aText title: aTitle
 self notify: aText title: aTitle withFlags: NIIF_ERROR.
!

notifyInfo: aText title: aTitle
 self notify: aText title: aTitle withFlags: NIIF_INFO.
!

notifyTimeout
 ^10000!

notifyWarning: aText title: aTitle
 self notify: aText title: aTitle withFlags: NIIF_WARNING.
!

onBalloonClicked
 self presenter trigger: #balloonClicked.
 ^true!

onBalloonHide
 self presenter trigger: #balloonHide.
 ^true
!

onBalloonShow
 self pnid uFlags: (self pnid uFlags bitAnd: NIF_INFO bitInvert).
 self presenter trigger: #balloonShow.
 ^true
!

onBalloonTimeout
 self presenter trigger: #balloonTimeout.
 ^true
!

pnid
 pnid isNil ifTrue: [
  pnid := (NOTIFYICONDATA new); uID: 1; hWnd: self handle; message: self
class taskbarMessage.
  "pnid icon: (Bitmap fromFile: 'beacon.bmp')"].
 ^pnid.!

sendTaskbar: aMessage
 "aMessage is one of the NIM_* messages"
 ShellLibrary default shell_NotifyIcon: aMessage pnid: self pnid!

show
 self sendTaskbar: NIM_ADD.!

tipText: aText
 self pnid tipText: aText displayString.
 self sendTaskbar: NIM_MODIFY.
! !
!TaskbarIcon categoriesFor: #destroy!public! !
!TaskbarIcon categoriesFor: #dispatchRegistered:wParam:lParam:!private! !
!TaskbarIcon categoriesFor: #hide!public! !
!TaskbarIcon categoriesFor: #icon:!initializing!public! !
!TaskbarIcon categoriesFor: #initialize!initializing!public! !
!TaskbarIcon categoriesFor: #notify:title:!notification!public! !
!TaskbarIcon categoriesFor: #notify:title:withFlags:!notification!public! !
!TaskbarIcon categoriesFor: #notifyError:title:!notification!public! !
!TaskbarIcon categoriesFor: #notifyInfo:title:!notification!public! !
!TaskbarIcon categoriesFor: #notifyTimeout!private! !
!TaskbarIcon categoriesFor: #notifyWarning:title:!notification!public! !
!TaskbarIcon categoriesFor: #onBalloonClicked!initializing!public! !
!TaskbarIcon categoriesFor: #onBalloonHide!initializing!public! !
!TaskbarIcon categoriesFor: #onBalloonShow!initializing!public! !
!TaskbarIcon categoriesFor: #onBalloonTimeout!initializing!public! !
!TaskbarIcon categoriesFor: #pnid!private! !
!TaskbarIcon categoriesFor: #sendTaskbar:!private! !
!TaskbarIcon categoriesFor: #show!public! !
!TaskbarIcon categoriesFor: #tipText:!initializing!public! !

!TaskbarIcon class methodsFor!

icon: aIcon
 ^self new icon: aIcon!

icon: aIcon tipText: aString
 ^self new icon: aIcon; tipText: aString!

initialize
 "Private - TaskbarIcon initialize"
 TaskbarMessageMap:= LookupTable new.
 TaskbarMessageMap
  at: WM_LBUTTONDOWN    put: #onLeftButtonPressed;
  at: WM_RBUTTONDOWN    put: #onRightButtonPressed;
  at: WM_LBUTTONDBLCLK    put: #onLeftButtonDoubleClicked;
  at: WM_RBUTTONDBLCLK    put: #onRightButtonDoubleClicked;
  at: WM_CONTEXTMENU   put: #onContextMenu;
  at: NIN_BALLOONSHOW    put: #onBalloonShow;
  at: NIN_BALLOONHIDE    put: #onBalloonHide;
  at: NIN_BALLOONTIMEOUT   put: #onBalloonTimeout;
  at: NIN_BALLOONUSERCLICK put: #onBalloonClicked.!

taskbarMessage
 TaskbarMessage isNil ifTrue: [
  TaskbarMessage := self registerMessage: 'TaskbarMessage'].
 ^TaskbarMessage! !
!TaskbarIcon class categoriesFor: #icon:!instance creation!public! !
!TaskbarIcon class categoriesFor: #icon:tipText:!instance creation!public! !
!TaskbarIcon class categoriesFor: #initialize!private! !
!TaskbarIcon class categoriesFor: #taskbarMessage!public! !

"Binary Globals"!

"Resources"!

------

--
Dmitry Zamotkin


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

kuo-2
In reply to this post by Chris Uppal-3
On Thu, 8 Apr 2004 09:17:44 +0100, "Chris Uppal"
<[hidden email]> wrote:

>
>I'm still at v 5.1.2, so drop me a line if you'd like me to send a copy in the
>earlier format.
>
>(BTW, for anyone who's interested, the reason I'm not tracking the patches
>closely is that I still haven't found a way to do it that works well with
>STS -- how do other people manage this ?)
>
>    -- chris
>
Thanks, much appreciated to recieve it.

regards
kuo


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Christopher J. Demers
In reply to this post by Chris Uppal-3
"Chris Uppal" <[hidden email]> wrote in message
news:[hidden email]...
> I'm still at v 5.1.2, so drop me a line if you'd like me to send a copy in
the
> earlier format.
>
> (BTW, for anyone who's interested, the reason I'm not tracking the patches
> closely is that I still haven't found a way to do it that works well with
> STS -- how do other people manage this ?)

Does the new patch cause a problem with STS?  I have STS in my image, but
lately I only really use it to load previous versions of methods when I need
to.  I have drifted away from serious use of its version control features (I
just make frequent image backups now).  I haven't noticed a problem with it,
but my current level of use is probably much more limited than yours.

Chris


Reply | Threaded
Open this post in threaded view
|

STS and patch levels (Re: Taskbar again)

Bill Dargel
In reply to this post by Chris Uppal-3
Chris Uppal wrote:
> (BTW, for anyone who's interested, the reason I'm not tracking the patches
> closely is that I still haven't found a way to do it that works well with
> STS -- how do other people manage this ?)

FWIW, this is what I've settled into doing...

I start with the image as distributed by Object Arts (with any previous
live-updates), apply the current live-update, and save that as the new
starting point.

As to using STS, I like being able to (at the end of a development
episode) use STS to compare any packages that have their change marker
set. If it turns out there aren't any changes (or at least none that are
worthy :-) ) I just clear the change marker. If it's one of my packages,
I'll version off a new edition of it. If it's a package from the base
image, I'll move any extensions to my own package and version that. In
those rare cases where I actually want to patch a base method, I'll put
a copy of the method into a patch file (for my automatic build) and make
a new version of the base package in the STS repository, just so the
delta won't bother me again.

In order to get the STS package comparisons to work out, I version off
new editions of the base packages after doing the live update to a new
patch level. From the starting image, I install STS and then take a few
minutes to compare each of the base packages with what's in STS from the
previous version. For those that have been changed by the live-update,
I'll make a new version. Since a new PL doesn't happen very often, I
haven't felt the urge to automate this. Besides, browsing the changes on
a per package basis can be educational. Before doing this I inspect
"StsManager current" and set "developer" to 'Object Arts'. That way all
the package and method editions get properly identified.

Then from the starting image, I'll build a fresh working image using an
automated script every day or two, that includes everything I normally
work with. The script first installs STS and some packaged goodies and
patches. Then it mainly works by loading the latest editions of
indicated packages from STS.

hopefully this had some useful ideas,
-Bill


-------------------------------------------
Bill Dargel            [hidden email]
Shoshana Technologies
100 West Joy Road, Ann Arbor, MI 48105  USA


Reply | Threaded
Open this post in threaded view
|

Re: Taskbar again

Chris Uppal-3
In reply to this post by Christopher J. Demers
Christopher J. Demers wrote:

> > (BTW, for anyone who's interested, the reason I'm not tracking the
> > patches closely is that I still haven't found a way to do it that works
> > well with STS -- how do other people manage this ?)
>
> Does the new patch cause a problem with STS?

Not that *I* know of.  Though I suspect that the new base64 encoding of binary
resources will break STS's ability to import packages directly into its
database (but that's not a feature I use much, if at all).

No, it's just that I've yet to find a way of working with STS and Dolphin
patches that doesn't involve most of a morning messing around to install, and
version, the patches *and* get everything back the way I want it.

    -- chris