Skip to content

Commit 7b0abbf

Browse files
committed
Add User Interface
1 parent 09a2b20 commit 7b0abbf

8 files changed

Lines changed: 978 additions & 0 deletions
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
Class {
2+
#name : 'ExReqAbstractReportPresenter',
3+
#superclass : 'SpPresenter',
4+
#instVars : [
5+
'report',
6+
'titlePresenter'
7+
],
8+
#category : 'ExecutableRequirements-UI-Core',
9+
#package : 'ExecutableRequirements-UI',
10+
#tag : 'Core'
11+
}
12+
13+
{ #category : 'initialization - deprecated' }
14+
ExReqAbstractReportPresenter >> initializePresenter [
15+
16+
titlePresenter := ExReqReportTitleWidget new
17+
]
18+
19+
{ #category : 'as yet unclassified' }
20+
ExReqAbstractReportPresenter >> makeButton: aButton withEntryNamed: aString [
21+
22+
^ SpBoxLayout newHorizontal
23+
vAlignCenter;
24+
spacing: 4;
25+
add: aButton withConstraints: [ :c |
26+
c height: 24.
27+
c width: 24 ];
28+
add: (self makeEntryNamed: aString);
29+
yourself
30+
]
31+
32+
{ #category : 'as yet unclassified' }
33+
ExReqAbstractReportPresenter >> makeButton: aButton withEntryNamed: aString withLabelPresenter: aLabelPresenter [
34+
35+
^ SpBoxLayout newHorizontal
36+
spacing: 4;
37+
add: aButton withConstraints: [ :c | c height: 24. c width: 24 ];
38+
add: (self makeEntryNamed: aString) expand: false;
39+
add: aLabelPresenter;
40+
yourself
41+
]
42+
43+
{ #category : 'as yet unclassified' }
44+
ExReqAbstractReportPresenter >> makeEntryNamed: aString [
45+
46+
^ SpLabelPresenter new
47+
label: aString;
48+
displayBold: [ :t | true ];
49+
yourself
50+
]
51+
52+
{ #category : 'as yet unclassified' }
53+
ExReqAbstractReportPresenter >> makeEntryNamed: aString withLabelPresenter: aLabelPresenter [
54+
55+
^ SpBoxLayout newHorizontal
56+
spacing: 4;
57+
add: (self makeEntryNamed: aString)
58+
expand: false;
59+
add: aLabelPresenter;
60+
yourself
61+
]
62+
63+
{ #category : 'accessing' }
64+
ExReqAbstractReportPresenter >> refreshIcons [
65+
66+
self titlePresenter changeLabel: self titleLabel.
67+
self titlePresenter changeStatusIcon:
68+
(self statusIconFor: self report)
69+
]
70+
71+
{ #category : 'accessing' }
72+
ExReqAbstractReportPresenter >> report [
73+
74+
^ report
75+
]
76+
77+
{ #category : 'accessing' }
78+
ExReqAbstractReportPresenter >> report: anObject [
79+
80+
report := anObject.
81+
self updatePresenter
82+
]
83+
84+
{ #category : 'as yet unclassified' }
85+
ExReqAbstractReportPresenter >> statusIconFor: anExReqReport [
86+
87+
anExReqReport ifNil: [ ^ Smalltalk ui icons iconNamed: #blank ].
88+
anExReqReport isInstalled ifFalse: [
89+
^ Smalltalk ui icons iconNamed: #testNotRun ].
90+
anExReqReport isValid ifTrue: [
91+
^ Smalltalk ui icons iconNamed: #testGreen ].
92+
anExReqReport isRunning ifTrue: [
93+
^ Smalltalk ui icons iconNamed: #testYellow ].
94+
^ Smalltalk ui icons iconNamed: #testRed
95+
]
96+
97+
{ #category : 'accessing' }
98+
ExReqAbstractReportPresenter >> titleLabel [
99+
100+
^ self shouldBeImplemented
101+
]
102+
103+
{ #category : 'accessing' }
104+
ExReqAbstractReportPresenter >> titlePresenter [
105+
106+
^ titlePresenter
107+
]
108+
109+
{ #category : 'accessing' }
110+
ExReqAbstractReportPresenter >> updatePresenter [
111+
112+
super updatePresenter.
113+
self refreshIcons
114+
]
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
Class {
2+
#name : 'ExReqConditionWidget',
3+
#superclass : 'SpPresenter',
4+
#instVars : [
5+
'code',
6+
'button',
7+
'model',
8+
'label',
9+
'action'
10+
],
11+
#category : 'ExecutableRequirements-UI-Widgets',
12+
#package : 'ExecutableRequirements-UI',
13+
#tag : 'Widgets'
14+
}
15+
16+
{ #category : 'accessing' }
17+
ExReqConditionWidget >> action [
18+
19+
^ action
20+
]
21+
22+
{ #category : 'accessing' }
23+
ExReqConditionWidget >> action: aBlock [
24+
25+
action := aBlock
26+
]
27+
28+
{ #category : 'accessing' }
29+
ExReqConditionWidget >> button [
30+
31+
^ button
32+
]
33+
34+
{ #category : 'accessing' }
35+
ExReqConditionWidget >> changeIcon: anIcon [
36+
37+
self button icon: anIcon
38+
]
39+
40+
{ #category : 'accessing' }
41+
ExReqConditionWidget >> changeLabel: aString [
42+
43+
self label label: aString.
44+
]
45+
46+
{ #category : 'accessing' }
47+
ExReqConditionWidget >> code [
48+
49+
^ code
50+
]
51+
52+
{ #category : 'layout' }
53+
ExReqConditionWidget >> defaultLayout [
54+
55+
^ SpBoxLayout newVertical
56+
spacing: 4;
57+
add: (SpBoxLayout newHorizontal
58+
spacing: 4;
59+
add: self button withConstraints: [ :c |
60+
c width: 24.
61+
c height: 24 ];
62+
add: self label;
63+
yourself)
64+
expand: false;
65+
add: self code;
66+
yourself
67+
]
68+
69+
{ #category : 'initialization - deprecated' }
70+
ExReqConditionWidget >> initializePresenter [
71+
72+
action := [ ].
73+
code := SpCodePresenter new editable: false; yourself.
74+
button := SpButtonPresenter new icon: (Smalltalk ui icons iconNamed: #nautilus); action: [ self action value ]; yourself.
75+
label := SpLabelPresenter new displayBold: [ :t | true ]; label: 'Change me ...'; yourself
76+
]
77+
78+
{ #category : 'accessing' }
79+
ExReqConditionWidget >> label [
80+
81+
^ label
82+
]
83+
84+
{ #category : 'accessing' }
85+
ExReqConditionWidget >> model [
86+
87+
^ model
88+
]
89+
90+
{ #category : 'accessing' }
91+
ExReqConditionWidget >> model: anObject [
92+
93+
model := anObject
94+
]
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
Class {
2+
#name : 'ExReqReportTitleWidget',
3+
#superclass : 'SpPresenter',
4+
#instVars : [
5+
'report',
6+
'statusImage',
7+
'textLabel'
8+
],
9+
#category : 'ExecutableRequirements-UI-Widgets',
10+
#package : 'ExecutableRequirements-UI',
11+
#tag : 'Widgets'
12+
}
13+
14+
{ #category : 'accessing' }
15+
ExReqReportTitleWidget >> changeLabel: aString [
16+
17+
self textLabel label: aString
18+
]
19+
20+
{ #category : 'accessing' }
21+
ExReqReportTitleWidget >> changeStatusIcon: anIcon [
22+
23+
self statusImage image: anIcon
24+
]
25+
26+
{ #category : 'initialization - deprecated' }
27+
ExReqReportTitleWidget >> defaultLayout [
28+
29+
^ SpBoxLayout newHorizontal
30+
vAlignCenter;
31+
spacing: 4;
32+
add: self statusImage expand: false;
33+
add: self textLabel expand: false;
34+
yourself
35+
]
36+
37+
{ #category : 'initialization - deprecated' }
38+
ExReqReportTitleWidget >> initializePresenter [
39+
40+
statusImage := SpImagePresenter new
41+
image: (Smalltalk ui icons iconNamed: #testNotRun);
42+
yourself.
43+
textLabel := SpLabelPresenter new
44+
label: 'Change me ...';
45+
displayBold: [ :t | true ];
46+
yourself
47+
]
48+
49+
{ #category : 'accessing' }
50+
ExReqReportTitleWidget >> statusImage [
51+
52+
^ statusImage
53+
]
54+
55+
{ #category : 'accessing' }
56+
ExReqReportTitleWidget >> textLabel [
57+
58+
^ textLabel
59+
]
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
Class {
2+
#name : 'ExReqUIPresenter',
3+
#superclass : 'SpPresenter',
4+
#instVars : [
5+
'repositoryReportPresenter',
6+
'requirementReportPresenter',
7+
'stepReportPresenter',
8+
'repositoryReport',
9+
'isRefreshOnGoing'
10+
],
11+
#category : 'ExecutableRequirements-UI-Core',
12+
#package : 'ExecutableRequirements-UI',
13+
#tag : 'Core'
14+
}
15+
16+
{ #category : 'initialization' }
17+
ExReqUIPresenter >> connectPresenters [
18+
19+
self repositoryReportPresenter requirementReportsList
20+
whenSelectedItemChangedDo: [ :reqReport |
21+
self requirementReportPresenter report: reqReport ].
22+
self requirementReportPresenter verificationsTable
23+
whenSelectedItemChangedDo: [ :subReport |
24+
self stepReportPresenter report: subReport ]
25+
]
26+
27+
{ #category : 'layout' }
28+
ExReqUIPresenter >> defaultLayout [
29+
30+
^ SpPanedLayout newHorizontal positionOfSlider: 1/5;
31+
add: self repositoryReportPresenter;
32+
add: (SpPanedLayout newHorizontal
33+
add: self requirementReportPresenter;
34+
add: self stepReportPresenter;
35+
yourself);
36+
yourself
37+
]
38+
39+
{ #category : 'initialization - deprecated' }
40+
ExReqUIPresenter >> initializePresenter [
41+
42+
super initializePresenter.
43+
isRefreshOnGoing := false.
44+
repositoryReportPresenter := ExReqUIRepositoryReportPresenter new.
45+
requirementReportPresenter := ExReqUIRequirementReportPresenter new.
46+
stepReportPresenter := ExReqUIStepReportPresenter new
47+
]
48+
49+
{ #category : 'accessing' }
50+
ExReqUIPresenter >> isRefreshOnGoing [
51+
52+
^ isRefreshOnGoing
53+
]
54+
55+
{ #category : 'accessing' }
56+
ExReqUIPresenter >> isRefreshOnGoing: anObject [
57+
58+
isRefreshOnGoing := anObject
59+
]
60+
61+
{ #category : 'accessing' }
62+
ExReqUIPresenter >> refreshIcons [
63+
64+
self repositoryReportPresenter refreshIcons.
65+
self requirementReportPresenter refreshIcons.
66+
self stepReportPresenter refreshIcons
67+
]
68+
69+
{ #category : 'accessing' }
70+
ExReqUIPresenter >> refreshWithDelay [
71+
72+
self isRefreshOnGoing ifTrue: [ ^ self ].
73+
self isRefreshOnGoing: true.
74+
[
75+
self refreshIcons.
76+
(Delay forMilliseconds: 500) wait.
77+
self isRefreshOnGoing: false ]
78+
forkAt: Processor userBackgroundPriority
79+
named: 'Requirement Application update icons'
80+
]
81+
82+
{ #category : 'accessing' }
83+
ExReqUIPresenter >> repositoryReport [
84+
85+
^ repositoryReport
86+
]
87+
88+
{ #category : 'accessing' }
89+
ExReqUIPresenter >> repositoryReport: anExReqRepository [
90+
91+
repositoryReport := anExReqRepository.
92+
self repositoryReport announcer
93+
when: ExReqStepReportIsValidEvent
94+
do: [ :evt | self refreshWithDelay ]
95+
for: self.
96+
self repositoryReport announcer
97+
when: ExReqTracingPointInstalledEvent
98+
do: [ :evt | self refreshIcons ]
99+
for: self.
100+
self repositoryReport announcer
101+
when: ExReqTracingPointRemovedEvent
102+
do: [ :evt | self refreshIcons ]
103+
for: self.
104+
self updatePresenter
105+
]
106+
107+
{ #category : 'accessing' }
108+
ExReqUIPresenter >> repositoryReportPresenter [
109+
110+
^ repositoryReportPresenter
111+
]
112+
113+
{ #category : 'accessing' }
114+
ExReqUIPresenter >> requirementReportPresenter [
115+
116+
^ requirementReportPresenter
117+
]
118+
119+
{ #category : 'accessing' }
120+
ExReqUIPresenter >> stepReportPresenter [
121+
122+
^ stepReportPresenter
123+
]
124+
125+
{ #category : 'initialization' }
126+
ExReqUIPresenter >> updatePresenter [
127+
128+
self repositoryReportPresenter report: self repositoryReport.
129+
]

0 commit comments

Comments
 (0)