--- Begin Message ---
Thanks Mariano for the ideas. I will put them into practice. Then All I
have to do is to extends magritte classes to customize them.


On 18/03/2017 18:40, Mariano Martinez Peck wrote:
> Hi Asbath,
>
> Some answers below. But a general comment is that the typical case to
> customize magritte is by subclassing and then somehow use your own
> subclasses instead of magritte ones. 
>
> On Fri, Mar 17, 2017 at 3:54 AM, Asbath Sama biyalou
> <[email protected] <mailto:[email protected]>> wrote:
>
>     Hello.
>
>     I am using Magritte to generate reports for a pharo class. I want to
>     customize generated components in order to have a better design.
>
>     My class is Match
>
>     Object subclass: #Match
>         instanceVariableNames: 'date_match hour_match status actions
>     stadium
>     comments teams goals1 goals2 competition'
>         classVariableNames: ''
>         category: MyProject-Entity'
>
>
>     Descriptions for some variables.
>
>     Stadium is also a Class.
>
>     Match>>descriptionStadium
>     <magritteDescription>
>     ^ MASingleOptionDescription new
>         label: 'Stadium';
>         priority: 305;
>         accessor: #stadium;
>         options: Team allStadiumsName;
>         componentClass: TBSMagritteSelectListComponent;
>         beRequired;
>         yourself
>
>
>     Match>>descriptionTeams
>     <magritteDescription>
>     ^ MAMultipleOptionDescription new
>         label: 'Teams';
>         priority: 805;
>         accessor: #teams;
>         options: Team allTeamsName;
>         componentClass: MAMultiselectListComponent;
>         yourself
>
>
>     The generated component in the form is not very pretty. I want to have
>     multiple checkbox.
>
>
>
> In my case, I have customized ALL the components I use for Magritte.
> That is, I have my own Fa version (Fa is my package prefix). So I have
>  FaMAMultiselectListComponent  subclass of MAMultiselectListComponent.
> I have FaTBSMagritteSelectListComponent, subclass of
> TBSMagritteSelectListComponent , etc... so basically, you subclass and
> override the parent methods you want. Most common methods you need to
> override are renderEditorOn: html or renderViewerOn: html  etc...but
> that depends on WHAT you want to change and in WHICH component. Note
> they are all subclasses of MADescriptionComponent.
>
> You can also set your own properties in the magritte so that you can
> read them at your component level. For example, above I could say:
>
> Match>>descriptionTeams
> <magritteDescription>
> ^ MAMultipleOptionDescription new
>     label: 'Teams';
>     priority: 805;
>     accessor: #teams;
>     options: Team allTeamsName;
>     propertyAt: 'showInMultipleCheckboxs' put: true;
>     componentClass: FaMAMultiselectListComponent;
>     yourself
>
>
> Then in the rendering code of your subclass
> FaMAMultiselectListComponent you can do:
>
> (self magritteDescription propertyAt: 'showInMultipleCheckboxs') ifTrue: [
>  self renderAsMultiCheckboxsOn: html...
> ] ifFalse: [
> ...
> ]
>
> Of course, you can even define the accessors for
> #showInMultipleCheckboxs as extension methods in  MADescription
>
>
> To avoid having to define FaMAMultiselectListComponent for each
> MAMultipleOptionDescription .. well, there are many ways. But I guess
> that is for a later topic. Ask me if you want this.
>
>
>
>
>     Match>>descriptionStatus
>     <magritteDescription>
>     ^ MASingleOptionDescription new
>         label: 'Status';
>         priority: 505;
>         accessor: #status;
>         options: #('Pas en cours' 'En Cours' 'Mi-temps' 'Terminé');
>         componentClass: TBSMagritteSelectListComponent;
>         yourself
>
>
>     For the report I use the class SEMatchReport
>
>     TBSMagritteReport subclass: #SEMatchReport
>         instanceVariableNames: 'report'
>         classVariableNames: ''
>         category: 'MyProject-Components'
>
>
>     SEMatchReport class>>from
>         | report matchs commandColumn |
>         matchs := Match selectAll.
>         report:= self rows: matchs description: (self
>             filteredDescriptionsFrom: matchs anyOne).
>
>         commandColumn := MACommandColumn new.
>
>         (SEMatchReport new session isSimpleAdmin)
>         ifTrue: [
>             report addColumn: (commandColumn
>                 addCommandOn: report selector: #editMatch: text:
>     'Modifier';
>     yourself;
>                 addCommandOn: report selector: #addAction: text: 'Ajouter
>     une action'; yourself ) ]
>         ifFalse: [
>             report addColumn: (commandColumn
>                 addCommandOn: report selector: #editMatch: text:
>     'Modifier';
>     yourself;
>                 addCommandOn: report selector: #deleteMatch: text:
>     'Supprimer'; yourself;
>                 addCommandOn: report selector: #addAction: text: 'Ajouter
>     une action'; yourself ) ].
>
>         ^ report
>
>     I want to put some bootstrapp icons near commandColumn actions. like
>     pencil or delete on 'Supprimer'.
>
>
>
> To do this, again, subclass MACommandColumn,
> override renderCellContent:on:  and use your particular subclass. 
>
>  
>
>
>     SEMatchReport class>>filteredDescriptionsFrom: aMatch
>         ^ aMatch magritteDescription select: [ :each | #(date_match
>     hour_match stadium goals1 goals2 teams)
>             includes: each accessor selector ]
>
>     I notice that on the generated report on column stadium we have
>     aStadium. We don't have the value (the name). I don't know how to
>     mention it in the filtered descriptions.
>
>
>
> That's weird. I don't know.
>  
>
>
>     Change the color of lines in the report, etc. All that things.
>
>
> In this case I don't use the magritte row/even css classes.
>
> In my case, I have a subclass of MAReport (I guess you can subclass
> from the Bootstrap one) and changed the table rendering to use:
>
> table
> beHover;
> beBordered;
> beCondensed;
> beStriped;
>
> etc... so I let colors to Bootstrap / CSS.
> Cheers,
>
>  
>
>     Sorry for the bad english.
>
>     Thanks.
>
>     Asbath
>
>
>
>
> -- 
> Mariano
> http://marianopeck.wordpress.com

Cheers,

Asbath

--- End Message ---

Reply via email to