##########################################################################
# TEPAM - Tcl's Enhanced Procedure and Argument Manager
##########################################################################
#
# 1b_procedure_interactive_widgets.demo: This file is part of the TEPAM demo
#
# Copyright (C) 2009, 2010 Andreas Drollinger
# 
# Id: 1b_procedure_interactive_widgets.demo
##########################################################################
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
##########################################################################

#### Initialization ####

DemoControl(Initialization) 1
DemoControl(IsExecutable) {0}

# This demo shows how the interactive procedure calls open the argument entry form
# with the different available widget types.

   package require Tk
   package require tepam
   namespace import -force tepam::*; # Import tepam::procedure and tepam::argument_dialogbox

#### Entry ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides simply entry widgets for the arguments that meet the
# following criterias:
# 1) No argument specific widget types are available
# 2) No choice lists are defined for the arguments.

   procedure entry_example {
      -args {
         {str -description "String argument"}
         {val -type integer -default 0 -description "Integer argument"}
      }
   } {
      return "str:'$str' val:'$val'"
   }

   entry_example -interactive

#### Text ####

DemoControl(IsExecutable) {1}

# A multi line text widget is used for arguments that that have the type 'text'.

   procedure text_example {
      -args {
         {txt -type text -description "Text argument"}
      }
   } {
      return "txt:'$txt'"
   }

   text_example -interactive

#### Checkbox ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides checkboxes for the arguments that meet the
# following criterias:
# 1) A tiny choice list is provided (with less or equal than 4 elements)
# 2) No multiple selections are allowed

   procedure checkbox_example {
      -args {
         {FontStyle -description "Font sytle" 
                    -multiple -choices {bold italic underline} 
                    -choicelabels {Bold Italic Underline} -default italic}
      }
   } {
      return "FontStyle: $FontStyle"
   }

   checkbox_example -interactive

#### Radiobox ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides radioboxes for the arguments that meet the
# following criterias:
# 1) A tiny choice list is provided (with less or equal than 4 elements)
# 2) Multiple selections are allowed

   procedure radiobox_example {
      -args {
         {Adjustment -description "Text adjustment" 
                     -choices {left center right} 
                     -choicelabels {Left Center Right} -default left}
      }
   } {
      return "Adjustment: $Adjustment"
   }

   radiobox_example -interactive

#### Checkbutton ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides checkbuttons for the arguments that meet the
# following criterias:
# 1) The argument is a flag/switch, e.g. the argument type is 'none'.

   procedure checkbutton_example {
      -args {
         {-Capitalize -type none -description "Capitalize" -default 1}
      }
   } {
      return "Capitalize: $Capitalize"
   }

   checkbutton_example -interactive

#### Listbox ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides listboxes for the arguments that meet the
# following criterias:
# 1) A large choice list is provided (with more than 4 elements)
# 2) No multiple selections are allowed

   procedure listbox_example {
      -args {
         {Location -description "Picture location" 
                   -choices {top left center right buttom} 
                   -choicelabels {Top Left Center Right Buttom} -default center}
      }
   } {
      return "Location: $Location"
   }

   listbox_example -interactive

#### Disjoint listbox ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides disjoint listboxes for the arguments that meet the
# following criterias:
# 1) A large choice list is provided (with more than 4 elements)
# 2) Multiple selections are allowed

   procedure listbox_example {
      -args {
         {FontStyle -description "Font sytle" -multiple 
                    -choices {bold italic underline overstrike capitalized superscript subscript} 
                    -choicelabels {Bold Italic Underline Overstrike Capitalized Superscript Subscript} 
                    -default {italic bold}}
      }
   } {
      return "FontStyle: '$FontStyle'"
   }

   listbox_example -interactive

#### Files ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides file selection widgets for the arguments that meet the
# following criterias:
# 1) The argument type is 'file' or 'existingfile'.

   procedure file_example {
      -return            -
      -short_description "File copy"
      -description       "This procedure allows copying a file."
      -args {
         {-source -type existingfile -description "Existing file" 
                  -auxargs {-filetypes {{"Log files" *.log} {"All files" *.*}}}}
         {-dest -type file -description "Archived new file"}
      }
   } {
      return "source: '$source', dest: '$dest'"
   }

   file_example -interactive

#### Directories ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides directory selection widgets for the arguments that meet the
# following criterias:
# 1) The argument type is 'directory' or 'existingdirectory'.

   procedure directory_example {
      -return            -
      -short_description "File copy"
      -description       "This procedure allows copying a file."
      -args {
         {-source -type existingdirectory -description "Source directory"}
         {-dest -type directory -description "Destination directory"}
      }
   } {
      return "source: '$source', dest: '$dest'"
   }

   directory_example -interactive

#### Color ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides color selection widgets for the arguments that meet the
# following criterias:
# 1) The argument type is 'color'.

  procedure color_example {
      -args {
         {color -type color -description "Color" -default red}
      }
   } {
      return "color:'$color'"
   }

   color_example -interactive

#### Font ####

DemoControl(IsExecutable) {1}

# The interactive entry form provides font selection widgets for the arguments that meet the
# following criterias:
# 1) The argument type is 'font'.

  procedure font_example {
      -args {
         {font -type font -description "Font" -default {Arial 12 italic}}
      }
   } {
      return "font:'$font'"
   }

   font_example -interactive

##########################################################################
# Id: 1b_procedure_interactive_widgets.demo
# Modifications:
#
# Revision 1.3  2012/05/07 20:27:26  droll
# * TEPAM version 0.4.0
# * Add the new text procedure argument type and the text multi line data
#   entry widget.
#
# Revision 1.2  2011/01/21 16:00:49  droll
# * TEPAM version 0.2.0
#
# Revision 1.1  2010/02/11 21:54:38  droll
# * TEPAM module checkin
##########################################################################