###############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
###############################################################################

# Enable HTML whitespace compression; deprecated: use output specific "compress" setting instead; see for example screen.compress
#compress.HTML=true

# Enable screen widget boundary comments.
# A setting of true will enable widget boundary comments. The true setting can be
# overridden in an application's web.xml file or in the screen rendering context.
# A setting of false will override all other settings and disable all widget
# boundary comments. 
widget.verbose=true

# Default number of items to be displayed per page in a list form
widget.form.defaultViewSize=20

# Default number of items to be displayed in lookup ajax autocompleter
widget.autocompleter.defaultViewSize=10

# Default minimum number of characters an user has to type before the ajax autocompleter activates (jQuery default is 1)
widget.autocompleter.defaultMinLength=2

# Default delay in milliseconds the Autocomplete waits after a keystroke to activate itself. A zero-delay makes sense for local data (more responsive), but can produce a lot of load for remote data, while being less responsive.
widget.autocompleter.defaultDelay=300

# Show/hide the ID field that is returned from ajax autocompleter
widget.autocompleter.displayReturnField=Y

# Show/hide description for lookup field
widget.lookup.showDescription=Y

# Default position and size for lookup layered windows
widget.lookup.position=topleft
widget.lookup.width=640
widget.lookup.height=500

# Default position and size for Jgrowl error messages
# accept : top-left, top-right, bottom-left, bottom-right, center
widget.jgrowl.position=center
widget.jgrowl.width=600
widget.jgrowl.height=
widget.jgrowl.speed=100

# Default text find field's option
widget.form.defaultTextFindOption=contains

# Controls whether to display help text tooltips for form field titles
widget.form.displayhelpText=Y

# Controls the initial results display in Find screens. If set to Y, the
# search result list will be populated when the Find screen first appears.
# If set to N, the search result list will be empty when the Find screen
# first appears.
widget.defaultNoConditionFind=N

#Default size for layered modal windows
widget.link.default.layered-modal.width=800
widget.link.default.layered-modal.height=600

# Configurations for the Widget View Handlers implemented using the MacroScreenViewHandler
#
# html output
screen.name=html
screen.screenrenderer=component://widget/templates/HtmlScreenMacroLibrary.ftl
screen.formrenderer=component://widget/templates/HtmlFormMacroLibrary.ftl
screen.menurenderer=component://widget/templates/HtmlMenuMacroLibrary.ftl
screen.treerenderer=component://widget/templates/HtmlTreeMacroLibrary.ftl
screen.encoder=html
screen.compress=false
screen.default.contenttype=UTF-8
screen.default.encoding=none
# text output
screentext.name=text
screentext.screenrenderer=component://widget/templates/TextScreenMacroLibrary.ftl
screentext.formrenderer=component://widget/templates/TextFormMacroLibrary.ftl
screentext.treerenderer=component://widget/templates/TextTreeMacroLibrary.ftl
screentext.default.contenttype=UTF-8
screentext.default.encoding=none
# xml output
screenxml.name=xml
screenxml.screenrenderer=component://widget/templates/XmlScreenMacroLibrary.ftl
screenxml.formrenderer=component://widget/templates/XmlFormMacroLibrary.ftl
screenxml.treerenderer=component://widget/templates/XmlTreeMacroLibrary.ftl
screenxml.encoder=xml
screenxml.default.contenttype=UTF-8
screenxml.default.encoding=none
# xls output
screenxls.name=xls
screenxls.screenrenderer=component://widget/templates/xlsScreenMacroLibrary.ftl
screenxls.formrenderer=component://widget/templates/xlsFormMacroLibrary.ftl
screenxls.treerenderer=component://widget/templates/xlsTreeMacroLibrary.ftl
screenxls.encoder=html
screenxls.default.contenttype=application/vnd.ms-excel
screenxls.default.encoding=none
# fo output
screenfop.name=xsl-fo
screenfop.screenrenderer=component://widget/templates/FoScreenMacroLibrary.ftl
screenfop.formrenderer=component://widget/templates/FoFormMacroLibrary.ftl
screenfop.treerenderer=component://widget/templates/FoTreeMacroLibrary.ftl
screenfop.default.contenttype=application/pdf
screenfop.default.encoding=none
# csv output
screencsv.name=csv
screencsv.screenrenderer=component://widget/templates/CsvScreenMacroLibrary.ftl
screencsv.formrenderer=component://widget/templates/CsvFormMacroLibrary.ftl
screencsv.treerenderer=component://widget/templates/CsvTreeMacroLibrary.ftl
screencsv.default.contenttype=UTF-8
screencsv.default.encoding=none
