-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathPyramidThemeSelectorPresenter.class.st
More file actions
132 lines (102 loc) · 3.36 KB
/
PyramidThemeSelectorPresenter.class.st
File metadata and controls
132 lines (102 loc) · 3.36 KB
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
Class {
#name : #PyramidThemeSelectorPresenter,
#superclass : #SpPresenter,
#instVars : [
'themeSelector',
'buttonRefreshTheme',
'triggerThemeChangement'
],
#category : #'Pyramid-Toplo-plugin-theme-management'
}
{ #category : #'as yet unclassified' }
PyramidThemeSelectorPresenter >> applyTheme [
self shouldBeImplemented
]
{ #category : #accessing }
PyramidThemeSelectorPresenter >> buttonRefreshTheme [
^ buttonRefreshTheme
]
{ #category : #'as yet unclassified' }
PyramidThemeSelectorPresenter >> currentTheme [
^ self themeSelector selectedItem new
]
{ #category : #layout }
PyramidThemeSelectorPresenter >> defaultLayout [
^ SpBoxLayout newVertical
spacing: 4;
add: (SpBoxLayout newHorizontal
spacing: 4;
add: self labelPresenter;
add: self buttonRefreshTheme withConstraints: [ :c |
c height: 24.
c width: 24 ];
yourself)
expand: false;
add: (SpBoxLayout newHorizontal
spacing: 4;
add: 'Theme' width: 50;
add: self themeSelector;
yourself)
expand: false;
add: SpNullPresenter new height: 10;
yourself
]
{ #category : #initialization }
PyramidThemeSelectorPresenter >> initializeAllPossibleThemes [
| allThemes previousTheme |
previousTheme := self themeSelector selectedItem.
allThemes := ToTheme allSubclasses select: [ :theme |
theme canBeDefault ].
self triggerThemeChangement: false.
self themeSelector items: allThemes.
(previousTheme isNotNil and: [ allThemes includes: previousTheme ])
ifTrue: [ self themeSelector selectItem: previousTheme ]
ifFalse: [ self themeSelector selectItem: PyramidToploThemePlugin defaultTheme ].
self triggerThemeChangement: true
]
{ #category : #initialization }
PyramidThemeSelectorPresenter >> initializePresenters [
triggerThemeChangement := false.
themeSelector := SpDropListPresenter new
whenSelectedItemChangedDo: [ :aThemeClass |
self themeSelectionChanged: aThemeClass ];
yourself.
buttonRefreshTheme := SpButtonPresenter new
help: 'Refresh theme list.';
icon: (Smalltalk ui icons iconNamed: #refresh);
action: [ self initializeAllPossibleThemes ];
yourself.
self initializeAllPossibleThemes
]
{ #category : #initialization }
PyramidThemeSelectorPresenter >> labelPresenter [
^ self shouldBeImplemented
]
{ #category : #private }
PyramidThemeSelectorPresenter >> selectTheme: aToTheme [
self triggerThemeChangement: false.
self themeSelector selectItem: aToTheme class.
self triggerThemeChangement: true
]
{ #category : #'as yet unclassified' }
PyramidThemeSelectorPresenter >> themeSelectionChanged: aThemeClass [
aThemeClass ifNil: [ ^ self ].
self triggerThemeChangement ifTrue: [ self applyTheme ]
]
{ #category : #accessing }
PyramidThemeSelectorPresenter >> themeSelector [
^ themeSelector
]
{ #category : #accessing }
PyramidThemeSelectorPresenter >> triggerThemeChangement [
^ triggerThemeChangement
]
{ #category : #accessing }
PyramidThemeSelectorPresenter >> triggerThemeChangement: anObject [
triggerThemeChangement := anObject
]
{ #category : #'as yet unclassified' }
PyramidThemeSelectorPresenter >> variantSelectionChanged: aVariantClass [
aVariantClass ifNil: [ ^ self ].
self triggerThemeChangement ifTrue: [ self applyTheme ]
]