diff togglePanel.urs @ 19:3a303df9ae92

Partial generalize togglePanel solution (breaks build)
author Ron de Bruijn <rmbruijn@gmail.com>
date Fri, 23 Sep 2011 13:30:01 +0200
parents 16447dc6a68c
children 554e342665fe
line wrap: on
line diff
--- a/togglePanel.urs	Thu Sep 22 19:24:01 2011 +0200
+++ b/togglePanel.urs	Fri Sep 23 13:30:01 2011 +0200
@@ -2,33 +2,37 @@
  * disappears when the user activates an associated control.  The
  * panel may contain another gui widget as content. *)
 
-con togglePanel :: Type -> Type
+con togglePanel :: Type -> {Unit} -> Type
 (* The type of appearing and disappearing panels.  The argument
  * is the type of the content. *)
 
-type formatCtl = {FormatPanel : xbody -> xbody -> xbody,
-                  (* Allows for formatting the panel.  The first two parameters
-                   * represent "holes" for the control and panel respectively while
-                   * the result should be the desired xml laying out the whole structure.
-                   * The controls can be formatted with the options below.
-                   * The panel part appears and disappears according to the use 
-                   * of the controls. *)
+con formatCtl :: {Unit} -> Type 
+
+(* type formatCtl = {FormatPanel : xbody -> xbody -> xbody, *)
+(*                   (\* Allows for formatting the panel.  The first two parameters *)
+(*                    * represent "holes" for the control and panel respectively while *)
+(*                    * the result should be the desired xml laying out the whole structure. *)
+(*                    * The controls can be formatted with the options below. *)
+(*                    * The panel part appears and disappears according to the use  *)
+(*                    * of the controls. *\) *)
                   
-                  OpenCtl : transaction unit -> xbody,
-                  (* This should accept the transaction representing the opening of
-                   * the panel and produce an xml control having this as action. *)
+(*                   OpenCtl : transaction unit -> xbody, *)
+(*                   (\* This should accept the transaction representing the opening of *)
+(*                    * the panel and produce an xml control having this as action. *\) *)
 
-                  CloseCtl : transaction unit -> xbody}
-                  (* This should accept the transaction representing the closing of
-                   * the panel and produce an xml control having this as action. *)
+(*                   CloseCtl : transaction unit -> xbody} *)
+(*                   (\* This should accept the transaction representing the closing of *)
+(*                    * the panel and produce an xml control having this as action. *\) *)
 
-val defaultFormat : formatCtl
 (* Some reasonable default formats for the layout and controls. *)
+val defaultFormat :  other_ctx:::{Unit} -> [other_ctx ~ body] => formatCtl other_ctx
 
-val create : t ::: Type ->  Gui.gui t xbody -> formatCtl -> t -> bool -> transaction (togglePanel t)
+val create : t ::: Type -> other_ctx:::{Unit} -> [other_ctx ~ body] => 
+    Gui.gui t (xml ([Body] ++ other_ctx) [] []) -> formatCtl other_ctx -> t -> bool -> transaction (togglePanel t other_ctx)
 (* Given instructions for formatting the display, some content and whether to start in
  * the open state get such a togglePanel. *)
 
-val gui_togglePanel : t ::: Type -> Gui.gui t xbody -> Gui.gui (togglePanel t) xbody
+val gui_togglePanel : t ::: Type ->  other_ctx:::{Unit} -> [other_ctx ~ body] => 
+    Gui.gui t (xml ([Body] ++ other_ctx) [] []) -> Gui.gui (togglePanel t other_ctx) (xml ([Body] ++ other_ctx) [] [])
 (* The togglePanel is itself a widget.  It can be pretty printed to a piece
  * of xml with a use of toXml. *)