-
-
Notifications
You must be signed in to change notification settings - Fork 346
/
DockingBarMenuItemMorph.class.st
144 lines (124 loc) · 4.13 KB
/
DockingBarMenuItemMorph.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
"
A DockingBarMenuItemMorph is a specialized version of its superclass for DockingBar behavior.
"
Class {
#name : 'DockingBarMenuItemMorph',
#superclass : 'MenuItemMorph',
#category : 'Morphic-Widgets-Extra',
#package : 'Morphic-Widgets-Extra'
}
{ #category : 'events' }
DockingBarMenuItemMorph >> activateOwnerMenu: evt [
^ self owner ifNil: [ false ] ifNotNil: [ :o | o activate: evt. true]
]
{ #category : 'selecting' }
DockingBarMenuItemMorph >> adjacentTo [
| verticalMargin |
verticalMargin := 4 + owner borderWidth.
owner isFloating
ifTrue: [^ {self bounds bottomLeft + (5 @ verticalMargin)}].
owner isAdheringToTop
ifTrue: [^ {self bounds bottomLeft + (5 @ verticalMargin)}].
owner isAdheringToLeft
ifTrue: [^ {self bounds topRight + (5 @ verticalMargin)}].
owner isAdheringToBottom
ifTrue: [^ {self bounds topLeft + (5 @ verticalMargin)}].
owner isAdheringToRight
ifTrue: [^ {self bounds topLeft + (5 @ verticalMargin negate)}].
^ {self bounds bottomLeft + (3 @ verticalMargin)}
]
{ #category : 'events' }
DockingBarMenuItemMorph >> deselectTimeOut: evt [
"Deselect timout. Now really deselect"
owner selectedItem == self
ifTrue: [
evt hand releaseMouseFocus: owner.
owner selectItem: nil event: evt ]
]
{ #category : 'events' }
DockingBarMenuItemMorph >> mouseDown: evt [
"Handle a mouse down event. Menu items get activated when the mouse is over them."
(evt shiftPressed and: [ self isEditable ])
ifTrue: [^ super mouseDown: evt]. "enable label editing"
isSelected
ifTrue: [ owner selectItem: nil event: evt ]
ifFalse: [ owner activate: evt. "Redirect to menu for valid transitions"
owner selectItem: self event: evt ]
]
{ #category : 'events' }
DockingBarMenuItemMorph >> mouseEnter: evt [
"The mouse entered the receiver"
owner ifNotNil: [owner stayUp ifFalse: [self mouseEnterDragging: evt]].
(owner selectedItem isNotNil
and: [owner selectedItem ~~ self])
ifTrue: [owner selectItem: self event: evt.]
]
{ #category : 'events' }
DockingBarMenuItemMorph >> mouseUp: evt [
"Handle a mouse up event. Menu items get activated when the mouse is over them. Do nothing if we're not in a 'valid menu transition', meaning that the current hand focus must be aimed at the owning menu."
evt hand mouseFocus == owner ifFalse: [^self].
self contentString ifNotNil:[
self contents: self contentString withMarkers: true inverse: true.
self refreshWorld.
(Delay forMilliseconds: 200) wait].
owner rootMenu selectItem: nil event: evt.
self invokeWithEvent: evt
]
{ #category : 'submorphs - accessing' }
DockingBarMenuItemMorph >> noteNewOwner: aMorph [
"I have just been added as a submorph of aMorph"
super noteNewOwner: aMorph.
self updateLayoutInDockingBar
]
{ #category : 'change reporting' }
DockingBarMenuItemMorph >> ownerChanged [
"The receiver's owner, some kind of a pasteup, has changed its
layout."
super ownerChanged.
self updateLayoutInDockingBar
]
{ #category : 'submorphs - accessing' }
DockingBarMenuItemMorph >> roundedCorners [
"Return a list of those corners to round"
owner isFloating
ifTrue: [^ #(1 4 )].
owner isAdheringToTop
ifTrue: [^ #(1 4 )].
owner isAdheringToBottom
ifTrue: [^ #(2 3 )].
owner isAdheringToLeft
ifTrue: [^ #(1 2 )].
owner isAdheringToRight
ifTrue: [^ #(3 4 )].
^ #(1 2 3 4 )
]
{ #category : 'private' }
DockingBarMenuItemMorph >> subMenuMarkerFormSet [
"private - answer the form set to be used as submenu marker"
owner isFloating
ifTrue: [ ^ self bottomArrowFormSet ].
owner isAdheringToTop
ifTrue: [ ^ self bottomArrowFormSet ].
owner isAdheringToBottom
ifTrue: [ ^ self upArrowFormSet ].
owner isAdheringToLeft
ifTrue: [ ^ self rightArrowFormSet ].
owner isAdheringToRight
ifTrue: [ ^ self leftArrowFormSet ].
^ self rightArrowFormSet
]
{ #category : 'private' }
DockingBarMenuItemMorph >> updateLayoutInDockingBar [
owner isVertical
ifTrue: [
self hResizing: #spaceFill.
self vResizing: #shrinkWrap]
ifFalse: [
self hResizing: #shrinkWrap.
self vResizing: #spaceFill].
self extent: self minWidth @ self minHeight
]
{ #category : 'rounding' }
DockingBarMenuItemMorph >> wantsRoundedCorners [
^self theme currentSettings preferRoundCorner
]