While in the long run something as general as what Ziv suggested is desirable I decided to experiment with the seemingly simpler idea of a hidden widget used with an unchanged version of EditableTable.
Here is an example structure Theme = Ui.Make(Default) cookie userC : string table blocked : { User : string, Weekday : string, StartTime : string, CompleteTime : string } PRIMARY KEY (User, Weekday, StartTime) open Widget fun pad (n : int) : string = (if n < 10 then "0" else "") ^ show n fun twelveHour (h : int) (m : int) : string = let val ampm = if h < 12 then " am" else " pm" val hr = if h > 12 then h - 12 else h in pad hr ^ ":" ^ pad m ^ ampm end fun timeSlots (h : int) (lastH : int) : list string = let fun loop (acc : list string) (h : int) (lastH : int) = if h <= lastH then loop (twelveHour h 30 :: twelveHour h 0 :: acc) (h + 1) lastH else List.rev acc in loop [] h lastH end fun head [a] (ls : list a) : a = case ls of x :: _ => x | _ => error <xml>head of empty list</xml> fun tail [a] (ls : list a) : list a = case ls of _ :: ls' => ls' | _ => error <xml>tail of empty list</xml> fun withUser [t ::: Type] (action : string -> transaction t) : transaction t = user <- getCookie userC; case user of None => error <xml>cookie not set!</xml> | Some u => action u structure ET = EditableTable.Make( struct val tab = blocked val labels = {User = "", Weekday = "weekday", StartTime = "start time", CompleteTime = "end time"} val permission = return {Add = True, Delete = True, Modify = True} val widgets = let val timeSlots = timeSlots 7 21 val ht = head timeSlots val tt = tail timeSlots in {User = Widget.make { Configure = return (), Create = fn () => withUser source, Initialize = fn () => source, Reset = fn s => withUser (set s), AsWidget = fn s ido => case ido of None => <xml/> | Some id => <xml>{[id]}</xml>, Value = signal, AsValue = fn _ => <xml/> }, Weekday = choicebox "Sunday" ("Monday" :: "Tuesday" :: "Wednesday" :: "Thursday" :: "Friday" :: "Saturday" :: []), StartTime = choicebox ht tt, CompleteTime = choicebox ht tt } ++ _ end fun onAdd _ = return () fun onDelete _ = return () fun onModify _ = return () end) val main = setCookie userC {Value = "marko", Expires = None, Secure = False}; Theme.simple "Main" ET.ui On Thu, 13 Apr 2017 15:14:29 -0400, Adam Chlipala wrote: > > It seems the outcome is that someone would need to add this feature, but it's > probably along the lines of > code already present for other modules. > > On 04/11/2017 01:47 PM, Marko Schütz Schmuck wrote: > > On Tue, 11 Apr 2017 13:13:19 -0400, > Ziv Scully wrote: > > Am I correct in thinking that you basically want something like > InputStrings's "const" and "given" > parameters, but for EditableTable? > > Yes, from what I can tell... > > On Tue, Apr 11, 2017 at 13:03 Marko Schütz Schmuck > <markoschu...@googlemail.com> wrote: > > On Tue, 11 Apr 2017 12:18:59 -0400, > Adam Chlipala wrote: > > > > If the "user" field is not editable, how do you choose which > user to associate with a new row? > > I was thinking that it could be a transaction argument to the > widget > function like > > ... > val widgets = {User = sinkWidget (getCookie userC), ...} > > alternatively maybe it should be another part of the struct > passed to > the EditableTable.Make functor like "permission"? > > Best regards, > > Marko > > > On 04/11/2017 12:10 PM, Marko Schütz Schmuck wrote: > > > > On Tue, 11 Apr 2017 10:58:31 -0400, > > Adam Chlipala wrote: > > > > OK, so you don't want to support adding or deleting > rows, just editing the ones that > > already exist? I'm not sure UPO has something like > that right now, but I'd need to look > > through the code again to be sure. > > > > No, no: adding and deleting are required too. It's just > that I want to > > have the User field not editable. A "sink widget" that does > not > > display but can be assigned as the widget of a field might > work? The > > field would still be in the records and be stored in the > table. > > > > Best regards, > > > > Marko > > > > On 04/10/2017 04:14 PM, Marko Schütz Schmuck wrote: > > > > I was wondering whether the tools available in UPO > are already > > sufficient to cover the following: > > > > I have a table where each user can register several > tuples. For now, > > I'd like to present it as an editable table where > the field User is > > not editable (not even visible) and will be > constants for all tuples > > entered by that user. > > > > Best regards, > > > > Marko > > > > _______________________________________________ > > Ur mailing list > > Ur@impredicative.com > > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > > > > _______________________________________________ > > Ur mailing list > > Ur@impredicative.com > > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > > > > > > [2 <text/plain; utf-8 (base64)>] > > _______________________________________________ > > Ur mailing list > > Ur@impredicative.com > > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > _______________________________________________ > Ur mailing list > Ur@impredicative.com > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > > [2 <text/plain; utf-8 (base64)>] > _______________________________________________ > Ur mailing list > Ur@impredicative.com > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > > _______________________________________________ > Ur mailing list > Ur@impredicative.com > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > > > [2 <text/plain; utf-8 (base64)>] > _______________________________________________ > Ur mailing list > Ur@impredicative.com > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
pgpolJY1FV_Fl.pgp
Description: OpenPGP Digital Signature
_______________________________________________ Ur mailing list Ur@impredicative.com http://www.impredicative.com/cgi-bin/mailman/listinfo/ur