Index: openacs-4/packages/xowiki/tcl/includelet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/includelet-procs.tcl,v diff -u -r1.15 -r1.16 --- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 28 Feb 2008 09:04:30 -0000 1.15 +++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 10 Mar 2008 13:16:02 -0000 1.16 @@ -2091,7 +2091,8 @@ } - ::xowiki::IncludeletClass create create-item-button -superclass ::xowiki::includelet::item-button \ + ::xowiki::IncludeletClass create create-item-button \ + -superclass ::xowiki::includelet::item-button \ -parameter { {__decoration none} {src /resources/acs-subsite/Add16.gif} @@ -2509,54 +2510,77 @@ namespace eval ::xowiki::includelet { ############################################################################# + Class create form-menu-button \ + -parameter { + form + method + link + package_id + base + return_url + {label_suffix ""} + } + form-menu-button instproc render {} { + my instvar package_id base form method return_url label_suffix link + if {![info exists link]} { + set link [$package_id make_link -link $base $form $method return_url] + } + if {$link eq ""} { + return "" + } + set msg_key [namespace tail [my info class]] + set label [_ xowiki.$msg_key [list form_name [$form name]]]$label_suffix + return "$label" + } + + Class form-menu-button-new -superclass form-menu-button -parameter { + {method create-new} + } + Class form-menu-button-answers -superclass form-menu-button -parameter { + {method list} + } + form-menu-button-answers instproc render {} { + set count [[my form] count_usages] + my label_suffix " ($count)" + next + } + + Class form-menu-button-form -superclass form-menu-button -parameter { + {method view} + } + + ::xowiki::IncludeletClass create form-menu \ -superclass ::xowiki::Includelet \ -parameter { {__decoration none} {parameter_declaration { - {-form_item_id:integer,required} + {-form_item_id:integer} + {-buttons {new answers}} + {-button_objs} + {-return_url} }} } form-menu instproc render {} { my get_parameters - # todo return_url my instvar __including_page - set base [$package_id pretty_link [$__including_page name]] - set new_link [$package_id make_link -link $base $__including_page create-new return_url] - set answer_link [$package_id make_link -link $base $__including_page list return_url] - set template [::xo::db::CrClass get_instance_from_db -item_id $form_item_id] - set count [$template count_usages] - set links [list] - foreach l [list new_link answer_link] { - if {[set $l] ne ""} { - set label #xowiki.form-menu-$l# - if {$l eq "answer_link"} {append label " ($count) "} - lappend links "$label" + if {![info exists button_objs]} { + set form [::xo::db::CrClass get_instance_from_db -item_id $form_item_id] + set base [$package_id pretty_link [$form name]] + foreach b $buttons { + set obj [form-menu-button-$b new -volatile -package_id $package_id \ + -base $base -form $form] + if {[info exists return_url]} {$obj return_url $return_url} + lappend button_objs $obj } } + set links [list] + foreach b $button_objs { lappend links [$b render] } return "