Index: openacs-4/packages/acs-subsite/www/permissions/grant.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/permissions/grant.adp,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/acs-subsite/www/permissions/grant.adp	7 Oct 2003 16:55:37 -0000	1.3
+++ openacs-4/packages/acs-subsite/www/permissions/grant.adp	12 Oct 2003 19:43:37 -0000	1.4
@@ -6,32 +6,15 @@
 <formtemplate id="grant">
 <formwidget id="object_id">
 <formwidget id="application_url">
+
 <table>
-  <tr valign="center">
+  <tr valign="top">
     <td>Grant: </td>
 
     <td>&nbsp;</td>
 
     <td>
-
-      <table border="0">
-        @first_tr;noquote@
-        <multiple name="mu_privileges">
-        <tr>
-          <td colspan="@mu_privileges.level@">&nbsp;&nbsp;&nbsp;</td>
-          <td colspan="@mu_privileges.inverted_level@">
-            <input type="checkbox" name="privileges" id="@mu_privileges.id@" value="@mu_privileges.privilege@" @mu_privileges.selected@>
-            <if @mu_privileges.standard_priv_p@ true>
-            <em><label for="@mu_privileges.id@">@mu_privileges.privilege@</label></em>
-            </if>
-            <else>
-            <label for="@mu_privileges.id@">@mu_privileges.privilege@</label>
-            </else>
-          </td>
-        </tr>
-        </multiple>
-      </table>
-
+      <formwidget id="privilege">
     </td>
 
     <td>&nbsp;</td>
Index: openacs-4/packages/acs-subsite/www/permissions/grant.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/permissions/grant.tcl,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/acs-subsite/www/permissions/grant.tcl	10 Oct 2003 08:20:42 -0000	1.8
+++ openacs-4/packages/acs-subsite/www/permissions/grant.tcl	12 Oct 2003 19:43:37 -0000	1.9
@@ -98,39 +98,15 @@
 incr maxlevel
 
 
-# Now the $hierarchy datastructure is ready, use it to build the
-# multirow that will be used for display.
-multirow create mu_privileges privilege level inverted_level selected id standard_priv_p
+# The $hierarchy datastructure is ready, fill a select widget options list with it.
 
-foreach elm $hierarchy {
-    foreach { level privilege } $elm {}
+foreach element $hierarchy {
+    set privilege [lindex $element 1]
+    set level [lindex $element 0]
 
-    # Preserve checked value of the privilege checkboxes for
-    # re-submitted form status.
-    if { [info exists privileges] && [lsearch $privileges $privilege]>-1 } {
-        set selected "CHECKED"
-    } else {
-        set selected ""
-    }
-
-    # set standard_priv_p to emphasize standard privileges in the
-    # layout
-    if { [lsearch {admin create write delete read} $privilege] > -1 } {
-        set standard_priv_p 1
-    } else {
-        set standard_priv_p 0
-    }
-
-    multirow append mu_privileges $privilege [expr $level+1] [expr $maxlevel - $level] $selected $privilege $standard_priv_p
+    lappend select_list [list "[string repeat "&nbsp;&nbsp;&nbsp;" $level] $privilege" $privilege]
 }
 
-# build an html tr line manually to layout the table
-set first_tr "<tr>"
-for { set i 0 } { $i < $maxlevel } { incr i } {
-    append first_tr "<td>&nbsp;&nbsp;&nbsp;</td>"
-}
-append first_tr "</tr>"
-
 form create grant
 
 element create grant object_id \
@@ -147,7 +123,28 @@
     -datatype party_search \
     -optional
 
+if { ![info exists privileges] } {
+    set privileges [list]
+}
 
+# limit the size of the select widget to a number that should fit on a
+# 1024x768 screen
+if { [llength $select_list] > 23 } {
+    set size 23
+} else {
+    set size [llength $select_list]
+}
+
+element create grant privilege \
+    -widget multiselect \
+    -datatype text \
+    -optional \
+    -html [list size $size] \
+    -options $select_list \
+    -value $privileges
+
+
+
 if { [form is_valid grant] } {
     # A valid submission, grant and revoke accordingly.