12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970(**************************************************************************)(* *)(* SPDX-License-Identifier LGPL-2.1 *)(* Copyright (C) *)(* CEA (Commissariat à l'énergie atomique et aux énergies alternatives) *)(* *)(**************************************************************************)letscope=function|None->"Global"|Somes->Format.asprintf"%a"Cil_datatype.Position.prettystyperow=Log.eventtypet={append:row->unit;clear:unit->unit;}moduleData=Indexer.Make(structtypet=int*rowletcompare(x,_)(y,_)=Stdlib.comparexyend)letmake~packing~callback=letmodel=object(self)valmutablem=Data.emptyvalmutableage=0methoddata=mmethodsize=Data.sizemmethodindexi=Data.indeximmethodgeti=Data.getimmethodaddi=age<-age+1;m<-Data.add(age,i)m;age,imethodreload=age<-0;m<-Data.emptymethodcoerce=(self:>(int*row)Wtable.listmodel)endinletw=newWtable.list~packing~headers:true~rules:truemodel#coerceinletappende=w#insert_row(model#adde)inletclear()=(* Post a reload request before clearing.
The current model is used to know how many rows
must be deleted. *)w#reload;inletopenLoginlet_=w#add_column_pixbuf~title:"Kind"[`YALIGN0.0;`XALIGN0.5](fun(_,e)->matchewith|{evt_kind=Error}->[`STOCK_ID"gtk-dialog-error"]|{evt_kind=Warning}->[`STOCK_ID"gtk-dialog-warning"]|_->[`STOCK_ID"gtk-dialog-info"])inlet_=w#add_column_text~title:"Source"[`YALIGN0.0](fun(_,{evt_source=src})->[`TEXT(scopesrc)])inlet_=w#add_column_text~title:"Plugin"[`YALIGN0.0](fun(_,{evt_plugin=m})->[`TEXTm])inlet_=w#add_column_text~title:"Message"[`YALIGN0.0;`EDITABLEtrue](fun(_,e)->[`TEXT(Log.Event.messagee)])inw#on_click(fun(_,w)c->callbackwc);{append=append;clear=clear}letappendtmessage=t.appendmessageletcleart=t.clear()