Socialmetrica/Socialmetrica.package/TwitterUser.class/instance/asCardElement.st

80 lines
2.5 KiB
Smalltalk

accessing
asCardElement
| aModeLook anEditor textInfoPane buttonsPane webpageButton |
self remoteIsFound
ifFalse:[ description := 'The user does not exist'.
url := nil.
createdAt := ZTimestamp now. ].
aModeLook := BrEditorModeAptitude new
editableFocused: [ :aWidget | aWidget border: (BlBorder paint: BrGlamorousColors focusedEditorBorderColor width: 1) ];
editableUnfocused: [ :aWidget | aWidget border: (BlBorder paint: BrGlamorousColors editorBorderColor width: 1) ];
readOnly: [ :aWidget | aWidget border: BlBorder empty ].
anEditor := BrEditor new
aptitude: BrGlamorousRegularEditorAptitude new + aModeLook;
text: self description;
vFitContent.
webpageButton := BrButton new
aptitude: BrGlamorousButtonWithLabelAptitude new;
label: self guiLinkLabel;
action: [ WebBrowser openOn: self url asString ].
textInfoPane := BrVerticalPane new
hMatchParent;
vFitContent;
margin: (BlInsets left: 20);
addChild: (BrLabel new
aptitude: BrGlamorousLabelAptitude;
text: '@' , self userName ;
beHugeSize);
addChild: (BrLabel new
aptitude: BrGlamorousLabelAptitude;
text: self name;
beLargeSize);
addChild: (BrLabel new
aptitude: BrGlamorousLabelAptitude;
text: 'Joined: ' , self createdAtShorted ).
self url ifNotNil: [textInfoPane addChild: webpageButton].
textInfoPane addChild: anEditor.
buttonsPane := BrHorizontalPane new
fitContent;
cellSpacing: 5;
addChildren: {
BrButton new
aptitude: BrGlamorousButtonWithLabelAptitude new;
label: 'Tweets';
action: [ :e | e phlow spawnObject: self messages ].
BrButton new
aptitude: BrGlamorousButtonWithLabelAptitude new;
label: 'Web view';
action: [ self webView ].
BrButton new
aptitude: BrGlamorousButtonWithLabelAptitude new;
label: 'PDF report';
action: [ WebBrowser openOn: self pdfReportFile fullName ].
"BrButton new
aptitude: BrGlamorousButtonWithLabelAptitude new;
label: 'Web report';
action: [ WebBrowser openOn: self htmlReportFile fullName ]."
}.
^ BrHorizontalPane new
padding: (BlInsets all: 15);
margin: (BlInsets all: 10);
cellSpacing: 5;
hMatchParent;
vFitContent;
addChildren: {
(self profileImage asElement asScalableElement size: 124 @ 124).
BrVerticalPane new
cellSpacing: 5;
hMatchParent;
vFitContent;
addChildren: {
buttonsPane.
textInfoPane.
}
}