# This is the general properties file for the Antidote application.

#debug=true

# The following four module properties configure those properties that
# should be initialized and displayed by default by the GUI. If more
# than one module is configured for a property (as indicated providing
# class names as a comma delimited list), then each module will appear
# in its own tab in a JTabbedPane.

# Configure the modules that appear on the right of the UI.
org.apache.tools.ant.gui.Antidote.right.modules=\
	org.apache.tools.ant.gui.modules.edit.PropertyEditor

# Configure the modules that appear on the left of the UI.
org.apache.tools.ant.gui.Antidote.left.modules=\
	org.apache.tools.ant.gui.modules.edit.ElementNavigator

# Configure the modules that appear on the bottom of the UI.
org.apache.tools.ant.gui.Antidote.bottom.modules=\
	org.apache.tools.ant.gui.modules.console.BuildConsole

# Configure the modules that appear on the top of the UI.
org.apache.tools.ant.gui.Antidote.top.modules=\
	org.apache.tools.ant.gui.modules.TargetMonitor

org.apache.tools.ant.gui.modules.edit.PropertyEditor.name=Properties

org.apache.tools.ant.gui.modules.edit.ElementNavigator.name=Project
org.apache.tools.ant.gui.modules.edit.ElementNavigator.popupActions=\
    newTarget, newTask, newProperty

org.apache.tools.ant.gui.modules.TargetMonitor.name=Selected Target(s)
org.apache.tools.ant.gui.modules.TargetMonitor.defText=[none]

org.apache.tools.ant.gui.modules.console.BuildConsole.name=Console
org.apache.tools.ant.gui.modules.console.BuildConsole.logLevel=\
    Log message level:

org.apache.tools.ant.gui.core.XMLFileFilter.description=XML Files

org.apache.tools.ant.gui.core.ProjectSelectionMenu.name=Projects

org.apache.tools.ant.gui.command.LoadFileCmd.noFile=\
    The file "{0}" was not found.
org.apache.tools.ant.gui.command.LoadFileCmd.loadError=\
    The file "{0}" could not be loaded.
org.apache.tools.ant.gui.command.DisplayErrorCmd.title=Antidote Error...
org.apache.tools.ant.gui.command.DisplayErrorCmd.expand=Details >>

org.apache.tools.ant.gui.command.SaveCmd.saveError=Could not save to "{0}".
org.apache.tools.ant.gui.command.SaveCmd.noProject=No project to save.
org.apache.tools.ant.gui.command.SaveCmd.title=Overwrite?
org.apache.tools.ant.gui.command.SaveCmd.overwrite=Overwrite file "{0}"?

# Properties file for BeanInfo strings

org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.beanName=Target
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.beanDescription=\
    An executable target in the build.
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.name=Name
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.description=Description
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.depends=Dependencies
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.if=if Clause
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.unless=unless Clause
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.xmlString=XML Code
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.icon=target.gif

org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.beanName=Project
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.beanDescription=\
    The top level project in the build definition.
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.name=Name
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.description=Description
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.basedir=Base Directory
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.default=Default Target
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.icon=project.gif

org.apache.tools.ant.gui.acs.ACSPropertyElementBeanInfo.beanName=Property
org.apache.tools.ant.gui.acs.ACSPropertyElementBeanInfo.beanDescription=\
    A scoped property
org.apache.tools.ant.gui.acs.ACSPropertyElementBeanInfo.name=Name
org.apache.tools.ant.gui.acs.ACSPropertyElementBeanInfo.value=Value
org.apache.tools.ant.gui.acs.ACSPropertyElementBeanInfo.file=File
org.apache.tools.ant.gui.acs.ACSPropertyElementBeanInfo.icon=property.gif

org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.beanName=Task
org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.beanDescription=\
    A scoped property
org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.taskType=Type
org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.namedValues=Attributes
org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.xmlString=XML Code
org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.icon=task.gif


org.apache.tools.ant.gui.command.NewProjectCmd.defName=New Project
org.apache.tools.ant.gui.command.NewTargetCmd.defName=New Target

#----------------------------------------------------------------------------
# About Description (NB: this is only a temporary approach).
#----------------------------------------------------------------------------

org.apache.tools.ant.gui.About.title=About
org.apache.tools.ant.gui.About.ok=OK
org.apache.tools.ant.gui.About.message=\
	<html><h1>Antidote</h1> \
	<p>Copyright &copy; 2000 The Apache Software Foundation. <br>\
    All rights reserved.</p><br> \
    <p>Visit http://jakarta.apache.org/ant for more information.</p><br> \
    <table> \
	<tr><td align="right"><b>Version</b>:</td><td>{0}</td></tr> \
	<tr><td align="right"><b>Date</b>:</td><td>{1}</td></tr> \
    </table> \
	<hr> \
    <p>Icons Copyright &copy; 1998 Dean S. Jones (deansjones@hotmail.com)<br> \
    http://jfa.javalobby.org/projects/icons</p> \
	</html>



